From 76b48c1994d743db1c2ac872eea4f8553d32e07a Mon Sep 17 00:00:00 2001 From: Damien Angelos Date: Sun, 26 Oct 2014 20:20:33 -0400 Subject: [PATCH 001/439] Added line number option to code blocks --- MacDown.xcodeproj/project.pbxproj | 12 +- .../xcshareddata/xcschemes/MacDown.xcscheme | 2 +- .../MPExportPanelAccessoryViewController.h | 1 + MacDown/Code/Document/MPDocument.m | 5 + MacDown/Code/Document/MPRenderer.h | 1 + MacDown/Code/Document/MPRenderer.m | 24 ++- MacDown/Code/Extension/hoedown_html_patch.c | 17 +- MacDown/Code/Preferences/MPPreferences.h | 1 + MacDown/Code/Preferences/MPPreferences.m | 2 + .../MPExportPanelAccessoryViewController.xib | 9 +- .../MPHtmlPreferencesViewController.xib | 197 +++++++++--------- 11 files changed, 157 insertions(+), 114 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index cd4b83f0..6bef2832 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -535,7 +535,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = MP; - LastUpgradeCheck = 0600; + LastUpgradeCheck = 0610; ORGANIZATIONNAME = "Tzu-ping Chung "; TargetAttributes = { 1FA6DE441941CC9E000409FB = { @@ -637,7 +637,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/components.js $TARGET"; + shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/components.js $TARGET\ncp -r $SOURCE/plugins $TARGET"; showEnvVarsInLog = 0; }; 46C28C219A3C4CCD94797747 /* Copy Pods Resources */ = { @@ -892,7 +892,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx10.8; + SDKROOT = macosx; }; name = Debug; }; @@ -924,7 +924,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.8; - SDKROOT = macosx10.8; + SDKROOT = macosx; }; name = Release; }; @@ -939,7 +939,7 @@ INFOPLIST_FILE = "MacDown/MacDown-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = MacDown; - SDKROOT = macosx10.8; + SDKROOT = macosx; WRAPPER_EXTENSION = app; }; name = Debug; @@ -955,7 +955,7 @@ INFOPLIST_FILE = "MacDown/MacDown-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = MacDown; - SDKROOT = macosx10.8; + SDKROOT = macosx; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme index fbaa0143..f4364d15 100644 --- a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme +++ b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme @@ -1,6 +1,6 @@ d = self.delegate; if ([d rendererHasSyntaxHighlighting:self] != self.syntaxHighlighting) changed = YES; + else if ([d rendererHasLineNumbers:self] != self.lineNumbers) + changed = YES; else if ([d rendererHasMathJax:self] != self.mathjax) changed = YES; else if (!MPAreNilableStringsEqual( @@ -469,6 +490,7 @@ - (void)render self.styleName = [delegate rendererStyleName:self]; self.mathjax = [delegate rendererHasMathJax:self]; self.syntaxHighlighting = [delegate rendererHasSyntaxHighlighting:self]; + self.lineNumbers = [delegate rendererHasLineNumbers:self]; self.highlightingThemeName = [delegate rendererHighlightingThemeName:self]; } diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c index 33b479f9..ecb75f75 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.c +++ b/MacDown/Code/Extension/hoedown_html_patch.c @@ -28,7 +28,7 @@ void hoedown_patch_render_blockcode( hoedown_buffer *mapped = NULL; if (state->language_addition) mapped = state->language_addition(lang, state->owner); - HOEDOWN_BUFPUTSL(ob, "
data, mapped->size, 0);
@@ -43,10 +43,17 @@ void hoedown_patch_render_blockcode(
 		HOEDOWN_BUFPUTSL(ob, "
");
 	}
 
-	if (text)
-		hoedown_escape_html(ob, text->data, text->size, 0);
-
-	HOEDOWN_BUFPUTSL(ob, "
\n"); + if (text) { + // prism line numbers plugin expects ending
tag to be on same line as + // code block, so remove any trailing newline + size_t size = text->size; + if (size && text->data[size - 1] == '\n') { + size--; + } + hoedown_escape_html(ob, text->data, size, 0); + } + + HOEDOWN_BUFPUTSL(ob, "
\n
\n"); } // Supports task list syntax if HOEDOWN_HTML_USE_TASK_LIST is on. diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 10087047..203d3b1c 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -59,6 +59,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) BOOL htmlSyntaxHighlighting; @property (assign) NSString *htmlHighlightingThemeName; @property (assign) NSURL *htmlDefaultDirectoryUrl; +@property (assign) BOOL htmlLineNumbers; // Calculated values. @property (nonatomic, assign) NSFont *editorBaseFont; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index c4495154..8b0014ea 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -103,6 +103,7 @@ - (instancetype)init @dynamic htmlSyntaxHighlighting; @dynamic htmlDefaultDirectoryUrl; @dynamic htmlHighlightingThemeName; +@dynamic htmlLineNumbers; // Private preference. @dynamic editorBaseFontInfo; @@ -171,6 +172,7 @@ - (void)loadDefaultPreferences self.htmlStyleName = kMPDefaultHtmlStyleName; self.htmlDefaultDirectoryUrl = [NSURL fileURLWithPath:NSHomeDirectory() isDirectory:YES]; + self.htmlLineNumbers = NO; } - (void)loadDefaultUserDefaults diff --git a/MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib b/MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib index 192175b2..1f933f41 100644 --- a/MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib +++ b/MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib @@ -1,7 +1,8 @@ - + - + + @@ -12,14 +13,13 @@ - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 1f462183e09b464e65406c820b386d4b8db634ef Mon Sep 17 00:00:00 2001 From: Damien Angelos Date: Sun, 26 Oct 2014 20:20:33 -0400 Subject: [PATCH 002/439] Added line number option to code blocks --- MacDown.xcodeproj/project.pbxproj | 2 +- .../MPExportPanelAccessoryViewController.h | 1 + MacDown/Code/Document/MPDocument.m | 5 ++ MacDown/Code/Document/MPRenderer.h | 1 + MacDown/Code/Document/MPRenderer.m | 24 ++++++++- MacDown/Code/Extension/hoedown_html_patch.c | 17 ++++-- MacDown/Code/Preferences/MPPreferences.h | 1 + MacDown/Code/Preferences/MPPreferences.m | 2 + .../MPHtmlPreferencesViewController.xib | 54 +++++++++++-------- 9 files changed, 79 insertions(+), 28 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index d86d5446..67e78f04 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -637,7 +637,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/components.js $TARGET"; + shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/components.js $TARGET\ncp -r $SOURCE/plugins $TARGET"; showEnvVarsInLog = 0; }; 46C28C219A3C4CCD94797747 /* Copy Pods Resources */ = { diff --git a/MacDown/Code/Application/MPExportPanelAccessoryViewController.h b/MacDown/Code/Application/MPExportPanelAccessoryViewController.h index 5ce410f9..1dd12fbd 100644 --- a/MacDown/Code/Application/MPExportPanelAccessoryViewController.h +++ b/MacDown/Code/Application/MPExportPanelAccessoryViewController.h @@ -12,5 +12,6 @@ @property (getter=isStylesIncluded) BOOL stylesIncluded; @property (getter=isHighlightingIncluded) BOOL highlightingIncluded; +@property (getter=isLineNumbersIncluded) BOOL lineNumbersIncluded; @end diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index cd1e4b78..23557dd3 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -882,6 +882,11 @@ - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer return self.preferences.htmlHighlightingThemeName; } +- (BOOL)rendererHasLineNumbers:(MPRenderer *)renderer +{ + return self.preferences.htmlLineNumbers; +} + - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html { // Delayed copying for -copyHtml. diff --git a/MacDown/Code/Document/MPRenderer.h b/MacDown/Code/Document/MPRenderer.h index de8928a7..31f67484 100644 --- a/MacDown/Code/Document/MPRenderer.h +++ b/MacDown/Code/Document/MPRenderer.h @@ -48,6 +48,7 @@ - (NSString *)rendererStyleName:(MPRenderer *)renderer; - (BOOL)rendererDetectsFrontMatter:(MPRenderer *)renderer; - (BOOL)rendererHasSyntaxHighlighting:(MPRenderer *)renderer; +- (BOOL)rendererHasLineNumbers:(MPRenderer *)renderer; - (BOOL)rendererHasMathJax:(MPRenderer *)renderer; - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer; - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html; diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index b5364fb7..d7b3dbba 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -170,6 +170,7 @@ @interface MPRenderer () @property BOOL frontMatter; @property BOOL mathjax; @property BOOL syntaxHighlighting; +@property BOOL lineNumbers; @property BOOL manualRender; @property (copy) NSString *highlightingThemeName; @@ -297,7 +298,17 @@ - (NSArray *)baseStylesheets - (NSArray *)prismStylesheets { NSString *name = [self.delegate rendererHighlightingThemeName:self]; - return @[[MPStyleSheet CSSWithURL:MPHighlightingThemeURLForName(name)]]; + NSMutableArray *stylesheets = [NSMutableArray arrayWithObject:[MPStyleSheet CSSWithURL:MPHighlightingThemeURLForName(name)]]; + + // add line numbers if enabled + if ([self.delegate rendererHasLineNumbers:self]) { + NSBundle *bundle = [NSBundle mainBundle]; + NSURL *lineNumbersStylesheet = [bundle URLForResource:@"prism-line-numbers" + withExtension:@"css" + subdirectory:@"Prism/plugins/line-numbers"]; + [stylesheets addObject:[MPStyleSheet CSSWithURL:lineNumbersStylesheet]]; + } + return stylesheets; } - (NSArray *)prismScripts @@ -312,6 +323,14 @@ - (NSArray *)prismScripts for (NSURL *url in MPPrismScriptURLsForLanguage(language)) [scripts addObject:[MPScript javaScriptWithURL:url]]; } + + // add line numbers if enabled + if ([self.delegate rendererHasLineNumbers:self]) { + NSURL *lineNumbersScript = [bundle URLForResource:@"prism-line-numbers.min" + withExtension:@"js" + subdirectory:@"Prism/plugins/line-numbers"]; + [scripts addObject:[MPScript javaScriptWithURL:lineNumbersScript]]; + } return scripts; } @@ -444,6 +463,8 @@ - (void)renderIfPreferencesChanged id d = self.delegate; if ([d rendererHasSyntaxHighlighting:self] != self.syntaxHighlighting) changed = YES; + else if ([d rendererHasLineNumbers:self] != self.lineNumbers) + changed = YES; else if ([d rendererHasMathJax:self] != self.mathjax) changed = YES; else if (!MPAreNilableStringsEqual( @@ -470,6 +491,7 @@ - (void)render self.styleName = [delegate rendererStyleName:self]; self.mathjax = [delegate rendererHasMathJax:self]; self.syntaxHighlighting = [delegate rendererHasSyntaxHighlighting:self]; + self.lineNumbers = [delegate rendererHasLineNumbers:self]; self.highlightingThemeName = [delegate rendererHighlightingThemeName:self]; } diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c index 8ba0ee53..358caea6 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.c +++ b/MacDown/Code/Extension/hoedown_html_patch.c @@ -29,7 +29,7 @@ void hoedown_patch_render_blockcode( hoedown_buffer *mapped = NULL; if (extra->language_addition) mapped = extra->language_addition(lang, extra->owner); - HOEDOWN_BUFPUTSL(ob, "
data, mapped->size, 0);
@@ -44,10 +44,17 @@ void hoedown_patch_render_blockcode(
 		HOEDOWN_BUFPUTSL(ob, "
");
 	}
 
-	if (text)
-		hoedown_escape_html(ob, text->data, text->size, 0);
-
-	HOEDOWN_BUFPUTSL(ob, "
\n"); + if (text) { + // prism line numbers plugin expects ending
tag to be on same line as + // code block, so remove any trailing newline + size_t size = text->size; + if (size && text->data[size - 1] == '\n') { + size--; + } + hoedown_escape_html(ob, text->data, size, 0); + } + + HOEDOWN_BUFPUTSL(ob, "
\n
\n"); } // Supports task list syntax if HOEDOWN_HTML_USE_TASK_LIST is on. diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 10087047..203d3b1c 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -59,6 +59,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) BOOL htmlSyntaxHighlighting; @property (assign) NSString *htmlHighlightingThemeName; @property (assign) NSURL *htmlDefaultDirectoryUrl; +@property (assign) BOOL htmlLineNumbers; // Calculated values. @property (nonatomic, assign) NSFont *editorBaseFont; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index c4495154..8b0014ea 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -103,6 +103,7 @@ - (instancetype)init @dynamic htmlSyntaxHighlighting; @dynamic htmlDefaultDirectoryUrl; @dynamic htmlHighlightingThemeName; +@dynamic htmlLineNumbers; // Private preference. @dynamic editorBaseFontInfo; @@ -171,6 +172,7 @@ - (void)loadDefaultPreferences self.htmlStyleName = kMPDefaultHtmlStyleName; self.htmlDefaultDirectoryUrl = [NSURL fileURLWithPath:NSHomeDirectory() isDirectory:YES]; + self.htmlLineNumbers = NO; } - (void)loadDefaultUserDefaults diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index 40feef85..c9e9b518 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -1,5 +1,5 @@ - + @@ -16,11 +16,11 @@ - + - + @@ -28,7 +28,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -79,7 +79,7 @@ - + @@ -107,7 +107,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -130,7 +130,7 @@ + - + - + - + - + @@ -206,13 +217,14 @@ - + + From f5b1e13395b388aaef647aece32361ccf782a69f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 10 Jan 2015 15:11:06 +0800 Subject: [PATCH 003/439] Only register MathJax callback when we should Fix #237. --- MacDown/Resources/MathJax/callback.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/MacDown/Resources/MathJax/callback.js b/MacDown/Resources/MathJax/callback.js index 25f39431..0d797c84 100644 --- a/MacDown/Resources/MathJax/callback.js +++ b/MacDown/Resources/MathJax/callback.js @@ -1,3 +1,5 @@ -MathJax.Hub.Register.StartupHook('End', function () { - MathJaxListener.invokeCallbackForKey_('End'); -}); +if (typeof MathJaxListener !== 'undefined') { + MathJax.Hub.Register.StartupHook('End', function () { + MathJaxListener.invokeCallbackForKey_('End'); + }); +} From 7ccf1c37198204f1b3c2be7598c6ec5889b094b5 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 17 Jan 2015 21:05:44 +0800 Subject: [PATCH 004/439] Update help file to reflect new Hoedown behaviour --- MacDown/Resources/help.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index 5b63cb1b..ad949c9b 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -83,22 +83,20 @@ I support many popular languages as well as some generic syntax descriptions tha The following is a list of optional inline markups supported: Option name | Markup | Result if enabled | -----------------------|------------------|-----------------------| -Intra-word emphasis | This\*is\*good | Thisisgood | -Strikethrough | \~~Much wow\~~ | Much wow | -Underline [^1] | \_So doge\_ | So doge | -Quote [^2] [^3] | "Such editor" | Such editor | -Highlight | \==So good\== | So good | -Superscript [^4] [^5] | hoge\^(fuga) | hogefuga | -Autolink | http://t.co | http://t.co | -Footnotes [^4] | [\^6] and [\^6]: | [^6] and footnote 6 below | +--------------------|------------------|-----------------------| +Intra-word emphasis | This\*is\*good | Thisisgood | +Strikethrough | \~~Much wow\~~ | Much wow | +Underline [^1] | \_So doge\_ | So doge | +Quote [^2] [^3] | \"Such editor\" | Such editor | +Highlight | \==So good\== | So good | +Superscript | hoge\^(fuga) | hogefuga | +Autolink | http://t.co | http://t.co | +Footnotes | [\^4] and [\^4]: | 4 and footnote 4 below | [^1]: If **Underline** is disabled. _this_ will be the same as *this*. [^2]: Note that this is different from *blockquote* (a `> `-prefixed block), which is part of the standard Markdown syntax specification. [^3]: **Quote** and **Smartypants** are syntactically incompatible with each other. The former will take precedence. -[^4]: **Superscript** and **Footnotes** are syntactically incompatible with each other. The former will take precedence. -[^5]: LaTeX `^` superscripts in math will fail if you enabled the **Superscript** extension. You will need to use MathML if you want math support and ***Superscript*** together. -[^6]: This is a footnote. +[^4]: This is a footnote. ### Document Formatting From c0b5c0633640d25ea0f4984fd1f879b6ff0f0f2e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 18 Jan 2015 16:33:49 +0800 Subject: [PATCH 005/439] Improve word-counting for code blocks and spans Fix #244 --- MacDown.xcodeproj/project.pbxproj | 6 ++ MacDown/Code/Document/MPDocument.m | 64 +------------ MacDown/Code/Extension/DOMNode+Text.h | 25 +++++ MacDown/Code/Extension/DOMNode+Text.m | 133 ++++++++++++++++++++++++++ 4 files changed, 169 insertions(+), 59 deletions(-) create mode 100644 MacDown/Code/Extension/DOMNode+Text.h create mode 100644 MacDown/Code/Extension/DOMNode+Text.m diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 8cc1779b..8181b056 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 1F25E1C31A50F4F10029371D /* MPColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F25E1C21A50F4F10029371D /* MPColorTests.m */; }; 1F27896B1973BEB100EE696A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F2789691973BEB100EE696A /* Localizable.strings */; }; 1F2A17281A1BB3E30055A107 /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */; }; + 1F3386E61A6B999600FC88C4 /* DOMNode+Text.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */; }; 1F33F2A11A3B4B660001C849 /* MPDocumentSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A01A3B4B660001C849 /* MPDocumentSplitView.m */; }; 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */; }; 1F396E6619B0EA17000D3EFC /* MPEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F396E6519B0EA17000D3EFC /* MPEditorView.m */; }; @@ -171,6 +172,8 @@ 1F27896A1973BEB100EE696A /* Base */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Base; path = Localization/Base.lproj/Localizable.strings; sourceTree = ""; }; 1F2A17261A1BB3E30055A107 /* NSUserDefaults+Suite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+Suite.h"; path = "macdown-cmd/NSUserDefaults+Suite.h"; sourceTree = SOURCE_ROOT; }; 1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+Suite.m"; path = "macdown-cmd/NSUserDefaults+Suite.m"; sourceTree = SOURCE_ROOT; }; + 1F3386E41A6B999600FC88C4 /* DOMNode+Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DOMNode+Text.h"; sourceTree = ""; }; + 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DOMNode+Text.m"; sourceTree = ""; }; 1F33F29F1A3B4B660001C849 /* MPDocumentSplitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDocumentSplitView.h; sourceTree = ""; }; 1F33F2A01A3B4B660001C849 /* MPDocumentSplitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDocumentSplitView.m; sourceTree = ""; }; 1F33F2A21A3B56D20001C849 /* NSColor+HTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+HTML.h"; sourceTree = ""; }; @@ -288,6 +291,8 @@ 1F0D9D5D194AC7CF008E1856 /* Extension */ = { isa = PBXGroup; children = ( + 1F3386E41A6B999600FC88C4 /* DOMNode+Text.h */, + 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */, 1F33F2A21A3B56D20001C849 /* NSColor+HTML.h */, 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */, 1FFEB3231972D88900B2254F /* NSObject+HTMLTabularize.h */, @@ -906,6 +911,7 @@ 1F0D9D76194AC7F7008E1856 /* MPEditorPreferencesViewController.m in Sources */, 1F8A83621953461800B6BF69 /* pmh_parser.c in Sources */, 1F8A835D1953454F00B6BF69 /* HGMarkdownHighlighter.m in Sources */, + 1F3386E61A6B999600FC88C4 /* DOMNode+Text.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index cc8155be..d4ed7895 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -17,6 +17,7 @@ #import "NSColor+HTML.h" #import "NSString+Lookup.h" #import "NSTextView+Autocomplete.h" +#import "DOMNode+Text.h" #import "MPPreferences.h" #import "MPDocumentSplitView.h" #import "MPEditorView.h" @@ -81,24 +82,6 @@ } -@implementation NSString (WordCount) - -- (NSUInteger)numberOfWords -{ - __block NSUInteger count = 0; - NSStringEnumerationOptions options = - NSStringEnumerationByWords | NSStringEnumerationSubstringNotRequired; - [self enumerateSubstringsInRange:NSMakeRange(0, self.length) - options:options usingBlock: - ^(NSString *str, NSRange strRange, NSRange enclosingRange, BOOL *stop) { - count++; - }]; - return count; -} - -@end - - @implementation MPPreferences (Hoedown) - (int)extensionFlags { @@ -141,38 +124,6 @@ - (int)rendererFlags } @end -@implementation DOMNode (Text) - -- (NSString *)nodeText -{ - NSMutableString *text = [NSMutableString string]; - switch (self.nodeType) - { - case 1: - case 9: - case 11: - if ([self respondsToSelector:@selector(tagName)]) - { - NSString *tagName = [(id)self tagName].uppercaseString; - if ([tagName isEqualToString:@"SCRIPT"] - || [tagName isEqualToString:@"STYLE"] - || [tagName isEqualToString:@"HEAD"]) - break; - } - for (DOMNode *c = self.firstChild; c; c = c.nextSibling) - [text appendString:c.nodeText]; - break; - case 3: - case 4: - return self.nodeValue; - default: - break; - } - return text; -} - -@end - @interface MPDocument () + +struct DOMNodeTextCount +{ + NSUInteger words; + NSUInteger characters; + NSUInteger characterWithoutSpaces; +}; + +typedef struct DOMNodeTextCount DOMNodeTextCount; + + +@interface DOMNode (Text) + +@property (readonly, nonatomic) DOMNodeTextCount textCount; + +@end diff --git a/MacDown/Code/Extension/DOMNode+Text.m b/MacDown/Code/Extension/DOMNode+Text.m new file mode 100644 index 00000000..93006fbb --- /dev/null +++ b/MacDown/Code/Extension/DOMNode+Text.m @@ -0,0 +1,133 @@ +// +// DOMNode+Text.m +// MacDown +// +// Created by Tzu-ping Chung on 18/1. +// Copyright (c) 2015 Tzu-ping Chung . All rights reserved. +// + +#import "DOMNode+Text.h" + +typedef NS_ENUM(NSUInteger, DOMNodeTextCountingOption) +{ + DOMNodeTextCountWords, + DOMNodeTextCountCharacters, + DOMNodeTextCountCharactersWithoutWhiteSpaces, +}; + +NS_INLINE NSUInteger MPGetNodeTextCount(DOMNode *, DOMNodeTextCountingOption); + +@implementation NSString (WordCount) + +- (NSUInteger)numberOfWords +{ + __block NSUInteger count = 0; + NSStringEnumerationOptions options = + NSStringEnumerationByWords | NSStringEnumerationSubstringNotRequired; + [self enumerateSubstringsInRange:NSMakeRange(0, self.length) + options:options usingBlock: + ^(NSString *str, NSRange strRange, NSRange enclosingRange, BOOL *stop) { + count++; + }]; + return count; +} + +- (NSUInteger)lengthWithoutNewlines +{ + static NSCharacterSet *sp = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sp = [NSCharacterSet newlineCharacterSet]; + }); + + NSUInteger length = 0; + for (NSString *comp in [self componentsSeparatedByCharactersInSet:sp]) + length += comp.length; + return length; +} + + +- (NSUInteger)lengthWithoutWhitespacesAndNewlines +{ + static NSCharacterSet *sp = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sp = [NSCharacterSet whitespaceAndNewlineCharacterSet]; + }); + + NSUInteger length = 0; + for (NSString *comp in [self componentsSeparatedByCharactersInSet:sp]) + length += comp.length; + return length; +} + +@end + + +NS_INLINE NSUInteger MPGetChildrenNodetextCount( + DOMNode *node, DOMNodeTextCountingOption opt) +{ + NSUInteger count = 0; + for (DOMNode *c = node.firstChild; c; c = c.nextSibling) + count += MPGetNodeTextCount(c, opt); + return count; +} + + +NS_INLINE NSUInteger MPGetNodeTextCount( + DOMNode *node, DOMNodeTextCountingOption opt) +{ + switch (node.nodeType) + { + case 1: + case 9: + case 11: + if ([node respondsToSelector:@selector(tagName)]) + { + NSString *tagName = [(id)node tagName].uppercaseString; + if ([tagName isEqualToString:@"SCRIPT"] + || [tagName isEqualToString:@"STYLE"] + || [tagName isEqualToString:@"HEAD"]) + return 0; + if (opt == DOMNodeTextCountWords + && [tagName isEqualToString:@"CODE"]) + { + // A PRE-CODE combo, i.e. a code block. Exclude. + if ([node.parentElement.tagName isEqualToString:@"PRE"]) + return 0; + // An inline code counts as ONE word if it has content. + return MPGetChildrenNodetextCount(node, opt) ? 1 : 0; + } + } + return MPGetChildrenNodetextCount(node, opt); + case 3: + case 4: + switch (opt) + { + case DOMNodeTextCountWords: + return node.nodeValue.numberOfWords; + case DOMNodeTextCountCharacters: + return node.nodeValue.lengthWithoutNewlines; + case DOMNodeTextCountCharactersWithoutWhiteSpaces: + return node.nodeValue.lengthWithoutWhitespacesAndNewlines; + } + default: + break; + } + return 0; +} + + +@implementation DOMNode (Text) + +- (DOMNodeTextCount)textCount +{ + DOMNodeTextCount count; + count.words = MPGetNodeTextCount(self, DOMNodeTextCountWords); + count.characters = MPGetNodeTextCount(self, DOMNodeTextCountCharacters); + count.characterWithoutSpaces = + MPGetNodeTextCount(self, DOMNodeTextCountCharactersWithoutWhiteSpaces); + return count; +} + +@end \ No newline at end of file From 639c49478c238018cbe206674da6f49c1e4bed20 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 18 Jan 2015 16:47:30 +0800 Subject: [PATCH 006/439] Improve UI before initial word count is loaded --- MacDown/Code/Document/MPDocument.m | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d4ed7895..e218d584 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -149,6 +149,7 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property BOOL copying; @property BOOL printing; @property BOOL shouldHandleBoundsChange; +@property BOOL isPreviewReady; @property (nonatomic) BOOL rendersTOC; @property (readonly) BOOL previewVisible; @property (readonly) BOOL editorVisible; @@ -266,6 +267,7 @@ - (instancetype)init if (!self) return nil; + self.isPreviewReady = NO; self.shouldHandleBoundsChange = YES; self.previousSplitRatio = -1.0; return self; @@ -359,6 +361,7 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller [wordCountWidget selectItemAtIndex:self.preferences.editorWordCountType]; wordCountWidget.alphaValue = 0.9; wordCountWidget.hidden = !self.preferences.editorShowWordCount; + wordCountWidget.enabled = NO; } - (void)canCloseDocumentWithDelegate:(id)delegate @@ -691,6 +694,8 @@ - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame NSOperationQueue *queue = [NSOperationQueue mainQueue]; [queue addOperationWithBlock:callback]; } + + self.isPreviewReady = YES; // Update word count if (self.preferences.editorShowWordCount) @@ -1399,6 +1404,9 @@ - (void)updateWordCount self.totalWords = count.words; self.totalCharacters = count.characters; self.totalCharactersNoSpaces = count.characterWithoutSpaces; + + if (self.isPreviewReady) + self.wordCountWidget.enabled = YES; } - (void)document:(NSDocument *)doc didPrint:(BOOL)ok context:(void *)context From 91392b553b798217898c8e760e8c9d00a7588173 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 18 Jan 2015 16:49:56 +0800 Subject: [PATCH 007/439] Update Prism to 820001c (latest 20150118) --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 46b75132..820001c8 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 46b75132625e7b33dfb02359e92d27fbc55560dd +Subproject commit 820001c85f4c5056f32d2e6b43cd1d98d98f3c03 From 2d67c4336497cf0e794e453d823296917dc7fbba Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 18 Jan 2015 16:56:17 +0800 Subject: [PATCH 008/439] Add highlighter alias jl for julia Fix #243 --- MacDown/Code/Document/MPRenderer.m | 1 + 1 file changed, 1 insertion(+) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 15a20d7f..91a0c7ad 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -193,6 +193,7 @@ @interface MPRenderer () @"coffee-script": @"coffeescript", @"cs": @"csharp", @"html": @"markup", + @"jl": @"julia", @"js": @"javascript", @"json": @"javascript", @"objective-c": @"objectivec", From 254dcd2f2b36d526249d0bdcb3aea0cff35d7055 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 18 Jan 2015 17:52:02 +0800 Subject: [PATCH 009/439] Make editor widht-limiting work on startup Fix #236 --- MacDown/Code/Document/MPDocument.m | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index e218d584..345d281c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -305,9 +305,6 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller self.renderer.dataSource = self; self.renderer.delegate = self; - [self setupEditor:nil]; - [self redrawDivider]; - for (NSString *key in MPEditorPreferencesToObserve()) { [defaults addObserver:self forKeyPath:key @@ -362,6 +359,14 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller wordCountWidget.alphaValue = 0.9; wordCountWidget.hidden = !self.preferences.editorShowWordCount; wordCountWidget.enabled = NO; + + // These needs to be queued until after the window is shown, so that editor + // can have the correct dimention for size-limiting and stuff. See + // https://github.com/uranusjr/macdown/issues/236 + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + [self setupEditor:nil]; + [self redrawDivider]; + }]; } - (void)canCloseDocumentWithDelegate:(id)delegate From cd37c31fbcf65cc2b891723d1035aefd251678ec Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 19 Jan 2015 00:26:40 +0800 Subject: [PATCH 010/439] Inline private functions --- MacDown/Code/Document/MPDocument.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 345d281c..f0c9f86e 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -31,7 +31,7 @@ static NSString * const kMPRendersTOCPropertyKey = @"Renders TOC"; -static NSString *MPEditorPreferenceKeyWithValueKey(NSString *key) +NS_INLINE NSString *MPEditorPreferenceKeyWithValueKey(NSString *key) { if (!key.length) return @"editor"; @@ -40,7 +40,7 @@ return [NSString stringWithFormat:@"editor%@%@", first, rest]; } -static NSDictionary *MPEditorKeysToObserve() +NS_INLINE NSDictionary *MPEditorKeysToObserve() { static NSDictionary *keys = nil; static dispatch_once_t token; @@ -57,7 +57,7 @@ return keys; } -static NSSet *MPEditorPreferencesToObserve() +NS_INLINE NSSet *MPEditorPreferencesToObserve() { static NSSet *keys = nil; static dispatch_once_t token; @@ -73,7 +73,7 @@ return keys; } -static NSString *MPAutosavePropertyKey( +NS_INLINE NSString *MPAutosavePropertyKey( id object, NSString *propertyName) { NSString *className = NSStringFromClass([object class]); From 1739bfe2370a0325ac9e86f4ef90595879cc6015 Mon Sep 17 00:00:00 2001 From: Damien Angelos Date: Mon, 19 Jan 2015 22:09:31 -0500 Subject: [PATCH 011/439] Add line-numbers classname only when pref is enabled --- MacDown/Code/Document/MPRenderer.m | 12 ++++++++---- MacDown/Code/Extension/hoedown_html_patch.c | 7 ++++++- MacDown/Code/Extension/hoedown_html_patch.h | 6 ++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 310bf972..e0c8085c 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -249,9 +249,14 @@ @interface MPRenderer () htmlRenderer->blockcode = hoedown_patch_render_blockcode; htmlRenderer->listitem = hoedown_patch_render_listitem; + int blockCodeFlags = 0; + if ([renderer.delegate rendererHasLineNumbers:renderer]) + blockCodeFlags |= HOEDOWN_BLOCKCODE_LINE_NUMBERS; + hoedown_html_renderer_state_extra *extra = hoedown_malloc(sizeof(hoedown_html_renderer_state_extra)); extra->language_addition = language_addition; + extra->blockcode_flags = blockCodeFlags; extra->owner = (__bridge void *)renderer; ((hoedown_html_renderer_state *)htmlRenderer->opaque)->opaque = extra; @@ -412,7 +417,8 @@ - (void)parseIfPreferencesChanged if ([delegate rendererExtensions:self] != self.extensions || [delegate rendererHasSmartyPants:self] != self.smartypants || [delegate rendererRendersTOC:self] != self.TOC - || [delegate rendererDetectsFrontMatter:self] != self.frontMatter) + || [delegate rendererDetectsFrontMatter:self] != self.frontMatter + || [delegate rendererHasLineNumbers:self] != self.lineNumbers) [self parse]; } @@ -456,6 +462,7 @@ - (void)parse self.smartypants = smartypants; self.TOC = hasTOC; self.frontMatter = hasFrontMatter; + self.lineNumbers = [delegate rendererHasLineNumbers:self]; if (nextAction) nextAction(); @@ -473,8 +480,6 @@ - (void)renderIfPreferencesChanged else if (!MPAreNilableStringsEqual( [d rendererStyleName:self], self.styleName)) changed = YES; - else if ([d rendererHasLineNumbers:self] != self.lineNumbers) - changed = YES; if (changed) [self render]; @@ -493,7 +498,6 @@ - (void)render self.styleName = [delegate rendererStyleName:self]; self.syntaxHighlighting = [delegate rendererHasSyntaxHighlighting:self]; self.highlightingThemeName = [delegate rendererHighlightingThemeName:self]; - self.lineNumbers = [delegate rendererHasLineNumbers:self]; } - (NSString *)HTMLForExportWithStyles:(BOOL)withStyles diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c index 10e48c1e..b846c34e 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.c +++ b/MacDown/Code/Extension/hoedown_html_patch.c @@ -29,7 +29,12 @@ void hoedown_patch_render_blockcode( hoedown_buffer *mapped = NULL; if (extra->language_addition) mapped = extra->language_addition(lang, extra->owner); - HOEDOWN_BUFPUTSL(ob, "
blockcode_flags & HOEDOWN_BLOCKCODE_LINE_NUMBERS)
+            HOEDOWN_BUFPUTSL(ob, "
");
+        else
+            HOEDOWN_BUFPUTSL(ob, "
");
+        HOEDOWN_BUFPUTSL(ob, "data, mapped->size, 0);
diff --git a/MacDown/Code/Extension/hoedown_html_patch.h b/MacDown/Code/Extension/hoedown_html_patch.h
index 3582a6b6..c23a6e76 100644
--- a/MacDown/Code/Extension/hoedown_html_patch.h
+++ b/MacDown/Code/Extension/hoedown_html_patch.h
@@ -11,6 +11,11 @@
 
 static unsigned int HOEDOWN_HTML_USE_TASK_LIST = (1 << 4);
 
+typedef enum hoedown_blockcode_flags {
+    // show line numbers in code blocks
+    HOEDOWN_BLOCKCODE_LINE_NUMBERS = (1 << 0)
+} hoedown_blockcode_flags;
+
 typedef struct hoedown_buffer hoedown_buffer;
 
 typedef struct hoedown_html_renderer_state_extra {
@@ -18,6 +23,7 @@ typedef struct hoedown_html_renderer_state_extra {
     /* More extra callbacks */
     hoedown_buffer *(*language_addition)(const hoedown_buffer *language,
                                          void *owner);
+    hoedown_blockcode_flags blockcode_flags;
     void *owner;
 
 } hoedown_html_renderer_state_extra;

From d876c357c38e799f18e77f31d4a8d88549a0091e Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Wed, 21 Jan 2015 21:47:50 +0800
Subject: [PATCH 012/439] Styling

---
 MacDown/Code/Document/MPRenderer.m | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m
index e0c8085c..0dd9cc06 100644
--- a/MacDown/Code/Document/MPRenderer.m
+++ b/MacDown/Code/Document/MPRenderer.m
@@ -304,7 +304,8 @@ - (NSArray *)baseStylesheets
 - (NSArray *)prismStylesheets
 {
     NSString *name = [self.delegate rendererHighlightingThemeName:self];
-    MPAsset *stylesheet = [MPStyleSheet CSSWithURL:MPHighlightingThemeURLForName(name)];
+    MPAsset *stylesheet =
+        [MPStyleSheet CSSWithURL:MPHighlightingThemeURLForName(name)];
 
     NSMutableArray *stylesheets = [NSMutableArray arrayWithObject:stylesheet];
 
@@ -335,9 +336,9 @@ - (NSArray *)prismScripts
 
     if ([self.delegate rendererHasLineNumbers:self])
     {
-        NSURL *url = [bundle URLForResource:@"line-numbers/prism-line-numbers.min"
-                              withExtension:@"js"
-                               subdirectory:kMPPrismPluginDirectory];
+        NSURL *url =
+            [bundle URLForResource:@"line-numbers/prism-line-numbers.min"
+                     withExtension:@"js" subdirectory:kMPPrismPluginDirectory];
         [scripts addObject:[MPScript javaScriptWithURL:url]];
     }
     return scripts;

From 96002b4f6783bae1f54c213ea05eed974092f47d Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Wed, 21 Jan 2015 21:57:40 +0800
Subject: [PATCH 013/439] Merge line number into HTML renderer flags

---
 MacDown/Code/Document/MPDocument.m          |  7 ++----
 MacDown/Code/Document/MPRenderer.h          |  1 -
 MacDown/Code/Document/MPRenderer.m          | 13 +++-------
 MacDown/Code/Extension/hoedown_html_patch.c | 28 +++++++++++----------
 MacDown/Code/Extension/hoedown_html_patch.h |  7 +-----
 5 files changed, 21 insertions(+), 35 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index b6f16485..40b8a348 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -118,6 +118,8 @@ - (int)rendererFlags
     int flags = 0;
     if (self.htmlTaskList)
         flags |= HOEDOWN_HTML_USE_TASK_LIST;
+    if (self.htmlLineNumbers)
+        flags |= HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS;
     if (self.htmlHardWrap)
         flags |= HOEDOWN_HTML_HARD_WRAP;
     return flags;
@@ -817,11 +819,6 @@ - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer
     return self.preferences.htmlHighlightingThemeName;
 }
 
-- (BOOL)rendererHasLineNumbers:(MPRenderer *)renderer
-{
-    return self.preferences.htmlLineNumbers;
-}
-
 - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html
 {
     // Delayed copying for -copyHtml.
diff --git a/MacDown/Code/Document/MPRenderer.h b/MacDown/Code/Document/MPRenderer.h
index 9359621d..de8928a7 100644
--- a/MacDown/Code/Document/MPRenderer.h
+++ b/MacDown/Code/Document/MPRenderer.h
@@ -50,7 +50,6 @@
 - (BOOL)rendererHasSyntaxHighlighting:(MPRenderer *)renderer;
 - (BOOL)rendererHasMathJax:(MPRenderer *)renderer;
 - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer;
-- (BOOL)rendererHasLineNumbers:(MPRenderer *)renderer;
 - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html;
 
 @end
diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m
index 0dd9cc06..22d9fd1f 100644
--- a/MacDown/Code/Document/MPRenderer.m
+++ b/MacDown/Code/Document/MPRenderer.m
@@ -248,15 +248,10 @@ @interface MPRenderer ()
         flags, kMPRendererTOCLevel);
     htmlRenderer->blockcode = hoedown_patch_render_blockcode;
     htmlRenderer->listitem = hoedown_patch_render_listitem;
-
-    int blockCodeFlags = 0;
-    if ([renderer.delegate rendererHasLineNumbers:renderer])
-        blockCodeFlags |= HOEDOWN_BLOCKCODE_LINE_NUMBERS;
     
     hoedown_html_renderer_state_extra *extra =
         hoedown_malloc(sizeof(hoedown_html_renderer_state_extra));
     extra->language_addition = language_addition;
-    extra->blockcode_flags = blockCodeFlags;
     extra->owner = (__bridge void *)renderer;
 
     ((hoedown_html_renderer_state *)htmlRenderer->opaque)->opaque = extra;
@@ -309,7 +304,7 @@ - (NSArray *)prismStylesheets
 
     NSMutableArray *stylesheets = [NSMutableArray arrayWithObject:stylesheet];
 
-    if ([self.delegate rendererHasLineNumbers:self])
+    if (self.rendererFlags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS)
     {
         NSBundle *bundle = [NSBundle mainBundle];
         NSURL *url = [bundle URLForResource:@"line-numbers/prism-line-numbers"
@@ -334,7 +329,7 @@ - (NSArray *)prismScripts
             [scripts addObject:[MPScript javaScriptWithURL:url]];
     }
 
-    if ([self.delegate rendererHasLineNumbers:self])
+    if (self.rendererFlags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS)
     {
         NSURL *url =
             [bundle URLForResource:@"line-numbers/prism-line-numbers.min"
@@ -418,8 +413,7 @@ - (void)parseIfPreferencesChanged
     if ([delegate rendererExtensions:self] != self.extensions
             || [delegate rendererHasSmartyPants:self] != self.smartypants
             || [delegate rendererRendersTOC:self] != self.TOC
-            || [delegate rendererDetectsFrontMatter:self] != self.frontMatter
-            || [delegate rendererHasLineNumbers:self] != self.lineNumbers)
+            || [delegate rendererDetectsFrontMatter:self] != self.frontMatter)
         [self parse];
 }
 
@@ -463,7 +457,6 @@ - (void)parse
     self.smartypants = smartypants;
     self.TOC = hasTOC;
     self.frontMatter = hasFrontMatter;
-    self.lineNumbers = [delegate rendererHasLineNumbers:self];
 
     if (nextAction)
         nextAction();
diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c
index b846c34e..d91b1709 100644
--- a/MacDown/Code/Extension/hoedown_html_patch.c
+++ b/MacDown/Code/Extension/hoedown_html_patch.c
@@ -23,18 +23,19 @@ void hoedown_patch_render_blockcode(
 {
 	if (ob->size) hoedown_buffer_putc(ob, '\n');
 
-	if (lang) {
-        hoedown_html_renderer_state_extra *extra =
-            ((hoedown_html_renderer_state *)data->opaque)->opaque;
+	if (lang)
+    {
+        hoedown_html_renderer_state *state = data->opaque;
+        hoedown_html_renderer_state_extra *extra = state->opaque;
+
         hoedown_buffer *mapped = NULL;
         if (extra->language_addition)
             mapped = extra->language_addition(lang, extra->owner);
 
-        if (extra->blockcode_flags & HOEDOWN_BLOCKCODE_LINE_NUMBERS)
-            HOEDOWN_BUFPUTSL(ob, "
");
-        else
-            HOEDOWN_BUFPUTSL(ob, "
");
-        HOEDOWN_BUFPUTSL(ob, "flags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS)
+            HOEDOWN_BUFPUTSL(ob, " class=\"line-numbers\"");
+        HOEDOWN_BUFPUTSL(ob, ">data, mapped->size, 0);
@@ -45,18 +46,19 @@ void hoedown_patch_render_blockcode(
             hoedown_escape_html(ob, lang->data, lang->size, 0);
         }
 		HOEDOWN_BUFPUTSL(ob, "\">");
-	} else {
+	}
+    else
+    {
 		HOEDOWN_BUFPUTSL(ob, "
");
 	}
 
 	if (text)
     {
-        // to prevent prism from adding a blank line at the end of code blocks,
-        // remove any trailing newline character
+        // Remove last newline to prevent prism from adding a blank line at the
+        // end of code blocks.
         size_t size = text->size;
-        if (size && text->data[size - 1] == '\n') {
+        if (size > 0 && text->data[size - 1] == '\n')
             size--;
-        }
         hoedown_escape_html(ob, text->data, size, 0);
     }
 
diff --git a/MacDown/Code/Extension/hoedown_html_patch.h b/MacDown/Code/Extension/hoedown_html_patch.h
index c23a6e76..d2d7f5de 100644
--- a/MacDown/Code/Extension/hoedown_html_patch.h
+++ b/MacDown/Code/Extension/hoedown_html_patch.h
@@ -10,11 +10,7 @@
 #define MacDown_hoedown_html_patch_h
 
 static unsigned int HOEDOWN_HTML_USE_TASK_LIST = (1 << 4);
-
-typedef enum hoedown_blockcode_flags {
-    // show line numbers in code blocks
-    HOEDOWN_BLOCKCODE_LINE_NUMBERS = (1 << 0)
-} hoedown_blockcode_flags;
+static unsigned int HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS = (1 << 5);
 
 typedef struct hoedown_buffer hoedown_buffer;
 
@@ -23,7 +19,6 @@ typedef struct hoedown_html_renderer_state_extra {
     /* More extra callbacks */
     hoedown_buffer *(*language_addition)(const hoedown_buffer *language,
                                          void *owner);
-    hoedown_blockcode_flags blockcode_flags;
     void *owner;
 
 } hoedown_html_renderer_state_extra;

From fd5445f60677247990fe21257fa5d5a937258a19 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Wed, 21 Jan 2015 21:59:14 +0800
Subject: [PATCH 014/439] Add @bostaunieux as contributor

---
 MacDown/Localization/en.lproj/Credits.rtf | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf
index 9be4db81..dd381425 100644
--- a/MacDown/Localization/en.lproj/Credits.rtf
+++ b/MacDown/Localization/en.lproj/Credits.rtf
@@ -53,6 +53,8 @@ Open source Markdown editor for OS X.
 {\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\
 \pard\pardeftab720
 {\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\
+\pard\pardeftab720
+{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
 
 \fs28 \cf0 \
@@ -90,8 +92,9 @@ The above copyright notice and this permission notice shall be included in all c
 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.\
 \
 \
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720
 {\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt 
-\b\fs28 DTCoreText}}\
+\b\fs28 \cf0 DTCoreText}}\
 Copyright \'a9 2011, Oliver Drobnik All rights reserved.\
 \
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\

From 42c75a3f22c8ea371303125a3ebf041b4d39ce17 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sat, 24 Jan 2015 03:10:08 +0800
Subject: [PATCH 015/439] Open current document inside preview pane

Fix #245.
---
 MacDown/Code/Document/MPDocument.m | 46 ++++++++++++++++++++++++++----
 1 file changed, 40 insertions(+), 6 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index 40b8a348..d8fb2581 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -82,6 +82,20 @@
 }
 
 
+@implementation NSURL (Convert)
+
+- (NSString *)absoluteBaseURLString
+{
+    // Remove fragment (#anchor) and query string.
+    NSString *base = self.absoluteString;
+    base = [base componentsSeparatedByString:@"?"].firstObject;
+    base = [base componentsSeparatedByString:@"#"].firstObject;
+    return base;
+}
+
+@end
+
+
 @implementation MPPreferences (Hoedown)
 - (int)extensionFlags
 {
@@ -152,6 +166,7 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) {
 @property BOOL printing;
 @property BOOL shouldHandleBoundsChange;
 @property BOOL isPreviewReady;
+@property (strong) NSURL *currentBaseUrl;
 @property (nonatomic) BOOL rendersTOC;
 @property (readonly) BOOL previewVisible;
 @property (readonly) BOOL editorVisible;
@@ -726,13 +741,17 @@ - (void)webView:(WebView *)webView
     switch ([information[WebActionNavigationTypeKey] integerValue])
     {
         case WebNavigationTypeLinkClicked:
-            [listener ignore];
-            [[NSWorkspace sharedWorkspace] openURL:request.URL];
+            if (![self isCurrentBaseUrl:request.URL])
+            {
+                [listener ignore];
+                [[NSWorkspace sharedWorkspace] openURL:request.URL];
+                return;
+            }
             break;
         default:
-            [listener use];
             break;
     }
+    [listener use];
 }
 
 
@@ -830,11 +849,19 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html
         [pasteboard writeObjects:@[self.renderer.currentHtml]];
     }
     self.manualRender = self.preferences.markdownManualRender;
-    NSURL *baseUrl = self.fileURL;
-    if (!baseUrl)
-        baseUrl = self.preferences.htmlDefaultDirectoryUrl;
     if (!self.printing)
+    {
+        NSURL *baseUrl = self.fileURL;
+        if (!baseUrl)   // Unsaved doument; just use the window title.
+        {
+            NSString *filename = [NSString stringWithFormat:
+                                  @"%@%@", self.windowForSheet.title, @".md"];
+            baseUrl = self.preferences.htmlDefaultDirectoryUrl;
+            baseUrl = [NSURL URLWithString:filename relativeToURL:baseUrl];
+        }
         [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl];
+        self.currentBaseUrl = baseUrl;
+    }
 }
 
 
@@ -1416,6 +1443,13 @@ - (void)updateWordCount
         self.wordCountWidget.enabled = YES;
 }
 
+- (BOOL)isCurrentBaseUrl:(NSURL *)another
+{
+    NSString *mine = self.currentBaseUrl.absoluteBaseURLString;
+    NSString *theirs = another.absoluteBaseURLString;
+    return mine == theirs || [mine isEqualToString:theirs];
+}
+
 - (void)document:(NSDocument *)doc didPrint:(BOOL)ok context:(void *)context
 {
     if ([doc respondsToSelector:@selector(setPrinting:)])

From f6afd3ab5cdefcb0707f09a5e6918186367a35a6 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sat, 24 Jan 2015 03:13:12 +0800
Subject: [PATCH 016/439] Reorder logic to reduce dead code

---
 MacDown/Code/Document/MPDocument.m | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index d8fb2581..fd3dcf80 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -840,6 +840,9 @@ - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer
 
 - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html
 {
+    if (self.printing)
+        return;
+
     // Delayed copying for -copyHtml.
     if (self.copying)
     {
@@ -848,20 +851,18 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html
         [pasteboard clearContents];
         [pasteboard writeObjects:@[self.renderer.currentHtml]];
     }
-    self.manualRender = self.preferences.markdownManualRender;
-    if (!self.printing)
+
+    NSURL *baseUrl = self.fileURL;
+    if (!baseUrl)   // Unsaved doument; just use the window title.
     {
-        NSURL *baseUrl = self.fileURL;
-        if (!baseUrl)   // Unsaved doument; just use the window title.
-        {
-            NSString *filename = [NSString stringWithFormat:
-                                  @"%@%@", self.windowForSheet.title, @".md"];
-            baseUrl = self.preferences.htmlDefaultDirectoryUrl;
-            baseUrl = [NSURL URLWithString:filename relativeToURL:baseUrl];
-        }
-        [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl];
-        self.currentBaseUrl = baseUrl;
+        NSString *filename = [NSString stringWithFormat:
+                              @"%@%@", self.windowForSheet.title, @".md"];
+        baseUrl = self.preferences.htmlDefaultDirectoryUrl;
+        baseUrl = [NSURL URLWithString:filename relativeToURL:baseUrl];
     }
+    [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl];
+    self.manualRender = self.preferences.markdownManualRender;
+    self.currentBaseUrl = baseUrl;
 }
 
 

From 9dd59178c09aeda9a55e22f48480ab1c972d57f0 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sat, 24 Jan 2015 15:34:14 +0800
Subject: [PATCH 017/439] Revert to old baseURL replacement logic

---
 MacDown/Code/Document/MPDocument.m | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index fd3dcf80..f9791370 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -853,13 +853,8 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html
     }
 
     NSURL *baseUrl = self.fileURL;
-    if (!baseUrl)   // Unsaved doument; just use the window title.
-    {
-        NSString *filename = [NSString stringWithFormat:
-                              @"%@%@", self.windowForSheet.title, @".md"];
+    if (!baseUrl)   // Unsaved doument; just use the default URL.
         baseUrl = self.preferences.htmlDefaultDirectoryUrl;
-        baseUrl = [NSURL URLWithString:filename relativeToURL:baseUrl];
-    }
     [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl];
     self.manualRender = self.preferences.markdownManualRender;
     self.currentBaseUrl = baseUrl;

From eab27687e90dcbe0e7cb3aef6e3895b32e642713 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sat, 24 Jan 2015 16:04:52 +0800
Subject: [PATCH 018/439] Fix initial dir in save dialog for non-existed doc

---
 MacDown/Code/Document/MPDocument.m | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index f9791370..86620f77 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -481,6 +481,19 @@ - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel
         fileName = [fileName stringByAppendingPathExtension:@"md"];
         savePanel.nameFieldStringValue = fileName;
     }
+    if (self.fileURL && self.fileURL.isFileURL)
+    {
+        NSString *path = self.fileURL.path;
+
+        // Use path of parent directory if this is a file. Otherwise this is it.
+        BOOL isDir = NO;
+        BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path
+                                                           isDirectory:&isDir];
+        if (!exists || !isDir)
+            path = [path stringByDeletingLastPathComponent];
+
+        savePanel.directoryURL = [NSURL fileURLWithPath:path];
+    }
     savePanel.allowedFileTypes = nil;   // Allow all extensions.
     return [super prepareSavePanel:savePanel];
 }

From df0741d276da3138e55f06d0085ef25cbe40a150 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 25 Jan 2015 01:05:18 +0800
Subject: [PATCH 019/439] Auto-create target file if not existed

---
 MacDown.xcodeproj/project.pbxproj             |  6 +++++
 MacDown/Code/Application/MPMainController.m   |  5 ++--
 MacDown/Code/Document/MPDocument.m            | 22 +++++++++++++++-
 .../Extension/NSDocumentController+Document.h | 16 ++++++++++++
 .../Extension/NSDocumentController+Document.m | 25 +++++++++++++++++++
 5 files changed, 70 insertions(+), 4 deletions(-)
 create mode 100644 MacDown/Code/Extension/NSDocumentController+Document.h
 create mode 100644 MacDown/Code/Extension/NSDocumentController+Document.m

diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj
index aee25970..9d91a845 100644
--- a/MacDown.xcodeproj/project.pbxproj
+++ b/MacDown.xcodeproj/project.pbxproj
@@ -29,6 +29,7 @@
 		1F0F3BFC195F75F200FC0B3B /* MathJax in Resources */ = {isa = PBXBuildFile; fileRef = 1F0F3BFB195F75F200FC0B3B /* MathJax */; };
 		1F23A92119928E650052DB78 /* MPMathJaxListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F23A92019928E650052DB78 /* MPMathJaxListener.m */; };
 		1F25E1C31A50F4F10029371D /* MPColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F25E1C21A50F4F10029371D /* MPColorTests.m */; };
+		1F2649B01A7406DB00EF6AF3 /* NSDocumentController+Document.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */; };
 		1F27896B1973BEB100EE696A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F2789691973BEB100EE696A /* Localizable.strings */; };
 		1F2A17281A1BB3E30055A107 /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */; };
 		1F3386E61A6B999600FC88C4 /* DOMNode+Text.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */; };
@@ -169,6 +170,8 @@
 		1F23A91F19928E650052DB78 /* MPMathJaxListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMathJaxListener.h; sourceTree = ""; };
 		1F23A92019928E650052DB78 /* MPMathJaxListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMathJaxListener.m; sourceTree = ""; };
 		1F25E1C21A50F4F10029371D /* MPColorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPColorTests.m; sourceTree = ""; };
+		1F2649AE1A7406DB00EF6AF3 /* NSDocumentController+Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDocumentController+Document.h"; sourceTree = ""; };
+		1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDocumentController+Document.m"; sourceTree = ""; };
 		1F27896A1973BEB100EE696A /* Base */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Base; path = Localization/Base.lproj/Localizable.strings; sourceTree = ""; };
 		1F2A17261A1BB3E30055A107 /* NSUserDefaults+Suite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+Suite.h"; path = "macdown-cmd/NSUserDefaults+Suite.h"; sourceTree = SOURCE_ROOT; };
 		1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+Suite.m"; path = "macdown-cmd/NSUserDefaults+Suite.m"; sourceTree = SOURCE_ROOT; };
@@ -295,6 +298,8 @@
 				1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */,
 				1F33F2A21A3B56D20001C849 /* NSColor+HTML.h */,
 				1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */,
+				1F2649AE1A7406DB00EF6AF3 /* NSDocumentController+Document.h */,
+				1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */,
 				1FFEB3231972D88900B2254F /* NSObject+HTMLTabularize.h */,
 				1FFEB3241972D88900B2254F /* NSObject+HTMLTabularize.m */,
 				1F0D9D5E194AC7CF008E1856 /* NSString+Lookup.h */,
@@ -893,6 +898,7 @@
 				1F8A835E1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m in Sources */,
 				1F33F2A11A3B4B660001C849 /* MPDocumentSplitView.m in Sources */,
 				1F23A92119928E650052DB78 /* MPMathJaxListener.m in Sources */,
+				1F2649B01A7406DB00EF6AF3 /* NSDocumentController+Document.m in Sources */,
 				1F0D9D67194AC7CF008E1856 /* MPUtilities.m in Sources */,
 				1F0D9D78194AC7F7008E1856 /* MPHtmlPreferencesViewController.m in Sources */,
 				1F0D9D7C194AC7F7008E1856 /* MPPreferences.m in Sources */,
diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m
index e712500b..c2f8daa9 100644
--- a/MacDown/Code/Application/MPMainController.m
+++ b/MacDown/Code/Application/MPMainController.m
@@ -10,6 +10,7 @@
 #import 
 #import 
 #import "MPUtilities.h"
+#import "NSDocumentController+Document.h"
 #import "MPPreferences.h"
 #import "MPGeneralPreferencesViewController.h"
 #import "MPMarkdownPreferencesViewController.h"
@@ -170,9 +171,7 @@ - (void)openPendingFiles
         }
         else
         {
-            NSDocument *doc = [c openUntitledDocumentAndDisplay:YES error:NULL];
-            doc.draft = YES;
-            doc.fileURL = url;
+            [c openUntitledDocumentForURL:url display:YES error:NULL];
         }
     }
     self.prefereces.filesToOpenOnNextLaunch = nil;
diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index 86620f77..242a606f 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -15,6 +15,7 @@
 #import "MPUtilities.h"
 #import "MPAutosaving.h"
 #import "NSColor+HTML.h"
+#import "NSDocumentController+Document.h"
 #import "NSString+Lookup.h"
 #import "NSTextView+Autocomplete.h"
 #import "DOMNode+Text.h"
@@ -757,7 +758,7 @@ - (void)webView:(WebView *)webView
             if (![self isCurrentBaseUrl:request.URL])
             {
                 [listener ignore];
-                [[NSWorkspace sharedWorkspace] openURL:request.URL];
+                [self openOrCreateFileForUrl:request.URL];
                 return;
             }
             break;
@@ -1459,6 +1460,25 @@ - (BOOL)isCurrentBaseUrl:(NSURL *)another
     return mine == theirs || [mine isEqualToString:theirs];
 }
 
+- (void)openOrCreateFileForUrl:(NSURL *)url
+{
+    // TODO: Make this togglable in preferences.
+    // If this is a file URL and the target does not exist, create and open it.
+    if (url.isFileURL
+        && ![[NSFileManager defaultManager] fileExistsAtPath:url.path])
+    {
+        NSDocumentController *controller =
+            [NSDocumentController sharedDocumentController];
+        [controller openUntitledDocumentForURL:url display:YES error:NULL];
+        return;
+    }
+
+    // Try to open it.
+    if ([[NSWorkspace sharedWorkspace] openURL:url])
+        return;
+}
+
+
 - (void)document:(NSDocument *)doc didPrint:(BOOL)ok context:(void *)context
 {
     if ([doc respondsToSelector:@selector(setPrinting:)])
diff --git a/MacDown/Code/Extension/NSDocumentController+Document.h b/MacDown/Code/Extension/NSDocumentController+Document.h
new file mode 100644
index 00000000..f0ed7ce5
--- /dev/null
+++ b/MacDown/Code/Extension/NSDocumentController+Document.h
@@ -0,0 +1,16 @@
+//
+//  NSDocumentController+Document.h
+//  MacDown
+//
+//  Created by Tzu-ping Chung on 25/1.
+//  Copyright (c) 2015 Tzu-ping Chung . All rights reserved.
+//
+
+#import 
+
+@interface NSDocumentController (Document)
+
+- (id)openUntitledDocumentForURL:(NSURL *)url display:(BOOL)display
+                           error:(NSError * __autoreleasing *)error;
+
+@end
diff --git a/MacDown/Code/Extension/NSDocumentController+Document.m b/MacDown/Code/Extension/NSDocumentController+Document.m
new file mode 100644
index 00000000..266c8227
--- /dev/null
+++ b/MacDown/Code/Extension/NSDocumentController+Document.m
@@ -0,0 +1,25 @@
+//
+//  NSDocumentController+Document.m
+//  MacDown
+//
+//  Created by Tzu-ping Chung on 25/1.
+//  Copyright (c) 2015 Tzu-ping Chung . All rights reserved.
+//
+
+#import "NSDocumentController+Document.h"
+
+@implementation NSDocumentController (Document)
+
+- (id)openUntitledDocumentForURL:(NSURL *)url display:(BOOL)display
+                           error:(NSError * __autoreleasing *)error
+{
+    NSDocument *doc = [self openUntitledDocumentAndDisplay:display error:error];
+    if (!doc)
+        return doc;
+
+    doc.draft = YES;
+    doc.fileURL = url;
+    return doc;
+}
+
+@end

From 3ef02ecd2bc4a07574f674c54aace3362915f907 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 25 Jan 2015 01:26:32 +0800
Subject: [PATCH 020/439] Add pref toggle for auto file creation

---
 MacDown/Code/Document/MPDocument.m            |  2 +-
 MacDown/Code/Preferences/MPPreferences.h      |  1 +
 MacDown/Code/Preferences/MPPreferences.m      |  1 +
 .../MPGeneralPreferencesViewController.xib    | 32 +++++++++++++------
 4 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index 242a606f..ff988464 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -1464,7 +1464,7 @@ - (void)openOrCreateFileForUrl:(NSURL *)url
 {
     // TODO: Make this togglable in preferences.
     // If this is a file URL and the target does not exist, create and open it.
-    if (url.isFileURL
+    if (self.preferences.createFileForLinkTarget && url.isFileURL
         && ![[NSFileManager defaultManager] fileExistsAtPath:url.path])
     {
         NSDocumentController *controller =
diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h
index b4ed1e89..1f085e8f 100644
--- a/MacDown/Code/Preferences/MPPreferences.h
+++ b/MacDown/Code/Preferences/MPPreferences.h
@@ -18,6 +18,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification;
 @property (assign) BOOL updateIncludesPreReleases;
 @property (assign) NSArray *filesToOpenOnNextLaunch;
 @property (assign) BOOL supressesUntitledDocumentOnLaunch;
+@property (assign) BOOL createFileForLinkTarget;
 
 // Extension flags.
 @property (assign) BOOL extensionIntraEmphasis;
diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m
index f9609c6c..e89a26d2 100644
--- a/MacDown/Code/Preferences/MPPreferences.m
+++ b/MacDown/Code/Preferences/MPPreferences.m
@@ -64,6 +64,7 @@ - (instancetype)init
 @dynamic updateIncludesPreReleases;
 @dynamic filesToOpenOnNextLaunch;
 @dynamic supressesUntitledDocumentOnLaunch;
+@dynamic createFileForLinkTarget;
 
 @dynamic extensionIntraEmphasis;
 @dynamic extensionTables;
diff --git a/MacDown/Localization/Base.lproj/MPGeneralPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPGeneralPreferencesViewController.xib
index bc0bb5a7..d798044d 100644
--- a/MacDown/Localization/Base.lproj/MPGeneralPreferencesViewController.xib
+++ b/MacDown/Localization/Base.lproj/MPGeneralPreferencesViewController.xib
@@ -14,7 +14,7 @@
         
         
         
-            
+            
             
             
                 
@@ -48,13 +48,13 @@
                     
                 
                 
-                    
+                    
                     
-                        
+                        
                         
                         
                             
                             
                             
                             
                             
+                            
                         
                     
                     
                         
-                        
+                        
                         
                         
                         
+                        
                         
                         
                         
+                        
                         
                         
                         
@@ -166,7 +178,7 @@
                 
                 
             
-            
+            
         
         
     

From d5442df699e30419faeaa559de14414d5c17b797 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 25 Jan 2015 01:45:27 +0800
Subject: [PATCH 021/439] Shut Xcode up when cleaning non-existed version.h

---
 Dependency/version/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dependency/version/Makefile b/Dependency/version/Makefile
index 8c8cbd3c..b076ec8e 100644
--- a/Dependency/version/Makefile
+++ b/Dependency/version/Makefile
@@ -6,6 +6,6 @@ version.h:
 .PHONY: ALL clean distclean
 
 clean:
-	rm version.h
+	-rm version.h 2>/dev/null
 
 distclean: clean

From ec181dc6043133892b68b249ffd0d26070fd94ea Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Tue, 27 Jan 2015 00:29:26 +0800
Subject: [PATCH 022/439] Minor refactoring

---
 MacDown/Code/Document/MPDocument.m | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index ff988464..1f97b0aa 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -30,6 +30,7 @@
 
 
 static NSString * const kMPRendersTOCPropertyKey = @"Renders TOC";
+static NSString * const kMPDefaultAutosaveName = @"Untitled";
 
 
 NS_INLINE NSString *MPEditorPreferenceKeyWithValueKey(NSString *key)
@@ -82,6 +83,14 @@
                                                    object.autosaveName];
 }
 
+NS_INLINE NSString *MPRectStringForAutosaveName(NSString *name)
+{
+    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+    NSString *key = [NSString stringWithFormat:@"NSWindow Frame %@", name];
+    NSString *rectString = [defaults objectForKey:key];
+    return rectString;
+}
+
 
 @implementation NSURL (Convert)
 
@@ -303,7 +312,7 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 
     // All files use their absolute path to keep their window states.
-    NSString *autosaveName = @"Untitled";
+    NSString *autosaveName = kMPDefaultAutosaveName;
     if (self.fileURL)
         autosaveName = self.fileURL.absoluteString;
     controller.window.frameAutosaveName = autosaveName;
@@ -311,10 +320,9 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller
 
     // Perform initial resizing manually because for some reason untitled
     // documents do not pick up the autosaved frame automatically in 10.10.
-    NSString *key =
-        [NSString stringWithFormat:@"NSWindow Frame %@", autosaveName];
-    NSString *rectString = [defaults objectForKey:key];
-    [controller.window setFrameFromString:rectString];
+    NSString *rectString = MPRectStringForAutosaveName(autosaveName);
+    if (rectString)
+        [controller.window setFrameFromString:rectString];
 
     self.highlighter =
         [[HGMarkdownHighlighter alloc] initWithTextView:self.editor

From 92496fa2c16f23b026f9ca32df33b075c0f8549e Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Tue, 27 Jan 2015 01:01:23 +0800
Subject: [PATCH 023/439] Default doc's window size follows untitled docs'

Fix #230
---
 MacDown/Code/Document/MPDocument.m | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index 1f97b0aa..6eeb9bba 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -321,6 +321,8 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller
     // Perform initial resizing manually because for some reason untitled
     // documents do not pick up the autosaved frame automatically in 10.10.
     NSString *rectString = MPRectStringForAutosaveName(autosaveName);
+    if (!rectString)
+        rectString = MPRectStringForAutosaveName(kMPDefaultAutosaveName);
     if (rectString)
         [controller.window setFrameFromString:rectString];
 

From 6eaf0684bffacac700b614f290c79828cda996c5 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Thu, 29 Jan 2015 20:18:05 +0800
Subject: [PATCH 024/439] Do not set wantsLayer on the webview

This effectively reverts 906cd7f, which unfortunately causes #253.

Fix #253.
---
 MacDown/Localization/Base.lproj/MPDocument.xib | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib
index 00a8ffdd..8d90316c 100644
--- a/MacDown/Localization/Base.lproj/MPDocument.xib
+++ b/MacDown/Localization/Base.lproj/MPDocument.xib
@@ -1,5 +1,5 @@
 
-
+
     
         
         
@@ -26,14 +26,14 @@
             
             
             
-            
+            
                 
                 
                 
                     
                         
                         
-                            
+                            
                                 
                                 
                                 

From f9a31ac3752344123dac0772b313cbd56c9fc40c Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sat, 31 Jan 2015 14:55:29 +0800
Subject: [PATCH 025/439] Cleanup and fix problems in help.md

Fix #258
---
 MacDown/Resources/help.md | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md
index ad949c9b..dd5a58b1 100644
--- a/MacDown/Resources/help.md
+++ b/MacDown/Resources/help.md
@@ -87,28 +87,28 @@ Option name           | Markup           | Result if enabled     |
 Intra-word emphasis | This\*is\*good   | Thisisgood   |
 Strikethrough       | \~~Much wow\~~   | Much wow   |
 Underline [^1]      | \_So doge\_      | So doge        |
-Quote [^2] [^3]     | \"Such editor\"  | Such editor    |
+Quote [^2]          | \"Such editor\"  | Such editor    |
 Highlight           | \==So good\==    | So good  |
 Superscript         | hoge\^(fuga)     | hogefuga   |
 Autolink            | http://t.co      | http://t.co |
-Footnotes           | [\^4] and [\^4]: | 4 and footnote 4 below |
+Footnotes           | [\^3] and [\^3]: | [^3] and footnote 3 below |
 
 [^1]: If **Underline** is disabled. _this_ will be the same as *this*.
-[^2]: Note that this is different from *blockquote* (a `> `-prefixed block), which is part of the standard Markdown syntax specification.
-[^3]: **Quote** and **Smartypants** are syntactically incompatible with each other. The former will take precedence.
-[^4]: This is a footnote.
+[^2]: Note that this is different from *blockquote* (a `> `-prefixed block), which is part of the standard Markdown syntax specification. This will break if you enable **Smartypants** (see below).
+[^3]: This is a footnote.
 
 
 ### Document Formatting
 
-The ***Smartypants*** extension automatically transforms straight quotes (`"` and `'`) in your text into typographer’s quotes (`“`, `”`, `‘`, and `’`) according to the context.[^3] Very useful if you’re a typography freak like I am.
+The ***Smartypants*** extension automatically transforms straight quotes (`"` and `'`) in your text into typographer’s quotes (`“`, `”`, `‘`, and `’`) according to the context.[^4] Very useful if you’re a typography freak like I am.
 
+[^4]: This is syntactically incompatible, and will break the **Quote** Markdown extension.
 
 ### HTML Rendering
 
 You have already seen how I can highlight your fenced code blocks. See the [Fenced Code Block](#fenced-code-block) section if you haven’t!
 
-I can also render TeX-like math syntaxes, if you allow me to.[^7] I can do inline math like this: \\( 1 + 1 \\) or this (in MathML): 1+1, and block math:[^5]
+I can also render TeX-like math syntaxes, if you allow me to.[^5] I can do inline math like this: \\( 1 + 1 \\) or this (in MathML): 1+1, and block math:
 
 \\[
     A^T_S = B
@@ -123,7 +123,7 @@ or (in MathML)
 
 
 
-[^7]: Internet connection required.
+[^5]: Internet connection required.
 
 
 ## Editor Options

From 23175a1e086a708e6febfa03d1fcbd2fbed31e1c Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 1 Feb 2015 01:25:07 +0800
Subject: [PATCH 026/439] Add toggle to disable line prefix completion

Fix #252
---
 MacDown/Code/Document/MPDocument.m            |  6 +-
 MacDown/Code/Preferences/MPPreferences.h      |  1 +
 MacDown/Code/Preferences/MPPreferences.m      |  3 +
 .../MPEditorPreferencesViewController.xib     | 68 +++++++++++--------
 4 files changed, 49 insertions(+), 29 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index 6eeb9bba..fd02001a 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -652,10 +652,12 @@ - (BOOL)textViewShouldInsertNewline:(NSTextView *)textView
 {
     if ([textView insertMappedContent])
         return NO;
-    if ([textView completeNextListItem:
+
+    BOOL inserts = self.preferences.editorInsertPrefixInBlock;
+    if (inserts && [textView completeNextListItem:
             self.preferences.editorAutoIncrementNumberedLists])
         return NO;
-    if ([textView completeNextBlockquoteLine])
+    if (inserts && [textView completeNextBlockquoteLine])
         return NO;
     if ([textView completeNextIndentedLine])
         return NO;
diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h
index 1f085e8f..0751ab37 100644
--- a/MacDown/Code/Preferences/MPPreferences.h
+++ b/MacDown/Code/Preferences/MPPreferences.h
@@ -38,6 +38,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification;
 @property (assign) NSDictionary *editorBaseFontInfo;
 @property (assign) BOOL editorAutoIncrementNumberedLists;
 @property (assign) BOOL editorConvertTabs;
+@property (assign) BOOL editorInsertPrefixInBlock;
 @property (assign) BOOL editorCompleteMatchingCharacters;
 @property (assign) BOOL editorSyncScrolling;
 @property (assign) BOOL editorSmartHome;
diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m
index e89a26d2..37d70929 100644
--- a/MacDown/Code/Preferences/MPPreferences.m
+++ b/MacDown/Code/Preferences/MPPreferences.m
@@ -82,6 +82,7 @@ - (instancetype)init
 
 @dynamic editorAutoIncrementNumberedLists;
 @dynamic editorConvertTabs;
+@dynamic editorInsertPrefixInBlock;
 @dynamic editorCompleteMatchingCharacters;
 @dynamic editorSyncScrolling;
 @dynamic editorSmartHome;
@@ -184,6 +185,8 @@ - (void)loadDefaultUserDefaults
         self.editorMaximumWidth = 1000.0;
     if (![defaults objectForKey:@"editorAutoIncrementNumberedLists"])
         self.editorAutoIncrementNumberedLists = YES;
+    if (![defaults objectForKey:@"editorInsertPrefixInBlock"])
+        self.editorInsertPrefixInBlock = YES;
 }
 
 @end
diff --git a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib
index 682058e5..b49048a0 100644
--- a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib
+++ b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib
@@ -1,8 +1,8 @@
 
-
+
     
         
-        
+        
     
     
         
@@ -16,11 +16,11 @@
         
         
         
-            
+            
             
             
                 
-                    
+                    
                     
                         
                         
@@ -28,7 +28,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                         
@@ -36,7 +36,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                         
@@ -44,7 +44,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                         
@@ -52,7 +52,7 @@
                     
                 
                 
                 
-                    
+                    
                     
                         
                         
@@ -79,7 +79,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                         
@@ -92,7 +92,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                         
@@ -100,7 +100,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                             
@@ -121,7 +121,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                             
@@ -142,21 +142,21 @@
                     
                 
                 
-                    
+                    
                     
                     
                         
                     
                 
                 
-                    
+                    
                     
                     
                         
                     
                 
                 
-                    
+                    
                     
                         
                         
@@ -164,7 +164,7 @@
                     
                 
                 
-                    
+                    
                     
                         
                             
@@ -179,14 +179,14 @@
                     
                 
                 
-                    
+                    
                     
                     
                         
                     
                 
                 
                 
-                    
+                    
                     
                         
                             
@@ -212,7 +212,7 @@
                     
                 
                 
-                    
+                    
                     
                     
                         
@@ -220,13 +220,13 @@
                     
                 
                 
-                    
+                    
                     
-                        
+                        
                         
                         
                             
                             
+                            
                         
                     
                     
@@ -297,12 +308,15 @@
                         
                         
                         
+                        
+                        
                         
-                        
+                        
                         
                         
                         
                         
+                        
                         
                         
                         
@@ -367,7 +381,7 @@
                 
                 
             
-            
+            
         
         
     

From 0adf30275a38d359245eb4848384a5e5c24fb8cc Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Mon, 2 Feb 2015 21:31:59 +0800
Subject: [PATCH 027/439] Set editor content *after* init-ing

This makes sure that editor setup is correct when needed. Fix #180.
---
 MacDown/Code/Document/MPDocument.m | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index fd02001a..c17c1a27 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -362,14 +362,6 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller
     [center addObserver:self selector:@selector(didRequestPreviewReload:)
                    name:MPDidRequestPreviewRenderNotification object:nil];
 
-    if (self.loadedString)
-    {
-        self.editor.string = self.loadedString;
-        self.loadedString = nil;
-        [self.renderer parseAndRenderNow];
-        [self.highlighter parseAndHighlightNow];
-    }
-
     self.wordsMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL
                                              keyEquivalent:@""];
     self.charMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL
@@ -394,6 +386,14 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller
     [[NSOperationQueue mainQueue] addOperationWithBlock:^{
         [self setupEditor:nil];
         [self redrawDivider];
+
+        if (self.loadedString)
+        {
+            self.editor.string = self.loadedString;
+            self.loadedString = nil;
+            [self.renderer parseAndRenderNow];
+            [self.highlighter parseAndHighlightNow];
+        }
     }];
 }
 

From babd46dd8319b87d9980029ecb9b6951d45a2a3a Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Wed, 4 Feb 2015 21:31:40 +0800
Subject: [PATCH 028/439] Refactor LF-lookups with built-in methods

---
 MacDown/Code/Extension/NSString+Lookup.m | 27 ++++++++++++------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/MacDown/Code/Extension/NSString+Lookup.m b/MacDown/Code/Extension/NSString+Lookup.m
index b7ac66be..b9be9ea5 100644
--- a/MacDown/Code/Extension/NSString+Lookup.m
+++ b/MacDown/Code/Extension/NSString+Lookup.m
@@ -15,24 +15,23 @@ @implementation NSString (Lookup)
 
 - (NSInteger)locationOfFirstNewlineBefore:(NSUInteger)location
 {
-    NSUInteger length = self.length;
-    if (location > length)
-        location = length;
-    NSInteger p = location - 1;
-    while (p >= 0 && !MPCharacterIsNewline([self characterAtIndex:p]))
-        p--;
-    return p;
+    if (location > self.length)
+        location = self.length;
+    NSUInteger start;
+    [self getLineStart:&start end:NULL contentsEnd:NULL
+              forRange:NSMakeRange(location, 0)];
+    return start - 1;
 }
 
 - (NSUInteger)locationOfFirstNewlineAfter:(NSUInteger)location
 {
-    NSUInteger length = self.length;
-    if (location >= length)
-        return length;
-    NSInteger p = location + 1;
-    while (p < length && !MPCharacterIsNewline([self characterAtIndex:p]))
-        p++;
-    return p;
+    location++;
+    if (location > self.length)
+        location = self.length;
+    NSUInteger end;
+    [self getLineStart:NULL end:NULL contentsEnd:&end
+              forRange:NSMakeRange(location, 0)];
+    return end;
 }
 
 - (NSUInteger)locationOfFirstNonWhitespaceCharacterInLineBefore:(NSUInteger)loc

From ee5751e8a18743d00c296ef6752e2d57d1bcc230 Mon Sep 17 00:00:00 2001
From: zitian 
Date: Fri, 6 Feb 2015 14:53:41 +0800
Subject: [PATCH 029/439] prevent space in path

---
 Tools/generate_version_header.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Tools/generate_version_header.sh b/Tools/generate_version_header.sh
index 2e33afe8..5d8e6677 100644
--- a/Tools/generate_version_header.sh
+++ b/Tools/generate_version_header.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 pushd `dirname $0` > /dev/null
-source $(pwd -P)/utils.sh
+source "$(pwd -P)"/utils.sh
 popd > /dev/null
 
 SHORT_VERSION=$(get_short_version)

From faca00c1071ef3d28258b89dc4af282a74328f64 Mon Sep 17 00:00:00 2001
From: Cedar McKay 
Date: Fri, 6 Feb 2015 01:23:07 -0800
Subject: [PATCH 030/439] Updated and expanded the help.md file.

---
 MacDown/Resources/help.md | 271 ++++++++++++++++++++++++++++++++------
 1 file changed, 234 insertions(+), 37 deletions(-)

diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md
index dd5a58b1..b13d8bad 100644
--- a/MacDown/Resources/help.md
+++ b/MacDown/Resources/help.md
@@ -7,25 +7,188 @@ Hello there! I’m **MacDown**, the open source Markdown editor for OS X.
 Let me introduce myself.
 
 
-## Markdown and I
 
-**Markdown** is a plain text formatting syntax created by John Gruber, aiming to provide a easy-to-read and feasible markup.
+## Markdown and I
 
-The original Markdown syntax specification can be found [here](http://daringfireball.net/projects/markdown/syntax).
+**Markdown** is a plain text formatting syntax created by John Gruber, aiming to provide a easy-to-read and feasible markup. The original Markdown syntax specification can be found [here](http://daringfireball.net/projects/markdown/syntax).
 
 **MacDown** is created as a simple-to-use editor for Markdown documents. I render your Markdown contents real-time into HTML, and display them in a preview panel.
 
-I support all the original Markdown syntaxes. Various non-standard ones can also be turned on/off from the **Markdown** preference pane:
+![Macdown Screenshot](http://goo.gl/nbaXDi)
 
-![Markdown preferences pane](http://d.pr/i/RQEi+)
+I support all the original Markdown syntaxes. But I can do so much more! Various popular but non-standard syntaxes can be turned on/off from the [**Markdown** preference pane](#markdown pane).
 
-You can also specify extra HTML rendering options through the **Rendering** pane:
+You can specify extra HTML rendering options through the [**Rendering** preference pane](#rendering pane).
 
-![Rendering preferences pane](http://d.pr/i/rT4d+)
+You can customize the editor window to you liking in the [**Editor** preferences pane](#editor pane):
 
-And you can also configure various behaviors in the **General** preferences pane.
+You can configure various application (that's me!) behaviors in the [**General** preference pane](#general pane).
+
+
+
+
+## The Basics
+Before I tell you about all the extra syntaxes and capabilities I have, I'll introduce you to the basics of standard markdown. If you already know markdown, and want to jump straight to learning about the fancier things I can do, I suggest you skip to the [**Markdown** preference pane](#markdown pane). Lets jump right in.  
+
+### Line Breaks
+To force a line break, put two spaces and a newline (return) at the end of the line.
+
+
+	These lines
+	won't break
+
+	These lines  
+	will break
+
+
+### Strong and Emphasize
+
+**Strong**: `**Strong**` or `__Strong__` (Command-B)  
+*Emphasize*: `*Emphasize*` or `_Emphasize_`[^emphasize] (Command-I)
+
+### Headers (like this one!)
+
+
+	Header 1
+	========
+
+	Header 2
+	--------
+
+or
+
+
+	# Header 1
+	## Header 2
+	### Header 3
+	#### Header 4
+	##### Header 5
+	###### Header 6
+
+
+
+### Links and Email
+#### Inline
+Just put angle brackets around an email and it becomes clickable:   
+``  
+
+Same thing with urls:   
+` `  
+
+Perhaps you want to some link text like this: [Macdown Website](http://macdown.uranusjr.com "Title")  
+`[Macdown Website](http://macdown.uranusjr.com "Title")` (The title is optional)  
+
+
+#### Reference style
+Sometimes it looks too messy to include big long urls inline, or you want to keep all your urls together.  
+
+Make [a link][arbitrary_id] `[a link][arbitrary_id]` then on it's own line anywhere else in the file:  
+`[arbitrary_id]: http://macdown.uranusjr.com "Title"`
+  
+If the link text itself would make a good id, you can link [like this][] `[like this][]`, then on it's own line anywhere else in the file:  
+`[like this]: http://macdown.uranusjr.com`  
+
+[arbitrary_id]: http://macdown.uranusjr.com "Title"
+[like this]: http://macdown.uranusjr.com  
+
+
+### Images
+#### Inline
+`![Alt Image Text](path/or/url/to.jpg "Optional Title")`
+#### Reference style
+`![Alt Image Text][image id]`  
+on it's own line elsewhere:  
+`[image id]: path/or/url/to.jpg "Optional Title"`
+
+
+### Lists
+
+* Unordered lists start each item with a `*`
+- `-` work too
+	* Indent a level to make a nested list
+		1. Ordered lists are supported.
+		2. Start each item (number-period-space) like `1. `
+		42. It doesn't matter what number you use, I will render them sequentially
+		1. So you might want to start each line with `1.` and let me sort it out
+
+Here is the code:
+
+```
+* Unordered lists start each item with a `*`
+- `-` work too
+	* Indent a level to make a nested list
+		1. Ordered lists are supported.
+		2. Start each item (number-period-space) like `1. `
+		42. It doesn't matter what number you use, I will render them sequentially
+		1. So you might want to start each line with `1.` and let me sort it out
+```
+
+
+
+### Block Quote
+
+> Angle brackets `>` are used for block quotes.  
+Technically not every line needs to start with a `>` as long as  
+there are no empty lines between paragraphs.  
+>Looks kinda ugly though.
+> > Block quotes can be nested.  
+> > > Multiple Levels
+
+> Most markdown syntax keeps working even inside block quotes.
+> * Lists
+> * [Links][arbitrary_id]
+> * Etc.
+
+Here is the code:
+
+```
+> Angle brackets `>` are used for block quotes.  
+Technically not every line needs to start with a `>` as long as  
+there are no empty lines between paragraphs.  
+>Looks kinda ugly though.
+> > Block quotes can be nested.  
+> > > Multiple Levels
+
+> Most markdown syntax keeps working even inside block quotes.
+> * Lists
+> * [Links][id]
+> * Etc.
+```
+  
+  
+### Inline Code
+`Inline code` is indicated by surrounding it with backticks:  
+`` `Inline code` ``
+
+If your ``code has `backticks` `` that need to be displayed you can use double backticks:  
+```` ``Code with `backticks` `` ````  (mind the space preceding the final set of backticks)
+
+
+### Block Code
+If you indent at least four spaces or one tab, I'll display a code block.
+
+	print('This is a code block')
+	print('The block must be preceded by a blank line')
+	print('Then indent at least 4 spaces or 1 tab')
+		print('Nesting does nothing. Your code is displayed Literally')
+
+I also know how to do something called [Fenced Code Blocks](#fenced-code-block) which I will tell you about later.
+
+### Horizontal Rules
+If you type three asterisks `***` or three dashes `---` on a line, I'll display a horizontal rule:
+***
+
+
+
+
+
+## The Markdown Preference Pane 
+This is where I keep all preferences related to how I parse markdown into html.  
+![Markdown preferences pane](http://d.pr/i/RQEi+)
+
+### Document Formatting
+The ***Smartypants*** extension automatically transforms straight quotes (`"` and `'`) in your text into typographer’s quotes (`“`, `”`, `‘`, and `’`) according to the context. Very useful if you’re a typography freak like I am. Quote and Smartypants are syntactically incompatible. If both are enabled, Quote takes precedence.
 
-![General preferences pane](http://d.pr/i/rvwu+)
 
 ### Block Formatting
 
@@ -53,7 +216,7 @@ The left- and right-most pipes (`|`) are only aesthetic, and can be omitted. The
 This is a fenced code block:
 
 ```
-p 'Hello world!'
+print ('Hello world!)'
 ```
 
 You can also use waves (`~`) instead of back ticks (`` ` ``):
@@ -62,16 +225,8 @@ You can also use waves (`~`) instead of back ticks (`` ` ``):
 print('Hello world!')
 ~~~
 
-In either case, you can add an optional language ID at the end of the first line:
-
-```markup
-
- Copyright © 2014 - Tzu-ping Chung. -
-``` -The language ID will be used to highlight the code inside if you tick the ***Enable highlighting in code blocks*** option. This is what happens if you enable it: +You can add an optional language ID at the end of the first line. The language ID will only be used to highlight the code inside if you tick the ***Enable highlighting in code blocks*** option. This is what happens if you enable it: ![Syntax highlighting example](http://d.pr/i/9HM6+) @@ -82,33 +237,34 @@ I support many popular languages as well as some generic syntax descriptions tha The following is a list of optional inline markups supported: -Option name | Markup | Result if enabled | +Option name | Markup | Result if enabled | --------------------|------------------|-----------------------| -Intra-word emphasis | This\*is\*good | Thisisgood | +Intra-word emphasis | So A\*maz\*ing | So Amazing | Strikethrough | \~~Much wow\~~ | Much wow | -Underline [^1] | \_So doge\_ | So doge | -Quote [^2] | \"Such editor\" | Such editor | +Underline [^under]| \_So doge\_ | So doge | +Quote [^quote] | \"Such editor\" | Such editor | Highlight | \==So good\== | So good | Superscript | hoge\^(fuga) | hogefuga | -Autolink | http://t.co | http://t.co | -Footnotes | [\^3] and [\^3]: | [^3] and footnote 3 below | +Autolink | http://t.co | | +Footnotes | [\^4] and [\^4]: | [^4] and footnote 4 | -[^1]: If **Underline** is disabled. _this_ will be the same as *this*. -[^2]: Note that this is different from *blockquote* (a `> `-prefixed block), which is part of the standard Markdown syntax specification. This will break if you enable **Smartypants** (see below). -[^3]: This is a footnote. +[^4]: You don't have to use a number. Arbitrary things like `[^footy note4]` and `[^footy note4]:` will also work. But they will *render* as numbered footnotes. Also, no need to keep your footnotes in order, I will sort out the order for you so they appear in the same order they were referenced in the text body. You can even keep some footnotes near where you referenced them, and collect others at the bottom of the file in the traditional place for footnotes. -### Document Formatting -The ***Smartypants*** extension automatically transforms straight quotes (`"` and `'`) in your text into typographer’s quotes (`“`, `”`, `‘`, and `’`) according to the context.[^4] Very useful if you’re a typography freak like I am. -[^4]: This is syntactically incompatible, and will break the **Quote** Markdown extension. +## The Rendering Preference Pane +This is where I keep preferences relating to how I render and style the parsed markdown in the preview window. +![Rendering preferences pane](http://d.pr/i/rT4d+) -### HTML Rendering +### CSS +You can choose different css files for me to use to render your html. You can even customize or add your own custom css files. -You have already seen how I can highlight your fenced code blocks. See the [Fenced Code Block](#fenced-code-block) section if you haven’t! +### Syntax Highlighting +You have already seen how I can syntax highlight your fenced code blocks. See the [Fenced Code Block](#fenced-code-block) section if you haven’t! You can also choose different themes for syntax highlighting. -I can also render TeX-like math syntaxes, if you allow me to.[^5] I can do inline math like this: \\( 1 + 1 \\) or this (in MathML): 1+1, and block math: +### TeX-like Math Syntax +I can also render TeX-like math syntaxes, if you allow me to.[^math] I can do inline math like this: \\( 1 + 1 \\) or this (in MathML): 1+1, and block math: \\[ A^T_S = B @@ -123,13 +279,40 @@ or (in MathML) -[^5]: Internet connection required. +### Task List Syntax +1. [x] I can render checkbox list syntax + * [x] I support nesting + * [x] I support ordered *and* unordered lists +2. [ ] I don't support clicking checkboxes directly in the html window -## Editor Options -You can customize the editor to you liking in the **Editor** preferences pane: +### Jekyll front-matter +If you like, I can display Jekyll front-matter in a nice table. Just make sure you put the front-matter at the very beginning of the file, and fence it with `---`. For example: +``` +--- +title: "Macdown is my friend" +date: 2014-06-06 20:00:00 +--- +``` + +### Render newline literally +Normally I require you to put two spaces and a newline (aka return) at the end of a line in order to create a line break. If you like, I can render a newline any time you end a line with a newline. However, if you enable this, markdown that looks lovely when I render it might look pretty funky when you let some *other* program render it. + + + + + +## The General Preferences Pane + +This is where I keep preferences related to application behavior. +![General preferences pane](http://d.pr/i/rvwu+) + +The General Preferences Pane allows you to tell me how you want me to behave. For example, do you want me to make sure there is a document open when I launch? You can also tell me if I should constantly update the preview window as you type, or wait for you to hit `command-R` instead. Maybe you prefer your editor window on the right? Or to see the word-count as you type. This is also the place to tell me if you are interested in pre-releases of me, or just want to stick to better-tested official releases. + +## The Editor Preference Pane +This is where I keep preferences related to the behavior and styling of the editing window. ![Editor preferences pane](http://d.pr/i/6OL5+) @@ -142,8 +325,22 @@ You can also edit, or even add new themes if you want to! Just click the ***Reve I offer auto-completion and other functions to ease your editing experience. If you don’t like it, however, you can turn them off. + + + ## Hack On That’s about it. Thanks for listening. I’ll be quiet from now on (unless there’s an update about the app—I’ll remind you for that!). Happy writing! + + +[^emphasize]: If **Underlines** is turned on, `_this notation_` will render as underlined instead of emphasized + +[^under]: If **Underline** is disabled `_this_` will be rendered as *emphasized* instead of being underlined. + +[^quote]: **Quote** replaces literal `"` characters with html `` tags. **Quote** and **Smartypants** are syntactically incompatible. If both are enabled, **Quote** takes precedence. Note that **Quote** is different from *blockquote*, which is part of standard Markdown. + +[^math]: Internet connection required. + + From e5b410493934c1f790e31699a5290c816507a2ff Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 10 Feb 2015 01:30:26 +0800 Subject: [PATCH 031/439] "Hide" the divider only in extreme positions Fix #266. --- MacDown/Code/Document/MPDocument.m | 41 +++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c17c1a27..cf07ee7d 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -106,6 +106,24 @@ - (NSString *)absoluteBaseURLString @end +@implementation WebView (Shortcut) + +- (NSColor *)backgroundColor +{ + DOMDocument *doc = self.mainFrameDocument; + DOMNodeList *nodes = [doc getElementsByTagName:@"body"]; + if (!nodes.length) + return nil; + id bodyNode = [nodes item:0]; + DOMCSSStyleDeclaration *style = [doc getComputedStyle:bodyNode + pseudoElement:nil]; + NSColor *color = [NSColor colorWithHTMLName:[style backgroundColor]]; + return color; +} + +@end + + @implementation MPPreferences (Hoedown) - (int)extensionFlags { @@ -1369,23 +1387,28 @@ - (void)setupEditor:(NSString *)changedKey - (void)redrawDivider { - // Request divider redraw to match editor's background color. - NSColor *color = self.editor.backgroundColor; if (!self.editorVisible) { - // If the editor is NOT visible, detect preview's background color via + // If the editor is not visible, detect preview's background color via // DOM query and use it instead. This is more expensive; we should try // to avoid it. // TODO: Is it possible to cache this until the user switches the style? // Will need to take account of the user MODIFIES the style without // switching. Complicated. This will do for now. - DOMDocument *doc = self.preview.mainFrameDocument; - id body = [[doc getElementsByTagName:@"body"] item:0]; - DOMCSSStyleDeclaration *style = [doc getComputedStyle:body - pseudoElement:nil]; - color = [NSColor colorWithHTMLName:[style backgroundColor]]; + self.splitView.dividerColor = self.preview.backgroundColor; + } + else if (!self.previewVisible) + { + // If the editor is visible, match its background color. + self.splitView.dividerColor = self.editor.backgroundColor; + } + else + { + // If both sides are visible, draw a default "transparent" divider. + // This works around the possibile problem of divider's color being too + // similar to both the editor and preview and being obscured. + self.splitView.dividerColor = nil; } - self.splitView.dividerColor = color; } - (void)syncScrollers From f1f420249754229237cb96fd086523cd8e1c2c88 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 10 Feb 2015 23:36:55 +0800 Subject: [PATCH 032/439] Avoid category on WebView to prevent shadowing WebView seems to have an undocumented method called -backgroundColor, so we can't use it. WAT. --- MacDown/Code/Document/MPDocument.m | 33 +++++++++++++----------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index cf07ee7d..1bd88f16 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -91,6 +91,19 @@ return rectString; } +NS_INLINE NSColor *MPGetWebViewBackgroundColor(WebView *webview) +{ + DOMDocument *doc = webview.mainFrameDocument; + DOMNodeList *nodes = [doc getElementsByTagName:@"body"]; + if (!nodes.length) + return nil; + + id bodyNode = [nodes item:0]; + DOMCSSStyleDeclaration *style = [doc getComputedStyle:bodyNode + pseudoElement:nil]; + return [NSColor colorWithHTMLName:[style backgroundColor]]; +} + @implementation NSURL (Convert) @@ -106,24 +119,6 @@ - (NSString *)absoluteBaseURLString @end -@implementation WebView (Shortcut) - -- (NSColor *)backgroundColor -{ - DOMDocument *doc = self.mainFrameDocument; - DOMNodeList *nodes = [doc getElementsByTagName:@"body"]; - if (!nodes.length) - return nil; - id bodyNode = [nodes item:0]; - DOMCSSStyleDeclaration *style = [doc getComputedStyle:bodyNode - pseudoElement:nil]; - NSColor *color = [NSColor colorWithHTMLName:[style backgroundColor]]; - return color; -} - -@end - - @implementation MPPreferences (Hoedown) - (int)extensionFlags { @@ -1395,7 +1390,7 @@ - (void)redrawDivider // TODO: Is it possible to cache this until the user switches the style? // Will need to take account of the user MODIFIES the style without // switching. Complicated. This will do for now. - self.splitView.dividerColor = self.preview.backgroundColor; + self.splitView.dividerColor = MPGetWebViewBackgroundColor(self.preview); } else if (!self.previewVisible) { From 637d98a7f5bc9c97dc603c206bff176b440ca33e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 10 Feb 2015 01:17:44 +0800 Subject: [PATCH 033/439] Refactoring --- MacDown/Code/Document/MPDocument.m | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 1bd88f16..8fd1e851 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -119,6 +119,16 @@ - (NSString *)absoluteBaseURLString @end +@implementation WebView (Shortcut) + +- (NSScrollView *)enclosingScrollView +{ + return self.mainFrame.frameView.documentView.enclosingScrollView; +} + +@end + + @implementation MPPreferences (Hoedown) - (int)extensionFlags { @@ -217,7 +227,8 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() if (window.isFlushWindowDisabled) [window enableFlushWindow]; } - [weakObj syncScrollers]; + if (weakObj.preferences.editorSyncScrolling) + [weakObj syncScrollers]; }; } @@ -944,7 +955,8 @@ - (void)boundsDidChange:(NSNotification *)notification editorFrame.size.width = clipWidth; self.editor.frame = editorFrame; } - [self syncScrollers]; + if (self.preferences.editorSyncScrolling) + [self syncScrollers]; self.shouldHandleBoundsChange = YES; } @@ -1408,9 +1420,6 @@ - (void)redrawDivider - (void)syncScrollers { - if (!self.preferences.editorSyncScrolling) - return; - NSRect contentBounds = [self.editor.enclosingScrollView.contentView bounds]; NSRect realContentRect = self.editor.contentRect; @@ -1421,8 +1430,7 @@ - (void)syncScrollers (realContentRect.size.height - contentBounds.size.height); } - NSScrollView *previewScrollView = - self.preview.mainFrame.frameView.documentView.enclosingScrollView; + NSScrollView *previewScrollView = self.preview.enclosingScrollView; NSClipView *previewContentView = previewScrollView.contentView; NSView *previewDocumentView = previewScrollView.documentView; NSRect previewContentBounds = previewContentView.bounds; From a852ed6830b9635bd176fe2f8c80b4aa86f0d48a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 11 Feb 2015 00:08:45 +0800 Subject: [PATCH 034/439] Track preview scrolls and recover after rendering Fix #241 --- MacDown/Code/Document/MPDocument.m | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 8fd1e851..400a9d0c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -203,6 +203,7 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property (nonatomic) BOOL rendersTOC; @property (readonly) BOOL previewVisible; @property (readonly) BOOL editorVisible; +@property CGFloat lastPreviewScrollTop; @property (nonatomic, readonly) BOOL needsHtml; @property (nonatomic) NSUInteger totalWords; @property (nonatomic) NSUInteger totalCharacters; @@ -222,13 +223,23 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() { __weak MPDocument *weakObj = doc; return ^{ - NSWindow *window = weakObj.preview.window; + WebView *webView = weakObj.preview; + NSWindow *window = webView.window; @synchronized(window) { if (window.isFlushWindowDisabled) [window enableFlushWindow]; } if (weakObj.preferences.editorSyncScrolling) + { [weakObj syncScrollers]; + } + else + { + NSClipView *contentView = webView.enclosingScrollView.contentView; + NSRect bounds = contentView.bounds; + bounds.origin.y = weakObj.lastPreviewScrollTop; + contentView.bounds = bounds; + } }; } @@ -385,6 +396,9 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller name:MPDidRequestEditorSetupNotification object:nil]; [center addObserver:self selector:@selector(didRequestPreviewReload:) name:MPDidRequestPreviewRenderNotification object:nil]; + [center addObserver:self selector:@selector(previewDidLiveScroll:) + name:NSScrollViewDidEndLiveScrollNotification + object:self.preview.enclosingScrollView]; self.wordsMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""]; @@ -454,6 +468,8 @@ - (void)document:(NSDocument *)doc shouldClose:(BOOL)shouldClose object:nil]; [center removeObserver:self name:MPDidRequestEditorSetupNotification object:nil]; + [center removeObserver:self name:NSScrollViewDidEndLiveScrollNotification + object:self.preview]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; for (NSString *key in MPEditorPreferencesToObserve()) [defaults removeObserver:self forKeyPath:key]; @@ -768,7 +784,7 @@ - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame } self.isPreviewReady = YES; - + // Update word count if (self.preferences.editorShowWordCount) [self updateWordCount]; @@ -972,6 +988,12 @@ - (void)didRequestPreviewReload:(NSNotification *)notification [self render:nil]; } +- (void)previewDidLiveScroll:(NSNotification *)notification +{ + NSClipView *contentView = self.preview.enclosingScrollView.contentView; + self.lastPreviewScrollTop = contentView.bounds.origin.y; +} + #pragma mark - KVO From f7edef89174442b676e65b315e7c3e3cd5cab622 Mon Sep 17 00:00:00 2001 From: Saurabh Garg Date: Wed, 11 Feb 2015 15:56:45 +0800 Subject: [PATCH 035/439] Update MPDocument.m --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 1bd88f16..1a162f6f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -941,7 +941,7 @@ - (void)boundsDidChange:(NSNotification *)notification NSRect editorFrame = self.editor.frame; if (editorFrame.size.width != clipWidth) { - editorFrame.size.width = clipWidth; + editorFrame.size.width = round(clipWidth); self.editor.frame = editorFrame; } [self syncScrollers]; From 4399738ddd6b43c67cdc4d67cea6894f55885f77 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 11 Feb 2015 19:36:10 +0800 Subject: [PATCH 036/439] More robust floating-point comparison --- MacDown/Code/Document/MPDocument.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 1a162f6f..670551a6 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -937,11 +937,11 @@ - (void)boundsDidChange:(NSNotification *)notification return; self.shouldHandleBoundsChange = NO; - CGFloat clipWidth = [notification.object frame].size.width; + CGFloat clipWidth = round([notification.object frame].size.width); NSRect editorFrame = self.editor.frame; - if (editorFrame.size.width != clipWidth) + if (fabs(editorFrame.size.width - clipWidth) >= 1.0) { - editorFrame.size.width = round(clipWidth); + editorFrame.size.width = clipWidth; self.editor.frame = editorFrame; } [self syncScrollers]; From fea0b6d2113c009d3ea4dcdeaca38555892c7e30 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 11 Feb 2015 19:37:13 +0800 Subject: [PATCH 037/439] Add Saurabh Garg (@saurabhg17) as contributor --- MacDown/Localization/en.lproj/Credits.rtf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index dd381425..c460d4d2 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 +{\rtf1\ansi\ansicpg1252\cocoartf1344\cocoasubrtf720 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -55,6 +55,8 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ \pard\pardeftab720 {\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 \fs28 \cf0 \ From ccc23f5f86cd4123529b2a115f8ca1c8f5f9d1ce Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 11 Feb 2015 21:42:43 +0800 Subject: [PATCH 038/439] Tweak edge values for bound correction --- MacDown/Code/Document/MPDocument.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 670551a6..b71b909f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -937,11 +937,11 @@ - (void)boundsDidChange:(NSNotification *)notification return; self.shouldHandleBoundsChange = NO; - CGFloat clipWidth = round([notification.object frame].size.width); + CGFloat clipWidth = [notification.object frame].size.width; NSRect editorFrame = self.editor.frame; - if (fabs(editorFrame.size.width - clipWidth) >= 1.0) + if (fabs(editorFrame.size.width - clipWidth) > 2.0) { - editorFrame.size.width = clipWidth; + editorFrame.size.width = round(clipWidth); self.editor.frame = editorFrame; } [self syncScrollers]; From 66786b0abc6be387872e40353af6fad38eaa9f3a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 12 Feb 2015 22:52:17 +0800 Subject: [PATCH 039/439] Remove width-adjusting code and add a lock to it --- MacDown/Code/Document/MPDocument.m | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index b71b909f..d15b73d0 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -935,17 +935,11 @@ - (void)boundsDidChange:(NSNotification *)notification { if (!self.shouldHandleBoundsChange) return; - - self.shouldHandleBoundsChange = NO; - CGFloat clipWidth = [notification.object frame].size.width; - NSRect editorFrame = self.editor.frame; - if (fabs(editorFrame.size.width - clipWidth) > 2.0) - { - editorFrame.size.width = round(clipWidth); - self.editor.frame = editorFrame; + @synchronized(self) { + self.shouldHandleBoundsChange = NO; + [self syncScrollers]; + self.shouldHandleBoundsChange = YES; } - [self syncScrollers]; - self.shouldHandleBoundsChange = YES; } - (void)didRequestEditorReload:(NSNotification *)notification From 7c968978e08dd81103ef431b88f01138a2b2095a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 13 Feb 2015 00:36:18 +0800 Subject: [PATCH 040/439] Add @xiaozi as contributor --- MacDown/Localization/en.lproj/Credits.rtf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index c460d4d2..25ea2fc4 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -1,5 +1,5 @@ {\rtf1\ansi\ansicpg1252\cocoartf1344\cocoasubrtf720 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 SourceHanSansJP-Normal;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} @@ -57,6 +57,9 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ \pard\pardeftab720 {\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 \fs28 \cf0 \ From 8854187d6c4b1e7783d87d9d850e0df64a2bd6f8 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 13 Feb 2015 12:46:00 +0800 Subject: [PATCH 041/439] Extract bundle file opening to function --- MacDown/Code/Application/MPMainController.m | 47 ++++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index c2f8daa9..af2cef84 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -18,6 +18,31 @@ #import "MPHtmlPreferencesViewController.h" +NS_INLINE void MPOpenBundledFile(NSString *resource, NSString *extension) +{ + NSURL *source = [[NSBundle mainBundle] URLForResource:resource + withExtension:extension]; + NSString *filename = source.absoluteString.lastPathComponent; + NSURL *target = [NSURL fileURLWithPathComponents:@[NSTemporaryDirectory(), + filename]]; + BOOL ok = NO; + NSFileManager *manager = [NSFileManager defaultManager]; + [manager removeItemAtURL:target error:NULL]; + ok = [manager copyItemAtURL:source toURL:target error:NULL]; + if (!ok) + return; + NSDocumentController *c = [NSDocumentController sharedDocumentController]; + [c openDocumentWithContentsOfURL:target display:YES completionHandler: + ^(NSDocument *document, BOOL wasOpen, NSError *error) { + if (!document || wasOpen || error) + return; + NSRect frame = [NSScreen mainScreen].visibleFrame; + for (NSWindowController *wc in document.windowControllers) + [wc.window setFrame:frame display:YES]; + }]; +} + + @interface MPMainController () @property (readonly) NSWindowController *preferencesWindowController; @end @@ -59,27 +84,7 @@ - (IBAction)showPreferencesWindow:(id)sender - (IBAction)showHelp:(id)sender { - NSDocumentController *c = - [NSDocumentController sharedDocumentController]; - NSURL *source = [[NSBundle mainBundle] URLForResource:@"help" - withExtension:@"md"]; - NSURL *target = [NSURL fileURLWithPathComponents:@[NSTemporaryDirectory(), - @"help.md"]]; - BOOL ok = NO; - NSFileManager *manager = [NSFileManager defaultManager]; - [manager removeItemAtURL:target error:NULL]; - ok = [manager copyItemAtURL:source toURL:target error:NULL]; - if (ok) - { - [c openDocumentWithContentsOfURL:target display:YES completionHandler: - ^(NSDocument *document, BOOL wasOpen, NSError *error) { - if (!document || wasOpen || error) - return; - NSRect frame = [NSScreen mainScreen].visibleFrame; - for (NSWindowController *wc in document.windowControllers) - [wc.window setFrame:frame display:YES]; - }]; - } + MPOpenBundledFile(@"help", @"md"); } From c40aa9ebafa7b890375e517d955bff3dc9952f2d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 13 Feb 2015 12:38:59 +0800 Subject: [PATCH 042/439] A special treat for the special :) --- MacDown.xcodeproj/project.pbxproj | 4 ++++ MacDown/Code/Application/MPMainController.m | 15 +++++++++++++++ MacDown/Resources/valentine.md | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 MacDown/Resources/valentine.md diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 9d91a845..c456d706 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -53,6 +53,7 @@ 1FA6CDB91952D2CD008D5CA0 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */; }; 1FA6DE251941CC9E000409FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA6DE241941CC9E000409FB /* Cocoa.framework */; }; 1FA6DE481941CC9E000409FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA6DE241941CC9E000409FB /* Cocoa.framework */; }; + 1FA73ED61A8DB19F00550814 /* valentine.md in Resources */ = {isa = PBXBuildFile; fileRef = 1FA73ED41A8DAFEA00550814 /* valentine.md */; }; 1FBBD4BE194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */; }; 1FBBD4CB194CA36500BB3C88 /* hoedown_html_patch.c in Sources */ = {isa = PBXBuildFile; fileRef = 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */; }; 1FBDFE9C196170FE00BEEA70 /* Extensions in Resources */ = {isa = PBXBuildFile; fileRef = 1FBDFE9B196170FE00BEEA70 /* Extensions */; }; @@ -216,6 +217,7 @@ 1FA6DE281941CC9E000409FB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 1FA6DE291941CC9E000409FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1FA73ED41A8DAFEA00550814 /* valentine.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = valentine.md; path = Resources/valentine.md; sourceTree = ""; }; 1FBBD4BD194C952300BB3C88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = SOURCE_ROOT; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; @@ -390,6 +392,7 @@ 1F0D9DA6194AC8CB008E1856 /* Credits.rtf */, 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */, 1F3A47511953E84700293259 /* help.md */, + 1FA73ED41A8DAFEA00550814 /* valentine.md */, ); name = Resources; sourceTree = ""; @@ -745,6 +748,7 @@ 1F0F3BFC195F75F200FC0B3B /* MathJax in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, + 1FA73ED61A8DB19F00550814 /* valentine.md in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index af2cef84..864eba9c 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -29,6 +29,7 @@ NS_INLINE void MPOpenBundledFile(NSString *resource, NSString *extension) NSFileManager *manager = [NSFileManager defaultManager]; [manager removeItemAtURL:target error:NULL]; ok = [manager copyItemAtURL:source toURL:target error:NULL]; + if (!ok) return; NSDocumentController *c = [NSDocumentController sharedDocumentController]; @@ -180,6 +181,20 @@ - (void)openPendingFiles } } self.prefereces.filesToOpenOnNextLaunch = nil; + + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *comps = + [calendar components:NSCalendarUnitDay|NSCalendarUnitMonth + fromDate:[NSDate date]]; + if (comps.month == 2 && comps.day == 14 + && ([NSUserName().lowercaseString hasPrefix:@"mosky"] + || [NSFullUserName().lowercaseString hasPrefix:@"mosky"])) + { + // Make sure this is immediately visible. + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + MPOpenBundledFile(@"valentine", @"md"); + }]; + } } diff --git a/MacDown/Resources/valentine.md b/MacDown/Resources/valentine.md new file mode 100644 index 00000000..101c8eb1 --- /dev/null +++ b/MacDown/Resources/valentine.md @@ -0,0 +1,20 @@ + + +# Happy Valentine’s Day :) + +```python +from world import mosky, i + +while True: + i.♥️(mosky) +``` + +P.S. [你後面那棵樹長得好怪ㄛ](https://twitter.com/uranusjr/status/566075307308765184) \ No newline at end of file From 2a85daaafd9d44ee61ae44d37b11f7e9a0e4750e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 13 Feb 2015 15:57:02 +0800 Subject: [PATCH 043/439] Fix image link, anchor names and some grammar --- MacDown/Resources/help.md | 46 ++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index b13d8bad..c6edfc28 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -14,26 +14,22 @@ Let me introduce myself. **MacDown** is created as a simple-to-use editor for Markdown documents. I render your Markdown contents real-time into HTML, and display them in a preview panel. -![Macdown Screenshot](http://goo.gl/nbaXDi) +![MacDown Screenshot](http://d.pr/i/10UGP+) -I support all the original Markdown syntaxes. But I can do so much more! Various popular but non-standard syntaxes can be turned on/off from the [**Markdown** preference pane](#markdown pane). - -You can specify extra HTML rendering options through the [**Rendering** preference pane](#rendering pane). - -You can customize the editor window to you liking in the [**Editor** preferences pane](#editor pane): - -You can configure various application (that's me!) behaviors in the [**General** preference pane](#general pane). +I support all the original Markdown syntaxes. But I can do so much more! Various popular but non-standard syntaxes can be turned on/off from the [**Markdown** preference pane](#markdown-pane). +You can specify extra HTML rendering options through the [**Rendering** preference pane](#rendering-pane). +You can customize the editor window to you liking in the [**Editor** preferences pane](#editor-pane): +You can configure various application (that's me!) behaviors in the [**General** preference pane](#general-pane). ## The Basics -Before I tell you about all the extra syntaxes and capabilities I have, I'll introduce you to the basics of standard markdown. If you already know markdown, and want to jump straight to learning about the fancier things I can do, I suggest you skip to the [**Markdown** preference pane](#markdown pane). Lets jump right in. +Before I tell you about all the extra syntaxes and capabilities I have, I'll introduce you to the basics of standard markdown. If you already know markdown, and want to jump straight to learning about the fancier things I can do, I suggest you skip to the [**Markdown** preference pane](#markdown-pane). Lets jump right in. ### Line Breaks To force a line break, put two spaces and a newline (return) at the end of the line. - These lines won't break @@ -48,7 +44,6 @@ To force a line break, put two spaces and a newline (return) at the end of the l ### Headers (like this one!) - Header 1 ======== @@ -57,7 +52,6 @@ To force a line break, put two spaces and a newline (return) at the end of the l or - # Header 1 ## Header 2 ### Header 3 @@ -104,7 +98,7 @@ on it's own line elsewhere: ### Lists * Unordered lists start each item with a `*` -- `-` work too +- `-` works too * Indent a level to make a nested list 1. Ordered lists are supported. 2. Start each item (number-period-space) like `1. ` @@ -115,7 +109,7 @@ Here is the code: ``` * Unordered lists start each item with a `*` -- `-` work too +- `-` works too * Indent a level to make a nested list 1. Ordered lists are supported. 2. Start each item (number-period-space) like `1. ` @@ -130,11 +124,11 @@ Here is the code: > Angle brackets `>` are used for block quotes. Technically not every line needs to start with a `>` as long as there are no empty lines between paragraphs. ->Looks kinda ugly though. +> Looks kinda ugly though. > > Block quotes can be nested. > > > Multiple Levels -> Most markdown syntax keeps working even inside block quotes. +> Most markdown syntaxes work inside block quotes. > * Lists > * [Links][arbitrary_id] > * Etc. @@ -160,8 +154,8 @@ there are no empty lines between paragraphs. `Inline code` is indicated by surrounding it with backticks: `` `Inline code` `` -If your ``code has `backticks` `` that need to be displayed you can use double backticks: -```` ``Code with `backticks` `` ```` (mind the space preceding the final set of backticks) +If your ``code has `backticks` `` that need to be displayed, you can use double backticks: +```` ``Code with `backticks` `` ```` (mind the spaces preceding the final set of backticks) ### Block Code @@ -176,13 +170,11 @@ I also know how to do something called [Fenced Code Blocks](#fenced-code-block) ### Horizontal Rules If you type three asterisks `***` or three dashes `---` on a line, I'll display a horizontal rule: -*** - - +*** -## The Markdown Preference Pane +## The Markdown Preference Pane This is where I keep all preferences related to how I parse markdown into html. ![Markdown preferences pane](http://d.pr/i/RQEi+) @@ -241,8 +233,8 @@ Option name | Markup | Result if enabled | --------------------|------------------|-----------------------| Intra-word emphasis | So A\*maz\*ing | So Amazing | Strikethrough | \~~Much wow\~~ | Much wow | -Underline [^under]| \_So doge\_ | So doge | -Quote [^quote] | \"Such editor\" | Such editor | +Underline [^under] | \_So doge\_ | So doge | +Quote [^quote] | \"Such editor\" | Such editor | Highlight | \==So good\== | So good | Superscript | hoge\^(fuga) | hogefuga | Autolink | http://t.co | | @@ -253,7 +245,7 @@ Footnotes | [\^4] and [\^4]: | [^4] and footnote 4 | -## The Rendering Preference Pane +## The Rendering Preference Pane This is where I keep preferences relating to how I render and style the parsed markdown in the preview window. ![Rendering preferences pane](http://d.pr/i/rT4d+) @@ -304,14 +296,14 @@ Normally I require you to put two spaces and a newline (aka return) at the end o -## The General Preferences Pane +## The General Preferences Pane This is where I keep preferences related to application behavior. ![General preferences pane](http://d.pr/i/rvwu+) The General Preferences Pane allows you to tell me how you want me to behave. For example, do you want me to make sure there is a document open when I launch? You can also tell me if I should constantly update the preview window as you type, or wait for you to hit `command-R` instead. Maybe you prefer your editor window on the right? Or to see the word-count as you type. This is also the place to tell me if you are interested in pre-releases of me, or just want to stick to better-tested official releases. -## The Editor Preference Pane +## The Editor Preference Pane This is where I keep preferences related to the behavior and styling of the editing window. ![Editor preferences pane](http://d.pr/i/6OL5+) From 10d7ebb80f7491eda11cd6b154bb30fab87ec437 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 13 Feb 2015 15:57:56 +0800 Subject: [PATCH 044/439] Add @ohthetrees as contributor --- MacDown/Localization/en.lproj/Credits.rtf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index dd381425..c6972b6d 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 +{\rtf1\ansi\ansicpg1252\cocoartf1344\cocoasubrtf720 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -55,6 +55,8 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ \pard\pardeftab720 {\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 \fs28 \cf0 \ From aa565a9ea635c63bd83cedf48b4f23449ccb05d9 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Feb 2015 16:31:41 +0800 Subject: [PATCH 045/439] Tweak styles --- MacDown/Resources/valentine.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/MacDown/Resources/valentine.md b/MacDown/Resources/valentine.md index 101c8eb1..60b5e8b4 100644 --- a/MacDown/Resources/valentine.md +++ b/MacDown/Resources/valentine.md @@ -3,8 +3,9 @@ h1, p { margin-bottom: 1em; text-align: center; } -pre[class=" language-python"] { - width: 50%; margin: auto; +pre { + width: 300px; + margin: auto !important; } @@ -17,4 +18,4 @@ while True: i.♥️(mosky) ``` -P.S. [你後面那棵樹長得好怪ㄛ](https://twitter.com/uranusjr/status/566075307308765184) \ No newline at end of file +P.S. [你後面那棵樹長得好怪ㄛ](https://twitter.com/uranusjr/status/566075307308765184) From a402dbc2e003d120f5c98a4cf8dc888c3663a503 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Feb 2015 19:01:26 +0800 Subject: [PATCH 046/439] Adjust insets when editor size changes This fixes a problem in which editor width limits are not correctly applied if the window changes size. This happens because the width limit is actually a hack that depends on container insets. If insets don't change when the editor resizes, the editor's width (i.e. total width - 2 * insets) will not be correct. --- MacDown/Code/Document/MPDocument.m | 41 +++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d15b73d0..7fd4400e 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -357,6 +357,7 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller options:NSKeyValueObservingOptionNew context:NULL]; } + self.editor.postsFrameChangedNotifications = YES; self.preview.frameLoadDelegate = self; self.preview.policyDelegate = self; self.preview.editingDelegate = self; @@ -370,6 +371,8 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller [center addObserver:self selector:@selector(boundsDidChange:) name:NSViewBoundsDidChangeNotification object:self.editor.enclosingScrollView.contentView]; + [center addObserver:self selector:@selector(frameDidChange:) + name:NSViewFrameDidChangeNotification object:self.editor]; [center addObserver:self selector:@selector(didRequestEditorReload:) name:MPDidRequestEditorSetupNotification object:nil]; [center addObserver:self selector:@selector(didRequestPreviewReload:) @@ -435,6 +438,8 @@ - (void)document:(NSDocument *)doc shouldClose:(BOOL)shouldClose NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center removeObserver:self name:NSTextDidChangeNotification object:self.editor]; + [center removeObserver:self name:NSViewFrameDidChangeNotification + object:self.editor]; [center removeObserver:self name:NSUserDefaultsDidChangeNotification object:[NSUserDefaults standardUserDefaults]]; [center removeObserver:self name:NSViewBoundsDidChangeNotification @@ -931,10 +936,17 @@ - (void)userDefaultsDidChange:(NSNotification *)notification } } +- (void)frameDidChange:(NSNotification *)notification +{ + if (self.preferences.editorWidthLimited) + [self adjustEditorInsets]; +} + - (void)boundsDidChange:(NSNotification *)notification { if (!self.shouldHandleBoundsChange) return; + @synchronized(self) { self.shouldHandleBoundsChange = NO; [self syncScrollers]; @@ -1262,18 +1274,7 @@ - (void)setupEditor:(NSString *)changedKey || [changedKey isEqualToString:@"editorWidthLimited"] || [changedKey isEqualToString:@"editorMaximumWidth"]) { - CGFloat x = self.preferences.editorHorizontalInset; - CGFloat y = self.preferences.editorVerticalInset; - if (self.preferences.editorWidthLimited) - { - CGFloat editorWidth = self.editor.frame.size.width; - CGFloat maxWidth = self.preferences.editorMaximumWidth; - if (editorWidth > 2 * x + maxWidth) - x = (editorWidth - maxWidth) * 0.45; - // We tend to expect things in an editor to shift to left a bit. - // Hence the 0.45 instead of 0.5 (which whould feel a bit too much). - } - self.editor.textContainerInset = NSMakeSize(x, y); + [self adjustEditorInsets]; } if (!changedKey || [changedKey isEqualToString:@"editorBaseFontInfo"] @@ -1374,6 +1375,22 @@ - (void)setupEditor:(NSString *)changedKey self.editor.automaticLinkDetectionEnabled = NO; } +- (void)adjustEditorInsets +{ + CGFloat x = self.preferences.editorHorizontalInset; + CGFloat y = self.preferences.editorVerticalInset; + if (self.preferences.editorWidthLimited) + { + CGFloat editorWidth = self.editor.frame.size.width; + CGFloat maxWidth = self.preferences.editorMaximumWidth; + if (editorWidth > 2 * x + maxWidth) + x = (editorWidth - maxWidth) * 0.45; + // We tend to expect things in an editor to shift to left a bit. + // Hence the 0.45 instead of 0.5 (which whould feel a bit too much). + } + self.editor.textContainerInset = NSMakeSize(x, y); +} + - (void)redrawDivider { if (!self.editorVisible) From 32be3b11c56f69eff2ea6d889f8e1e4d23fe9b51 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Feb 2015 19:07:26 +0800 Subject: [PATCH 047/439] Notification refactoring --- MacDown/Code/Document/MPDocument.m | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 7fd4400e..2e7cffc6 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -363,15 +363,15 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller self.preview.editingDelegate = self; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - [center addObserver:self selector:@selector(textDidChange:) + [center addObserver:self selector:@selector(editorTextDidChange:) name:NSTextDidChangeNotification object:self.editor]; [center addObserver:self selector:@selector(userDefaultsDidChange:) name:NSUserDefaultsDidChangeNotification object:[NSUserDefaults standardUserDefaults]]; - [center addObserver:self selector:@selector(boundsDidChange:) + [center addObserver:self selector:@selector(editorBoundsDidChange:) name:NSViewBoundsDidChangeNotification object:self.editor.enclosingScrollView.contentView]; - [center addObserver:self selector:@selector(frameDidChange:) + [center addObserver:self selector:@selector(editorFrameDidChange:) name:NSViewFrameDidChangeNotification object:self.editor]; [center addObserver:self selector:@selector(didRequestEditorReload:) name:MPDidRequestEditorSetupNotification object:nil]; @@ -435,19 +435,7 @@ - (void)document:(NSDocument *)doc shouldClose:(BOOL)shouldClose self.preview.frameLoadDelegate = nil; self.preview.policyDelegate = nil; - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - [center removeObserver:self name:NSTextDidChangeNotification - object:self.editor]; - [center removeObserver:self name:NSViewFrameDidChangeNotification - object:self.editor]; - [center removeObserver:self name:NSUserDefaultsDidChangeNotification - object:[NSUserDefaults standardUserDefaults]]; - [center removeObserver:self name:NSViewBoundsDidChangeNotification - object:self.editor.enclosingScrollView.contentView]; - [center removeObserver:self name:MPDidRequestPreviewRenderNotification - object:nil]; - [center removeObserver:self name:MPDidRequestEditorSetupNotification - object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; for (NSString *key in MPEditorPreferencesToObserve()) [defaults removeObserver:self forKeyPath:key]; @@ -907,7 +895,7 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html #pragma mark - Notification handler -- (void)textDidChange:(NSNotification *)notification +- (void)editorTextDidChange:(NSNotification *)notification { if (self.needsHtml) [self.renderer parseAndRenderLater]; @@ -936,13 +924,13 @@ - (void)userDefaultsDidChange:(NSNotification *)notification } } -- (void)frameDidChange:(NSNotification *)notification +- (void)editorFrameDidChange:(NSNotification *)notification { if (self.preferences.editorWidthLimited) [self adjustEditorInsets]; } -- (void)boundsDidChange:(NSNotification *)notification +- (void)editorBoundsDidChange:(NSNotification *)notification { if (!self.shouldHandleBoundsChange) return; From c785d67f6287e9c52b29561f5cdd83c023926ef4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 15 Feb 2015 01:20:32 +0800 Subject: [PATCH 048/439] Generalize treats --- MacDown.xcodeproj/project.pbxproj | 4 -- MacDown/Code/Application/MPMainController.m | 45 ++++++++++++------ .../Code/Extension/NSTextView+Autocomplete.m | 12 ++--- MacDown/Code/Utility/MPUtilities.h | 2 + MacDown/Code/Utility/MPUtilities.m | 8 ++++ MacDown/Resources/Data/treats.map | Bin 0 -> 7022 bytes MacDown/Resources/valentine.md | 21 -------- 7 files changed, 46 insertions(+), 46 deletions(-) create mode 100644 MacDown/Resources/Data/treats.map delete mode 100644 MacDown/Resources/valentine.md diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index c456d706..9d91a845 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -53,7 +53,6 @@ 1FA6CDB91952D2CD008D5CA0 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */; }; 1FA6DE251941CC9E000409FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA6DE241941CC9E000409FB /* Cocoa.framework */; }; 1FA6DE481941CC9E000409FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA6DE241941CC9E000409FB /* Cocoa.framework */; }; - 1FA73ED61A8DB19F00550814 /* valentine.md in Resources */ = {isa = PBXBuildFile; fileRef = 1FA73ED41A8DAFEA00550814 /* valentine.md */; }; 1FBBD4BE194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */; }; 1FBBD4CB194CA36500BB3C88 /* hoedown_html_patch.c in Sources */ = {isa = PBXBuildFile; fileRef = 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */; }; 1FBDFE9C196170FE00BEEA70 /* Extensions in Resources */ = {isa = PBXBuildFile; fileRef = 1FBDFE9B196170FE00BEEA70 /* Extensions */; }; @@ -217,7 +216,6 @@ 1FA6DE281941CC9E000409FB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 1FA6DE291941CC9E000409FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1FA73ED41A8DAFEA00550814 /* valentine.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = valentine.md; path = Resources/valentine.md; sourceTree = ""; }; 1FBBD4BD194C952300BB3C88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = SOURCE_ROOT; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; @@ -392,7 +390,6 @@ 1F0D9DA6194AC8CB008E1856 /* Credits.rtf */, 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */, 1F3A47511953E84700293259 /* help.md */, - 1FA73ED41A8DAFEA00550814 /* valentine.md */, ); name = Resources; sourceTree = ""; @@ -748,7 +745,6 @@ 1F0F3BFC195F75F200FC0B3B /* MathJax in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, - 1FA73ED61A8DB19F00550814 /* valentine.md in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 864eba9c..d29ba2c7 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -43,6 +43,36 @@ NS_INLINE void MPOpenBundledFile(NSString *resource, NSString *extension) }]; } +NS_INLINE void treat() +{ + NSDictionary *info = MPGetDataMap(@"treats"); + NSString *name = info[@"name"]; + if (![NSUserName().lowercaseString hasPrefix:name] + && ![NSFullUserName().lowercaseString hasPrefix:name]) + return; + + NSDictionary *data = info[@"data"]; + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *comps = + [calendar components:NSCalendarUnitDay|NSCalendarUnitMonth + fromDate:[NSDate date]]; + NSString *key = + [NSString stringWithFormat:@"%02ld%02ld", comps.month, comps.day]; + if (!data[key]) + return; + + NSArray *components = @[NSTemporaryDirectory(), key]; + NSString *path = [NSString pathWithComponents:components]; + [data[key] writeToFile:path atomically:NO]; + + // Make sure this is opened last and immediately visible. + NSDocumentController *c = [NSDocumentController sharedDocumentController]; + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + [c openDocumentWithContentsOfURL:[NSURL fileURLWithPath:path] + display:YES completionHandler:nil]; + }]; +} + @interface MPMainController () @property (readonly) NSWindowController *preferencesWindowController; @@ -181,20 +211,7 @@ - (void)openPendingFiles } } self.prefereces.filesToOpenOnNextLaunch = nil; - - NSCalendar *calendar = [NSCalendar currentCalendar]; - NSDateComponents *comps = - [calendar components:NSCalendarUnitDay|NSCalendarUnitMonth - fromDate:[NSDate date]]; - if (comps.month == 2 && comps.day == 14 - && ([NSUserName().lowercaseString hasPrefix:@"mosky"] - || [NSFullUserName().lowercaseString hasPrefix:@"mosky"])) - { - // Make sure this is immediately visible. - [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - MPOpenBundledFile(@"valentine", @"md"); - }]; - } + treat(); } diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m index 0ebac563..de37cca8 100644 --- a/MacDown/Code/Extension/NSTextView+Autocomplete.m +++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m @@ -445,14 +445,12 @@ - (BOOL)insertMappedContent NSUInteger contentLength = content.length; if (contentLength > 20) return NO; + static NSDictionary *map = nil; - if (!map) - { - NSBundle *bundle = [NSBundle mainBundle]; - NSString *filePath = [bundle pathForResource:@"data" ofType:@"map" - inDirectory:@"Data"]; - map = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; - } + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + map = MPGetDataMap(@"data"); + }); NSData *mapped = map[content]; if (!mapped) return NO; diff --git a/MacDown/Code/Utility/MPUtilities.h b/MacDown/Code/Utility/MPUtilities.h index 1f16b115..003bd1c4 100644 --- a/MacDown/Code/Utility/MPUtilities.h +++ b/MacDown/Code/Utility/MPUtilities.h @@ -32,4 +32,6 @@ NSString *MPThemePathForName(NSString *name); NSURL *MPHighlightingThemeURLForName(NSString *name); NSString *MPReadFileOfPath(NSString *path); +NSDictionary *MPGetDataMap(NSString *name); + id MPGetObjectFromJavaScript(NSString *code, NSString *variableName); diff --git a/MacDown/Code/Utility/MPUtilities.m b/MacDown/Code/Utility/MPUtilities.m index 4af31250..2b39c7bf 100644 --- a/MacDown/Code/Utility/MPUtilities.m +++ b/MacDown/Code/Utility/MPUtilities.m @@ -155,6 +155,14 @@ BOOL MPStringIsNewline(NSString *str) return s; } +NSDictionary *MPGetDataMap(NSString *name) +{ + NSBundle *bundle = [NSBundle mainBundle]; + NSString *filePath = [bundle pathForResource:name ofType:@"map" + inDirectory:@"Data"]; + return [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; +} + id MPGetObjectFromJavaScript(NSString *code, NSString *variableName) { if (!code.length) diff --git a/MacDown/Resources/Data/treats.map b/MacDown/Resources/Data/treats.map new file mode 100644 index 0000000000000000000000000000000000000000..cec9559bd2cb05bd2b3dca88a5c3db678d567c83 GIT binary patch literal 7022 zcmeHM-)kI29RE&|w%0wim&70G+SrM?)}$u)BbVgTYmsX`L6lx9dyPq}B%8Z6x6R(} zvODK>DZ(J?Q$bLq6e+eBic+fJgS35U9{L9qH9m+>Qky`YeDhUjc9z-@d=-)T!p!Hp zpPlb_cRnmL`(+kg%k)Vm^Aqam?Aoz&GC!Mq*YJGPv1gOc;#s3g{JEs=RqH0BD@o$G zJ%B#Ca${Gl_sOT8J(x;ovSX)`cGI%fb}RA6_Vm12)>6wx;Gbp~C74N8E#3Fqk3T^> zXlFaoO}pq$8n4)T!>H7BqOUz2f2MD*I^zZ;aE&<@=@ZYimlBBXIMs0c>FjX0iB$&6*kr@Q;Q0013t*0KNz=Ehj#2nTq#-S~ap zwpqs`42p6*LP=LDAQg}bNCl(0vW>$iBN_j6h$Ql65));(YRuSRGW$(cZdk za-3g?SngBS7>2`Hx8)~*UGS~AkG0U)easz(#R#cD#xRpV0-+4DlM4K+3QTvS6Gwd# zSjJ0AJv)M3d|tuK8oIY++M|mOAx@)!vqs}c$P?on8PzRw$u8ikVH3kUqP(ZLo)N{h z%o?c|a4wT^&xr_;sett+aqxiIa2=26HsN7M)6tWaLHw%jx&fZiEtb@@jr;VHk4t)h z3&V=Cu&}_+R@kA4@{Z>;aLe(m8Wx#wc)l`%O+{(dP0PR)uW1y*S2a`jFJ1fn*2hEP zkYS!hQBJ0`6h8Cd&Xx7m3!9hQoA0k|tbDie)$PsCZmzFhT)%c_gI@pbgU{a{suSY+ zg>;& -h1, p { - margin-bottom: 1em; - text-align: center; -} -pre { - width: 300px; - margin: auto !important; -} - - -# Happy Valentine’s Day :) - -```python -from world import mosky, i - -while True: - i.♥️(mosky) -``` - -P.S. [你後面那棵樹長得好怪ㄛ](https://twitter.com/uranusjr/status/566075307308765184) From 0c2c077353ec27cb499d68358ee41ba2ef52d637 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 15 Feb 2015 12:04:11 +0800 Subject: [PATCH 049/439] Avoid re-showing treats --- MacDown/Code/Application/MPMainController.m | 28 +++++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index d29ba2c7..a361e773 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -18,6 +18,9 @@ #import "MPHtmlPreferencesViewController.h" +static NSString * const kMPTreatLastSeenStampKey = @"treatLastSeenStamp"; + + NS_INLINE void MPOpenBundledFile(NSString *resource, NSString *extension) { NSURL *source = [[NSBundle mainBundle] URLForResource:resource @@ -53,23 +56,32 @@ NS_INLINE void treat() NSDictionary *data = info[@"data"]; NSCalendar *calendar = [NSCalendar currentCalendar]; - NSDateComponents *comps = - [calendar components:NSCalendarUnitDay|NSCalendarUnitMonth - fromDate:[NSDate date]]; + NSCalendarUnit unit = + NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear; + NSDateComponents *comps = [calendar components:unit fromDate:[NSDate date]]; + NSString *key = [NSString stringWithFormat:@"%02ld%02ld", comps.month, comps.day]; - if (!data[key]) + if (!data[key]) // No matching treat. + return; + + NSString *stamp = [NSString stringWithFormat:@"%ld%02ld%02ld", + comps.year, comps.month, comps.day]; + + // User has seen this treat today. + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + if ([[defaults objectForKey:kMPTreatLastSeenStampKey] isEqual:stamp]) return; + [defaults setObject:stamp forKey:kMPTreatLastSeenStampKey]; NSArray *components = @[NSTemporaryDirectory(), key]; - NSString *path = [NSString pathWithComponents:components]; - [data[key] writeToFile:path atomically:NO]; + NSURL *url = [NSURL fileURLWithPathComponents:components]; + [data[key] writeToURL:url atomically:NO]; // Make sure this is opened last and immediately visible. NSDocumentController *c = [NSDocumentController sharedDocumentController]; [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - [c openDocumentWithContentsOfURL:[NSURL fileURLWithPath:path] - display:YES completionHandler:nil]; + [c openDocumentWithContentsOfURL:url display:YES completionHandler:nil]; }]; } From 2bf5136b6352c8ba5c448ace536ebc12ddc83a5d Mon Sep 17 00:00:00 2001 From: Cedar McKay Date: Fri, 13 Feb 2015 11:43:22 -0800 Subject: [PATCH 050/439] Fix help.md syntax error, plus small improvements. Fix demonstration of markdown list syntax inside of block quotes. Improve explanation of lists. Clean up typos and make small changes following uranusjr's lead. --- MacDown/Resources/help.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index c6edfc28..01cf7f93 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -90,13 +90,14 @@ If the link text itself would make a good id, you can link [like this][] `[like #### Inline `![Alt Image Text](path/or/url/to.jpg "Optional Title")` #### Reference style -`![Alt Image Text][image id]` +`![Alt Image Text][image-id]` on it's own line elsewhere: -`[image id]: path/or/url/to.jpg "Optional Title"` +`[image-id]: path/or/url/to.jpg "Optional Title"` ### Lists +* Lists must be preceded by a blank line (or block element) * Unordered lists start each item with a `*` - `-` works too * Indent a level to make a nested list @@ -108,6 +109,7 @@ on it's own line elsewhere: Here is the code: ``` +* Lists must be preceded by a blank line (or block element) * Unordered lists start each item with a `*` - `-` works too * Indent a level to make a nested list @@ -122,13 +124,14 @@ Here is the code: ### Block Quote > Angle brackets `>` are used for block quotes. -Technically not every line needs to start with a `>` as long as +Technically not every line needs to start with a `>` as long as there are no empty lines between paragraphs. > Looks kinda ugly though. > > Block quotes can be nested. > > > Multiple Levels - +> > Most markdown syntaxes work inside block quotes. +> > * Lists > * [Links][arbitrary_id] > * Etc. @@ -137,15 +140,16 @@ Here is the code: ``` > Angle brackets `>` are used for block quotes. -Technically not every line needs to start with a `>` as long as +Technically not every line needs to start with a `>` as long as there are no empty lines between paragraphs. ->Looks kinda ugly though. +> Looks kinda ugly though. > > Block quotes can be nested. > > > Multiple Levels - -> Most markdown syntax keeps working even inside block quotes. +> +> Most markdown syntaxes work inside block quotes. +> > * Lists -> * [Links][id] +> * [Links][arbitrary_id] > * Etc. ``` From 5a2d68bad00f5706c9da2e9202ab08fd805db43d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 21 Feb 2015 03:58:48 +0800 Subject: [PATCH 051/439] Refactor extension processing to use built-in methods --- MacDown/Code/Document/MPDocument.m | 2 +- MacDown/Code/Extension/NSString+Lookup.h | 2 ++ MacDown/Code/Extension/NSString+Lookup.m | 5 ++++ .../MPEditorPreferencesViewController.m | 2 +- .../MPHtmlPreferencesViewController.m | 2 +- MacDown/Code/Utility/MPUtilities.h | 2 +- MacDown/Code/Utility/MPUtilities.m | 26 +++++++++---------- MacDownTests/MPStringLookupTests.m | 7 +++++ 8 files changed, 30 insertions(+), 18 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 48f86b7d..c32095e1 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -518,7 +518,7 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel { NSString *fileName = self.presumedFileName; - if (fileName) + if (fileName && ![fileName hasExtension:@"md"]) { fileName = [fileName stringByAppendingPathExtension:@"md"]; savePanel.nameFieldStringValue = fileName; diff --git a/MacDown/Code/Extension/NSString+Lookup.h b/MacDown/Code/Extension/NSString+Lookup.h index 365e41fd..f56374a7 100644 --- a/MacDown/Code/Extension/NSString+Lookup.h +++ b/MacDown/Code/Extension/NSString+Lookup.h @@ -19,4 +19,6 @@ - (id)frontMatter:(NSUInteger *)contentOffset; - (NSString *)titleString; +- (BOOL)hasExtension:(NSString *)extension; + @end diff --git a/MacDown/Code/Extension/NSString+Lookup.m b/MacDown/Code/Extension/NSString+Lookup.m index b9be9ea5..b8076451 100644 --- a/MacDown/Code/Extension/NSString+Lookup.m +++ b/MacDown/Code/Extension/NSString+Lookup.m @@ -109,4 +109,9 @@ - (NSString *)titleString return nil; } +- (BOOL)hasExtension:(NSString *)extension +{ + return [self.pathExtension isEqualToString:extension]; +} + @end \ No newline at end of file diff --git a/MacDown/Code/Preferences/MPEditorPreferencesViewController.m b/MacDown/Code/Preferences/MPEditorPreferencesViewController.m index c3713041..e1430d1c 100644 --- a/MacDown/Code/Preferences/MPEditorPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPEditorPreferencesViewController.m @@ -69,7 +69,7 @@ - (void)loadThemes NSArray *itemTitles = MPListEntriesForDirectory( kMPThemesDirectoryName, - MPFileNameHasSuffixProcessor(kMPThemeFileExtension) + MPFileNameHasExtensionProcessor(kMPThemeFileExtension) ); [self.themeSelect addItemWithTitle:@""]; diff --git a/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m b/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m index 7ad86c55..dcd59d04 100644 --- a/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m @@ -110,7 +110,7 @@ - (void)loadStylesheets NSArray *itemTitles = MPListEntriesForDirectory( kMPStylesDirectoryName, - MPFileNameHasSuffixProcessor(kMPStyleFileExtension) + MPFileNameHasExtensionProcessor(kMPStyleFileExtension) ); [self.stylesheetSelect addItemWithTitle:@""]; diff --git a/MacDown/Code/Utility/MPUtilities.h b/MacDown/Code/Utility/MPUtilities.h index 003bd1c4..21d8b722 100644 --- a/MacDown/Code/Utility/MPUtilities.h +++ b/MacDown/Code/Utility/MPUtilities.h @@ -21,7 +21,7 @@ NSArray *MPListEntriesForDirectory( ); // Block factory for MPListEntriesForDirectory -NSString *(^MPFileNameHasSuffixProcessor(NSString *suffix))(NSString *path); +NSString *(^MPFileNameHasExtensionProcessor(NSString *ext))(NSString *path); BOOL MPCharacterIsWhitespace(unichar character); BOOL MPCharacterIsNewline(unichar character); diff --git a/MacDown/Code/Utility/MPUtilities.m b/MacDown/Code/Utility/MPUtilities.m index 2b39c7bf..bada39bb 100644 --- a/MacDown/Code/Utility/MPUtilities.m +++ b/MacDown/Code/Utility/MPUtilities.m @@ -7,12 +7,13 @@ // #import "MPUtilities.h" +#import "NSString+Lookup.h" #import NSString * const kMPStylesDirectoryName = @"Styles"; -NSString * const kMPStyleFileExtension = @".css"; +NSString * const kMPStyleFileExtension = @"css"; NSString * const kMPThemesDirectoryName = @"Themes"; -NSString * const kMPThemeFileExtension = @".style"; +NSString * const kMPThemeFileExtension = @"style"; static NSString *MPDataRootDirectory() { @@ -68,17 +69,14 @@ return [items copy]; } -NSString *(^MPFileNameHasSuffixProcessor(NSString *suffix))(NSString *path) +NSString *(^MPFileNameHasExtensionProcessor(NSString *ext))(NSString *path) { id block = ^(NSString *absPath) { NSFileManager *manager = [NSFileManager defaultManager]; NSString *name = absPath.lastPathComponent; NSString *processed = nil; - if ([name hasSuffix:suffix] && [manager fileExistsAtPath:absPath]) - { - NSUInteger end = name.length - suffix.length; - processed = [name substringToIndex:end]; - } + if ([name hasExtension:ext] && [manager fileExistsAtPath:absPath]) + processed = name.stringByDeletingPathExtension; return processed; }; return block; @@ -111,16 +109,16 @@ BOOL MPStringIsNewline(NSString *str) { if (!name) return nil; - if (![name hasSuffix:kMPStyleFileExtension]) - name = [NSString stringWithFormat:@"%@%@", name, kMPStyleFileExtension]; + if (![name hasExtension:kMPStyleFileExtension]) + name = [name stringByAppendingPathExtension:kMPStyleFileExtension]; NSString *path = MPPathToDataFile(name, kMPStylesDirectoryName); return path; } NSString *MPThemePathForName(NSString *name) { - if (![name hasSuffix:kMPThemeFileExtension]) - name = [NSString stringWithFormat:@"%@%@", name, kMPThemeFileExtension]; + if (![name hasExtension:kMPThemeFileExtension]) + name = [name stringByAppendingPathExtension:kMPThemeFileExtension]; NSString *path = MPPathToDataFile(name, kMPThemesDirectoryName); return path; } @@ -128,8 +126,8 @@ BOOL MPStringIsNewline(NSString *str) NSURL *MPHighlightingThemeURLForName(NSString *name) { name = [NSString stringWithFormat:@"prism-%@", [name lowercaseString]]; - if ([name hasSuffix:@".css"]) - name = [name substringToIndex:name.length - 4]; + if ([name hasExtension:@"css"]) + name = name.stringByDeletingPathExtension; NSBundle *bundle = [NSBundle mainBundle]; NSURL *url = [bundle URLForResource:name withExtension:@"css" diff --git a/MacDownTests/MPStringLookupTests.m b/MacDownTests/MPStringLookupTests.m index ab54b5de..ec96a51e 100644 --- a/MacDownTests/MPStringLookupTests.m +++ b/MacDownTests/MPStringLookupTests.m @@ -177,4 +177,11 @@ - (void)testTitleString XCTAssertNil(title, @"Incorrect title."); } +- (void)testHasExtension +{ + XCTAssertTrue([@"foo.css" hasExtension:@"css"], @"Wrong extension."); + XCTAssertTrue([@"foo.min.css" hasExtension:@"css"], @"Wrong extension."); + XCTAssertFalse([@"foo.csss" hasExtension:@"css"], @"Wrong extension."); +} + @end From dfc35e3924ff2f2ee9fcf9665287f3c44ebb6b33 Mon Sep 17 00:00:00 2001 From: Marc Date: Mon, 2 Mar 2015 14:11:31 +0100 Subject: [PATCH 052/439] Corrected Syntax highlighting for $ and $$ math mode --- Dependency/peg-markdown-highlight/pmh_grammar.leg | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Dependency/peg-markdown-highlight/pmh_grammar.leg b/Dependency/peg-markdown-highlight/pmh_grammar.leg index 7a224b67..7876b56d 100644 --- a/Dependency/peg-markdown-highlight/pmh_grammar.leg +++ b/Dependency/peg-markdown-highlight/pmh_grammar.leg @@ -390,6 +390,7 @@ Inline = Str | Endline | UlOrStarLine | Space + | Math | Strong | Emph | Image @@ -621,7 +622,7 @@ Nonspacechar = !Spacechar !Newline . Newline = '\n' | '\r' '\n'? Sp = Spacechar* Spnl = Sp (Newline Sp)? -SpecialChar = '*' | '_' | '`' | '&' | '[' | ']' | '(' | ')' | '<' | '!' | '#' | '\\' | '\'' | '"' | '~' | ExtendedSpecialChar +SpecialChar = '$' | '*' | '_' | '`' | '&' | '[' | ']' | '(' | ')' | '<' | '!' | '#' | '\\' | '\'' | '"' | '~' | ExtendedSpecialChar NormalChar = !( SpecialChar | Spacechar | Newline ) . # Not used anywhere in grammar: #NonAlphanumeric = [\000-\057\072-\100\133-\140\173-\177] @@ -675,6 +676,15 @@ InlineNote = &{ EXT(pmh_EXT_NOTES) } RawNoteBlock = ( !BlankLine OptionallyIndentedLine )+ ( BlankLine* ) + +# Addon for math +# either do nothing with math (pmh_NO_TYPE) or highlight it as code (pmh_CODE) +# so that there is no wrong highlighing within MATH +Math = Dollar1Math | Dollar2Math + +Dollar1Math = < "$" ( !'$' . )+ "$" > { ADD(elem(pmh_CODE)); } +Dollar2Math = < "$$" (!'$' .)+ "$$" > { ADD(elem(pmh_CODE)); } + %% From c343ee335ac6985898d30fe5001d10af936bb9ce Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Mar 2015 13:50:31 +0800 Subject: [PATCH 053/439] Update Prism to afb3cd5 Up to date as of 20150314 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 820001c8..afb3cd52 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 820001c85f4c5056f32d2e6b43cd1d98d98f3c03 +Subproject commit afb3cd528321e141b42b6bba015c70814d4ab38b From 8741e20f72ec0a8eefc9cc828edd6c1e99c3bb96 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Mar 2015 13:50:58 +0800 Subject: [PATCH 054/439] Data update --- MacDown/Resources/Data/treats.map | Bin 7022 -> 7287 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/MacDown/Resources/Data/treats.map b/MacDown/Resources/Data/treats.map index cec9559bd2cb05bd2b3dca88a5c3db678d567c83..5e5a20644bda4f4c5c15fa0841165eed7f951102 100644 GIT binary patch delta 315 zcmaE7_T54-sURn_xWvHV3L_IU3oDzI^+Z86{&nme!Xl#5Y6gZz#wMm_6J5+0c_&uS z)z=nUtf8sZz}~>oz`0mQSFeGqfxCgHfj7j!*w7?W&m}lMxFo+QHN?Qk(8OQh<78LK zZr1RO%#zf}=Oq(2TQbH-N}F563kdrK`<9j@Cgr5MWG0tn=I13ARW3HSoV-CwvEIfu zq$oeXq=AuvgF%o%ib0t{m%)g^oWYI3has3DnjwuLm!W{6h@pg`oS~ATnxU4ViJ_gL zk6|jqe1?S#iy2ljY+%^UaD?Fk!y|@g3_lnd8MzpF7)2Rn7!??m7*!b67_}I681)zp w7>yXs866qjn5?9nq$f+ykX|RfNqWDU^hN0_(l;5vfQb=8GuT0CC?$Ox0BE;MwEzGB delta 277 zcmexv@y<*zsURn_xWvHV3L_IU3oDzM`9wiA-ZktT!Xl#5YI^zxhDHR*3MPb z5?Z98*}&ewu}E8|fwO_Dfjd&qB{)8~B)=#%#K6eVWV01hjHI-&NxXotU$Ad!Nn%n? zs!L{aNoIatVo~K{W7EkSr4{QfEJKR&^Gg~S88{dO8KfAL8FU$p7|a=57`zw)86p`{ z7_u4i7z!AQ7)lw+87dj785$T`8G0BdGt6a}&#;hTIm0@JoeYN<&M`b-c*5|F;Xfk> zBNwAEqZFeoqdcP`qY9%MqXwfEqY0y>q@&a%sp(Q{r8Y|Kle!>vS?UG@gB$}8FfoEi MAh3c^FjDFk0J73SXaE2J From 2704d4eb985f100b0740fe8fb6da778d45783b06 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Mar 2015 13:55:02 +0800 Subject: [PATCH 055/439] Update name in credits --- MacDown/Localization/en.lproj/Credits.rtf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index 8507e080..f7fa7f31 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -61,7 +61,7 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt \f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ \pard\pardeftab720 -{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 \fs28 \cf0 \ From 15be97538208b8b5f7442f420854d4cd03c660b4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 14 Mar 2015 14:00:47 +0800 Subject: [PATCH 056/439] Update submodule URL to Prism --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 7bdfeb8f..b24c3265 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "Dependency/prism"] path = Dependency/prism - url = https://github.com/LeaVerou/prism.git + url = https://github.com/PrismJS/prism.git From 6187f5ac0953818f496103d509e22af579516277 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 15 Mar 2015 16:30:27 +0800 Subject: [PATCH 057/439] Add docstrings to clarify pref initialization usages --- MacDown/Code/Preferences/MPPreferences.m | 40 +++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 37d70929..5bdba869 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -155,29 +155,55 @@ - (void)cleanupObsoleteAutosaveValues [defaults removeObjectForKey:key]; } +/** Load app-default preferences on first launch. + * + * Preferences that need to be initialized manually are put here, and will be + * applied when the user launches MacDown the first time. + * + * Avoid putting preferences that doe not need initialization here. E.g. a + * boolean preference defaults to `NO` implicitly (because `nil.booleanValue` is + * `NO` in Objective-C), thus does not need initialization. + * + * Note that since this is called only when the user launches the app the first + * time, new preferences that breaks backward compatibility should NOT be put + * here. An example would be adding a boolean config to turn OFF an existing + * functionality. If you add the defualt-loading code here, existing users + * upgrading from an old version will not have this method invoked, thus + * effecting app behavior. + * + * @see -loadDefaultUserDefaults + */ - (void)loadDefaultPreferences { self.extensionIntraEmphasis = YES; self.extensionTables = YES; self.extensionFencedCode = YES; self.extensionFootnotes = YES; - self.editorBaseFontInfo = [NSDictionary dictionaryWithObjectsAndKeys: - kMPDefaultEditorFontName, kMPDefaultEditorFontNameKey, - @(kMPDefaultEditorFontPointSize), kMPDefaultEditorFontPointSizeKey, - nil]; + self.editorBaseFontInfo = @{ + kMPDefaultEditorFontNameKey: kMPDefaultEditorFontName, + kMPDefaultEditorFontPointSizeKey: @(kMPDefaultEditorFontPointSize), + }; self.editorStyleName = kMPDefaultEditorThemeName; self.editorHorizontalInset = kMPDefaultEditorHorizontalInset; self.editorVerticalInset = kMPDefaultEditorVerticalInset; self.editorLineSpacing = kMPDefaultEditorLineSpacing; self.editorSyncScrolling = kMPDefaultEditorSyncScrolling; - self.editorOnRight = NO; - self.editorShowWordCount = NO; - self.editorWordCountType = 0; self.htmlStyleName = kMPDefaultHtmlStyleName; self.htmlDefaultDirectoryUrl = [NSURL fileURLWithPath:NSHomeDirectory() isDirectory:YES]; } +/** Load default preferences when the app launches. + * + * Preferences that need to be initialized manually are put here, and will be + * applied when the user launches MacDown. + * + * This differs from -loadDefaultPreferences in that it is invoked *every time* + * MacDown is launched, making it suitable to perform backward-compatibility + * checks. + * + * @see -loadDefaultPreferences + */ - (void)loadDefaultUserDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; From 2b44a74b6dc91129bfcc85a656256060f94b220d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 15 Mar 2015 16:47:43 +0800 Subject: [PATCH 058/439] Put syntax aliases to data file Fix #309. --- MacDown.xcodeproj/project.pbxproj | 10 +++++++ MacDown/Code/Document/MPRenderer.m | 30 +++++++------------ .../Code/Extension/NSJSONSerialization+File.h | 16 ++++++++++ .../Code/Extension/NSJSONSerialization+File.m | 23 ++++++++++++++ MacDown/Resources/syntax_highlighting.json | 19 ++++++++++++ 5 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 MacDown/Code/Extension/NSJSONSerialization+File.h create mode 100644 MacDown/Code/Extension/NSJSONSerialization+File.m create mode 100644 MacDown/Resources/syntax_highlighting.json diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 9d91a845..c9b51d96 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -39,6 +39,8 @@ 1F3A47521953E84700293259 /* help.md in Resources */ = {isa = PBXBuildFile; fileRef = 1F3A47511953E84700293259 /* help.md */; }; 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */; }; 1F51C9A5194565050015A96F /* MPPreferencesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */; }; + 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F59491A1AB57C78007394CB /* syntax_highlighting.json */; }; + 1F59491E1AB57D87007394CB /* NSJSONSerialization+File.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */; }; 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F64CCC8195F5AB900CE619A /* MPAsset.m */; }; 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */; }; 1F8A82D919533E9300B6BF69 /* Prism in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A82D819533E9300B6BF69 /* Prism */; }; @@ -186,6 +188,9 @@ 1F3A47511953E84700293259 /* help.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = help.md; path = Resources/help.md; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; + 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; + 1F59491C1AB57D87007394CB /* NSJSONSerialization+File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+File.h"; sourceTree = ""; }; + 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+File.m"; sourceTree = ""; }; 1F64CCC7195F5AB900CE619A /* MPAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAsset.h; sourceTree = ""; }; 1F64CCC8195F5AB900CE619A /* MPAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAsset.m; sourceTree = ""; }; 1F70CCD81978F03E00703429 /* MPAutosaving.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAutosaving.h; sourceTree = ""; }; @@ -300,6 +305,8 @@ 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */, 1F2649AE1A7406DB00EF6AF3 /* NSDocumentController+Document.h */, 1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */, + 1F59491C1AB57D87007394CB /* NSJSONSerialization+File.h */, + 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */, 1FFEB3231972D88900B2254F /* NSObject+HTMLTabularize.h */, 1FFEB3241972D88900B2254F /* NSObject+HTMLTabularize.m */, 1F0D9D5E194AC7CF008E1856 /* NSString+Lookup.h */, @@ -390,6 +397,7 @@ 1F0D9DA6194AC8CB008E1856 /* Credits.rtf */, 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */, 1F3A47511953E84700293259 /* help.md */, + 1F59491A1AB57C78007394CB /* syntax_highlighting.json */, ); name = Resources; sourceTree = ""; @@ -744,6 +752,7 @@ 1FBDFEA51962A27300BEEA70 /* MPGeneralPreferencesViewController.xib in Resources */, 1F0F3BFC195F75F200FC0B3B /* MathJax in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, + 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */, 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, ); @@ -904,6 +913,7 @@ 1F0D9D7C194AC7F7008E1856 /* MPPreferences.m in Sources */, 1F0D9DAF194AC905008E1856 /* main.m in Sources */, 1F0D9D66194AC7CF008E1856 /* NSTextView+Autocomplete.m in Sources */, + 1F59491E1AB57D87007394CB /* NSJSONSerialization+File.m in Sources */, 1FFEB32B19737D6E00B2254F /* YAMLSerialization.m in Sources */, 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */, 1FFEB3251972D88900B2254F /* NSObject+HTMLTabularize.m in Sources */, diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 22d9fd1f..dc82c3dd 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -11,6 +11,7 @@ #import #import #import "hoedown_html_patch.h" +#import "NSJSONSerialization+File.h" #import "NSObject+HTMLTabularize.h" #import "NSString+Lookup.h" #import "MPUtilities.h" @@ -189,27 +190,16 @@ @interface MPRenderer () static NSDictionary *languageMap = nil; static dispatch_once_t token; dispatch_once(&token, ^{ - aliasMap = @{ - @"c++": @"cpp", - @"coffee": @"coffeescript", - @"coffee-script": @"coffeescript", - @"cs": @"csharp", - @"html": @"markup", - @"jl": @"julia", - @"js": @"javascript", - @"json": @"javascript", - @"objective-c": @"objectivec", - @"obj-c": @"objectivec", - @"objc": @"objectivec", - @"py": @"python", - @"rb": @"ruby", - @"sh": @"bash", - @"xml": @"markup", - }; - NSBundle *bundle = [NSBundle mainBundle]; - NSURL *url = [bundle URLForResource:@"components" withExtension:@"js" - subdirectory:@"Prism"]; + NSURL *url = [bundle URLForResource:@"syntax_highlighting" + withExtension:@"json"]; + NSDictionary *info = + [NSJSONSerialization JSONObjectFileAtURL:url options:0 error:NULL]; + + aliasMap = info[@"aliases"]; + + url = [bundle URLForResource:@"components" withExtension:@"js" + subdirectory:@"Prism"]; NSString *code = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:NULL]; diff --git a/MacDown/Code/Extension/NSJSONSerialization+File.h b/MacDown/Code/Extension/NSJSONSerialization+File.h new file mode 100644 index 00000000..233aa5ef --- /dev/null +++ b/MacDown/Code/Extension/NSJSONSerialization+File.h @@ -0,0 +1,16 @@ +// +// NSJSONSerialization+File.h +// MacDown +// +// Created by Tzu-ping Chung on 15/3. +// Copyright (c) 2015 Tzu-ping Chung . All rights reserved. +// + +#import + +@interface NSJSONSerialization (File) + ++ (id)JSONObjectFileAtURL:(NSURL *)url options:(NSJSONReadingOptions)opt + error:(NSError *__autoreleasing *)error; + +@end diff --git a/MacDown/Code/Extension/NSJSONSerialization+File.m b/MacDown/Code/Extension/NSJSONSerialization+File.m new file mode 100644 index 00000000..ce66d598 --- /dev/null +++ b/MacDown/Code/Extension/NSJSONSerialization+File.m @@ -0,0 +1,23 @@ +// +// NSJSONSerialization+File.m +// MacDown +// +// Created by Tzu-ping Chung on 15/3. +// Copyright (c) 2015 Tzu-ping Chung . All rights reserved. +// + +#import "NSJSONSerialization+File.h" + +@implementation NSJSONSerialization (File) + ++ (id)JSONObjectFileAtURL:(NSURL *)url options:(NSJSONReadingOptions)opt + error:(NSError *__autoreleasing *)error +{ + NSInputStream *stream = [NSInputStream inputStreamWithURL:url]; + [stream open]; + id obj = [self JSONObjectWithStream:stream options:opt error:error]; + [stream close]; + return obj; +} + +@end diff --git a/MacDown/Resources/syntax_highlighting.json b/MacDown/Resources/syntax_highlighting.json new file mode 100644 index 00000000..06dc2327 --- /dev/null +++ b/MacDown/Resources/syntax_highlighting.json @@ -0,0 +1,19 @@ +{ + "aliases": { + "c++": "cpp", + "coffee": "coffeescript", + "coffee-script": "coffeescript", + "cs": "csharp", + "html": "markup", + "jl": "julia", + "js": "javascript", + "json": "javascript", + "objective-c": "objectivec", + "obj-c": "objectivec", + "objc": "objectivec", + "py": "python", + "rb": "ruby", + "sh": "bash", + "xml": "markup" + } +} \ No newline at end of file From 65dcba5b7d5fbfcd2045281e4941fd48136c8ae3 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 16 Mar 2015 11:04:15 +0800 Subject: [PATCH 059/439] Disable live scroll notifications on OS X 10.8 NSScrollViewDidEndLiveScrollNotification is available only on 10.9 onwards. Will probably need to find another way to implement this in MacDown 0.4.5, but for now let's just perform version-sniffing as a stop-gap. Ref #241, close #311 --- MacDown/Code/Document/MPDocument.m | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c32095e1..82b53c81 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -399,9 +399,12 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller name:MPDidRequestEditorSetupNotification object:nil]; [center addObserver:self selector:@selector(didRequestPreviewReload:) name:MPDidRequestPreviewRenderNotification object:nil]; - [center addObserver:self selector:@selector(previewDidLiveScroll:) - name:NSScrollViewDidEndLiveScrollNotification - object:self.preview.enclosingScrollView]; + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber10_9) + { + [center addObserver:self selector:@selector(previewDidLiveScroll:) + name:NSScrollViewDidEndLiveScrollNotification + object:self.preview.enclosingScrollView]; + } self.wordsMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""]; From 25f90338cf31990cb9dae9ada9c5027fc7e91c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wei=C3=9F?= Date: Mon, 14 Jul 2014 17:39:06 +0200 Subject: [PATCH 060/439] Implement automatic preview scaling. This is based on the ratio between the user-defined editor font size and the default font size. --- MacDown.xcodeproj/project.pbxproj | 2 ++ MacDown/Code/Document/MPDocument.m | 27 +++++++++++++++++++ .../Extension/WebView+WebViewPrivateHeaders.h | 26 ++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 MacDown/Code/Extension/WebView+WebViewPrivateHeaders.h diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index c9b51d96..94cd2819 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -249,6 +249,7 @@ 1FFEB32919737D6E00B2254F /* YAMLSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YAMLSerialization.h; sourceTree = ""; }; 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YAMLSerialization.m; sourceTree = ""; }; 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLookupTests.m; sourceTree = ""; }; + 3D175F0F1974282400A5EFE8 /* WebView+WebViewPrivateHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WebView+WebViewPrivateHeaders.h"; sourceTree = ""; }; 481332E4A369446F177A8DF0 /* Pods-MacDown.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.release.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.release.xcconfig"; sourceTree = ""; }; 4AFCF7AEBCE081BD528ABC3D /* libPods-macdown-cmd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-macdown-cmd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 632F686FDE66C78EBA2ABB7B /* Pods-macdown-cmd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.debug.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.debug.xcconfig"; sourceTree = ""; }; @@ -313,6 +314,7 @@ 1F0D9D5F194AC7CF008E1856 /* NSString+Lookup.m */, 1F0D9D60194AC7CF008E1856 /* NSTextView+Autocomplete.h */, 1F0D9D61194AC7CF008E1856 /* NSTextView+Autocomplete.m */, + 3D175F0F1974282400A5EFE8 /* WebView+WebViewPrivateHeaders.h */, 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */, 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */, ); diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 82b53c81..e5042554 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -27,6 +27,7 @@ #import "MPEditorPreferencesViewController.h" #import "MPExportPanelAccessoryViewController.h" #import "MPMathJaxListener.h" +#import "WebView+WebViewPrivateHeaders.h" static NSString * const kMPRendersTOCPropertyKey = @"Renders TOC"; @@ -215,6 +216,7 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { // Store file content in initializer until nib is loaded. @property (copy) NSString *loadedString; +- (void)scaleWebview; - (void)syncScrollers; @end @@ -231,6 +233,7 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() } if (weakObj.preferences.editorSyncScrolling) { + [weakObj scaleWebview]; [weakObj syncScrollers]; } else @@ -1442,6 +1445,30 @@ - (void)redrawDivider } } +- (void)scaleWebview +{ + NSNumber *fontSizeNum = self.preferences.editorBaseFontInfo[@"size"]; + CFNumberRef fontSizeNumCF = (__bridge CFNumberRef)(fontSizeNum); + CGFloat fontSize; + CFNumberGetValue(fontSizeNumCF, kCFNumberCGFloatType, &fontSize); + + const CGFloat defaultSize = 12.0; + CGFloat scale = fontSize / defaultSize; + +#if 0 + // Sadly, this doesn’t work correctly. + // It looks fine, but selections are offset relative to the mouse cursor. + NSScrollView *previewScrollView = + self.preview.mainFrame.frameView.documentView.enclosingScrollView; + NSClipView *previewContentView = previewScrollView.contentView; + [previewContentView scaleUnitSquareToSize:NSMakeSize(scale, scale)]; + [previewContentView setNeedsDisplay:YES]; +#else + // Warning: this is private webkit API and NOT App Store-safe! + [self.preview setPageSizeMultiplier:scale]; +#endif +} + - (void)syncScrollers { NSRect contentBounds = [self.editor.enclosingScrollView.contentView bounds]; diff --git a/MacDown/Code/Extension/WebView+WebViewPrivateHeaders.h b/MacDown/Code/Extension/WebView+WebViewPrivateHeaders.h new file mode 100644 index 00000000..a6d511d0 --- /dev/null +++ b/MacDown/Code/Extension/WebView+WebViewPrivateHeaders.h @@ -0,0 +1,26 @@ +// +// WebView+WebViewPrivateHeaders.h +// MacDown +// +// Created by Jan on 14.07.14. +// Copyright (c) 2014 Tzu-ping Chung . All rights reserved. +// + +#import + +@interface WebView (WebViewPrivateHeaders) + +/*! + @method setPageSizeMultiplier: + @abstract Change the zoom factor of the page in views managed by this webView. + @param multiplier A fractional percentage value, 1.0 is 100%. + */ +- (void)setPageSizeMultiplier:(float)multiplier; + +/*! + @method pageSizeMultiplier + @result The page size multipler. + */ +- (float)pageSizeMultiplier; + +@end From 2fa8fc737474c7312bd4de6af478c252e7c6bc96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wei=C3=9F?= Date: Fri, 13 Feb 2015 16:00:27 +0100 Subject: [PATCH 061/439] Add previewZoomRelativeToBaseFontSize to preferences. --- MacDown/Code/Document/MPDocument.m | 3 +++ MacDown/Code/Preferences/MPPreferences.h | 2 ++ MacDown/Code/Preferences/MPPreferences.m | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index e5042554..74581b72 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1447,6 +1447,9 @@ - (void)redrawDivider - (void)scaleWebview { + if (!self.preferences.previewZoomRelativeToBaseFontSize) + return; + NSNumber *fontSizeNum = self.preferences.editorBaseFontInfo[@"size"]; CFNumberRef fontSizeNumCF = (__bridge CFNumberRef)(fontSizeNum); CGFloat fontSize; diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 0751ab37..9c8c8af3 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -54,6 +54,8 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) BOOL editorScrollsPastEnd; @property (assign) BOOL editorEnsuresNewlineAtEndOfFile; +@property (assign) BOOL previewZoomRelativeToBaseFontSize; + @property (assign) NSString *htmlStyleName; @property (assign) BOOL htmlDetectFrontMatter; @property (assign) BOOL htmlTaskList; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 5bdba869..bd1149d3 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -98,6 +98,8 @@ - (instancetype)init @dynamic editorScrollsPastEnd; @dynamic editorEnsuresNewlineAtEndOfFile; +@dynamic previewZoomRelativeToBaseFontSize; + @dynamic htmlStyleName; @dynamic htmlDetectFrontMatter; @dynamic htmlTaskList; @@ -213,6 +215,8 @@ - (void)loadDefaultUserDefaults self.editorAutoIncrementNumberedLists = YES; if (![defaults objectForKey:@"editorInsertPrefixInBlock"]) self.editorInsertPrefixInBlock = YES; + if (![defaults objectForKey:@"previewZoomRelativeToBaseFontSize"]) + self.previewZoomRelativeToBaseFontSize = NO; } @end From 757581a8a6d8a9f5dce67b9ec3c1d54c7f02c138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wei=C3=9F?= Date: Fri, 13 Feb 2015 18:43:14 +0100 Subject: [PATCH 062/439] Set defaultSize to 14. This was done to better match the editor and preview base font sizes. --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 74581b72..4918e364 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1455,7 +1455,7 @@ - (void)scaleWebview CGFloat fontSize; CFNumberGetValue(fontSizeNumCF, kCFNumberCGFloatType, &fontSize); - const CGFloat defaultSize = 12.0; + const CGFloat defaultSize = 14.0; CGFloat scale = fontSize / defaultSize; #if 0 From 789dfb67cace93933b7e5aa095ff5ebc362a2901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wei=C3=9F?= Date: Fri, 13 Feb 2015 18:56:38 +0100 Subject: [PATCH 063/439] Change the preview scale whenever editorBaseFontInfo changes. --- MacDown/Code/Document/MPDocument.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4918e364..e5bb82fe 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1336,6 +1336,11 @@ - (void)setupEditor:(NSString *)changedKey layer.backgroundColor = backgroundCGColor; self.editorContainer.layer = layer; } + + if ([changedKey isEqualToString:@"editorBaseFontInfo"]) + { + [self scaleWebview]; + } if (!changedKey || [changedKey isEqualToString:@"editorShowWordCount"]) { From ec9e7d2cec175d6a4b95ffcf595f8a43ff808c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wei=C3=9F?= Date: Mon, 23 Mar 2015 14:12:38 +0100 Subject: [PATCH 064/439] Remove setter call for editorInsertPrefixInBlock. --- MacDown/Code/Preferences/MPPreferences.m | 2 -- 1 file changed, 2 deletions(-) diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index bd1149d3..eadf5cc6 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -215,8 +215,6 @@ - (void)loadDefaultUserDefaults self.editorAutoIncrementNumberedLists = YES; if (![defaults objectForKey:@"editorInsertPrefixInBlock"]) self.editorInsertPrefixInBlock = YES; - if (![defaults objectForKey:@"previewZoomRelativeToBaseFontSize"]) - self.previewZoomRelativeToBaseFontSize = NO; } @end From 490190b2db77bacecdadcf0d0a7624ea46253ef9 Mon Sep 17 00:00:00 2001 From: Orta Therox Date: Sun, 5 Apr 2015 17:20:02 -0400 Subject: [PATCH 065/439] Use a gemfile to get around the CocoaPods bug --- Gemfile | 3 +++ Podfile.lock | 18 +++++++++--------- README.md | 7 ++++--- 3 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 Gemfile diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..139b965a --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source 'https://rubygems.org/' + +gem 'cocoapods', '0.34.4' diff --git a/Podfile.lock b/Podfile.lock index c703d863..1c002c12 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -21,14 +21,14 @@ DEPENDENCIES: - Sparkle (< 1.8) SPEC CHECKSUMS: - GBCli: 304718a0ff52cb39ea7ae1bcb3c4cb40c5a48c8d - handlebars-objc: ced98b23adddc7b3fbf7473fb40225255e53f591 - hoedown: d7b4579420f036df11884b55017bd38a67bcabb6 - JJPluralForm: 14142b5f85ac6abdc3a2cf45f1af61fe6559ea60 - LibYAML: d447960375d9114187bfddba6e6c24d69bff11f8 - M13OrderedDictionary: 17dd456dd096dc1de8f810b93d70ae964063e0ff - MASPreferences: 48debf3a161039bb979e617b7416bc07bd879f75 - PAPreferences: 3916ab2f4f332f0a9ed7d45c63dd628ea814a11c - Sparkle: fde5ffeb7bf01db28925499ce2a75977763af58a + GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 + handlebars-objc: df4f98f81cd380b1e6b19a9f7dacddac6b4c3bd8 + hoedown: 1a615272aa9b278b8497cda9e0b569d6b7580958 + JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd + LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 + M13OrderedDictionary: f16e52c6eaaff5c6042f91fa2dc959350246133f + MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 + PAPreferences: ba3f8d236c4c398b82bb0110cddd8546cd619770 + Sparkle: f107eed24a7d41bcd510be49ebb640d176f06bb9 COCOAPODS: 0.34.4 diff --git a/README.md b/README.md index c3509d27..e6c7ac95 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ You may also need to install Xcode’s command line tools with the following com xcode-select --install -> Note: Due to an [upstream bug](https://github.com/CocoaPods/CocoaPods/issues/2559), Xcode will fail to build certain dependencies if you use the latest version of CocoaPods (0.35 at the time of writing). To avoid the problem and build the project correctly, you need to install an older version of CocoaPods (0.34.4 is recommended), and use that to build the dependencies instead. See [comment in issue #220](https://github.com/uranusjr/macdown/issues/220#issuecomment-65014799) for detailed instructions. +> Note: Due to an [upstream bug](https://github.com/CocoaPods/CocoaPods/issues/2559), Xcode will fail to build certain dependencies if you use the latest version of CocoaPods (0.36+ at the time of writing). To avoid the problem we use a Gemfile to specify the version, and thus you should add `bundle exec` before running a CocoaPods command. An appropriate SDK should be bundled with Xcode 5 or later versions. @@ -54,14 +54,15 @@ After cloning the repository, run the following commands inside the repository r git submodule init git submodule update - pod install + bundle install + bundle exec pod install and open `MacDown.xcworkspace` in Xcode. The first command initialises the dependency submodule(s) used in MacDown; the second one installs dependencies managed by CocoaPods. Refer to the official guides of Git and CocoaPods if you need more instructions. If you run into build issues later on, try running the following commands to update dependencies: git submodule update - pod install + bundle exec pod install ## Discussion From 64ed0244bb3258ab4de6ee620478a992b78e5028 Mon Sep 17 00:00:00 2001 From: Andreas Hippler Date: Thu, 9 Apr 2015 01:26:09 +0200 Subject: [PATCH 066/439] Change the Editor View to not Horizontally resizing this fixes uranusjr/macdown#289 --- MacDown/Localization/Base.lproj/MPDocument.xib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 8d90316c..1f05ed82 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -43,7 +43,7 @@ - + From 6cd7660e2f3a8bc1ca792527245ab51776220250 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Apr 2015 22:49:01 +0800 Subject: [PATCH 067/439] Add toggle for previewZoomRelativeToBaseFontSize --- .../MPHtmlPreferencesViewController.xib | 65 +++++++++++-------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index cc8f8100..defeab0c 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -1,8 +1,8 @@ - + - + @@ -16,11 +16,11 @@ - + - + @@ -28,7 +28,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -57,14 +57,6 @@ - - - - - - - - @@ -79,7 +71,7 @@ - + @@ -101,7 +93,7 @@ - + @@ -112,18 +104,18 @@ - + @@ -141,7 +133,7 @@ + + + + + + + + + + + @@ -218,6 +230,7 @@ + @@ -227,7 +240,7 @@ - + From c2f9592b62f4974bc2a60416f139f7ad3e6a18d6 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Apr 2015 23:02:51 +0800 Subject: [PATCH 068/439] Specify bundler as dependency With #335 we're now using our own gemfile instead of the global CocoaPod executable. This is required for other commands to work. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e6c7ac95..d0c30369 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ If you wish to build MacDown yourself, you will need the following components/to * OS X SDK (10.8 or later) * Git -* [CocoaPods](http://cocoapods.org) +* [Bundler](http://bundler.io) You may also need to install Xcode’s command line tools with the following command: From 0bafcb74ea7126768cb861f89473f1f6402ff537 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Apr 2015 23:03:13 +0800 Subject: [PATCH 069/439] Preview zooming should always happen --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index e5bb82fe..f7b6311c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -231,9 +231,9 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() if (window.isFlushWindowDisabled) [window enableFlushWindow]; } + [weakObj scaleWebview]; if (weakObj.preferences.editorSyncScrolling) { - [weakObj scaleWebview]; [weakObj syncScrollers]; } else From c13617cc84f1cc63eca3de815dedcc44a186469c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Apr 2015 23:25:02 +0800 Subject: [PATCH 070/439] Add tipping instruction in README Close #337. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d0c30369..61abe160 100644 --- a/README.md +++ b/README.md @@ -73,3 +73,8 @@ Join our [Gitter channel](https://gitter.im/uranusjr/macdown?utm_source=share-li You can also [file an issue directly](https://github.com/uranusjr/macdown/issues/new) on GitHub if you prefer so. But please, **search first to make sure no-one has reported the same issue already** before opening one yourself. MacDown does not update in your computer immediately when we make changes, so something you experienced might be known, or even fixed in the development version. MacDown depends a lot on other open source projects, such as [Hoedown](https://github.com/hoedown/hoedown) for Markdown-to-HTML rendering, [Prism](http://prismjs.com) for syntax highlighting (in code blocks), and [PEG Markdown Highlight](https://github.com/ali-rantakari/peg-markdown-highlight) for editor highlighting. If you find problems when using those particular features, you can also consider reporting them directly to upstream projects as well as to MacDown’s issue tracker. I will do what I can if you report it here, but sometimes it can be more beneficial to interact with them directly. + +## Tipping + +If you find MacDown suitable for your needs, please consider [giving me a tip through PayPal](http://macdown.uranusjr.com/faq/#donation). Or, if you perfer to buy me a drink *personally* instead, just [send me a tweet](https://twitter.com/uranusjr) when you visit [Taipei, Taiwan](http://en.wikipedia.org/wiki/Taipei), where I live. I look forward to meeting you! + From 5de2c7bf18a7d3456f6ebb2fafb0381a72e6c742 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Apr 2015 23:44:22 +0800 Subject: [PATCH 071/439] Remove analyzer compile flags to silence warnings Removed -Xanalyzer -analyzer-disable-checker from compilation of * pmh_parser.c * HGMarkdownHighlighter.m --- MacDown.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 94cd2819..4d03c878 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -44,9 +44,9 @@ 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F64CCC8195F5AB900CE619A /* MPAsset.m */; }; 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */; }; 1F8A82D919533E9300B6BF69 /* Prism in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A82D819533E9300B6BF69 /* Prism */; }; - 1F8A835D1953454F00B6BF69 /* HGMarkdownHighlighter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A83581953454F00B6BF69 /* HGMarkdownHighlighter.m */; settings = {COMPILER_FLAGS = "-Xanalyzer -analyzer-disable-checker"; }; }; + 1F8A835D1953454F00B6BF69 /* HGMarkdownHighlighter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A83581953454F00B6BF69 /* HGMarkdownHighlighter.m */; }; 1F8A835E1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A835A1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m */; }; - 1F8A83621953461800B6BF69 /* pmh_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A83611953461800B6BF69 /* pmh_parser.c */; settings = {COMPILER_FLAGS = "-Wno-conversion -Xanalyzer -analyzer-disable-checker"; }; }; + 1F8A83621953461800B6BF69 /* pmh_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A83611953461800B6BF69 /* pmh_parser.c */; settings = {COMPILER_FLAGS = "-Wno-conversion"; }; }; 1F8A8364195346B200B6BF69 /* pmh_styleparser.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A8363195346B200B6BF69 /* pmh_styleparser.c */; settings = {COMPILER_FLAGS = "-Wno-conversion"; }; }; 1F9A14EC194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9A14E9194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m */; }; 1F9A14ED194EEE9900D1C6A9 /* MPMainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9A14EB194EEE9900D1C6A9 /* MPMainController.m */; }; From 8de59965f3590371f5fe621367b6271bc248a586 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 12 Apr 2015 01:22:45 +0800 Subject: [PATCH 072/439] Fix Travis script to use Bundle See #335 --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ce0f9e8b..910a7726 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: objective-c before_install: - - "gem install cocoapods --no-rdoc --no-ri --version 0.34.4" + - "gem install bundle" + - "bundle install" + - "bundle exec pod install" xcode_workspace: MacDown.xcworkspace xcode_scheme: MacDown From f2719365813336a6a9dc6f5148df4944c52eee35 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 12 Apr 2015 01:30:07 +0800 Subject: [PATCH 073/439] Override install to avoid dup CocoaPods execution --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 910a7726..1891137e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -before_install: +install: - "gem install bundle" - "bundle install" - "bundle exec pod install" From 41a4fe9045f7f1df5cd3c981a41337304baf6195 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 12 Apr 2015 01:34:42 +0800 Subject: [PATCH 074/439] Travis has Bundler already --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1891137e..4b5c1d79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: objective-c install: - - "gem install bundle" - "bundle install" - "bundle exec pod install" xcode_workspace: MacDown.xcworkspace From 3fce265a90cc278e64e3fb4b912422b9584ded5b Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 4 May 2015 17:49:59 +0800 Subject: [PATCH 075/439] Unindent size should be 4, like indentation Fix #347 --- MacDown/Code/Extension/NSTextView+Autocomplete.m | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m index de37cca8..48b7c61c 100644 --- a/MacDown/Code/Extension/NSTextView+Autocomplete.m +++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m @@ -404,17 +404,22 @@ - (void)unindentSelectedLines NSRange selectedRange = self.selectedRange; NSRange lineRange = [content lineRangeForRange:selectedRange]; + // Get the lines to unindent. NSString *toProcess = [content substringWithRange:lineRange]; NSArray *lines = [toProcess componentsSeparatedByString:@"\n"]; + + // This will hold the modified lines. NSMutableArray *modLines = [NSMutableArray arrayWithCapacity:lines.count]; - __block NSUInteger firstShift = 0; - __block NSUInteger totalShift = 0; + // Unindent the lines one by one, and put them in the new array. + __block NSUInteger firstShift = 0; // Indentation of the first line. + __block NSUInteger totalShift = 0; // Indents removed in total. [lines enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop) { NSString *line = obj; NSUInteger lineLength = line.length; NSUInteger shift = 0; - for (shift = 0; shift <= 4; shift++) + + for (shift = 0; shift < 4; shift++) { if (shift >= lineLength) break; @@ -431,9 +436,13 @@ - (void)unindentSelectedLines line = [line substringFromIndex:shift]; [modLines addObject:line]; }]; + + // Join the processed lines, and replace the original with them. NSString *processed = [modLines componentsJoinedByString:@"\n"]; [self insertText:processed replacementRange:lineRange]; + // Modify the selection range so that the same text (minus removed spaces) + // are selected. selectedRange.location -= firstShift; selectedRange.length -= totalShift - firstShift; self.selectedRange = selectedRange; From f55d8465f29a5d949c5e1b11e8df4ab345de4838 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 6 May 2015 11:14:31 +0800 Subject: [PATCH 076/439] Alias "sass" to scss This is not perfect, but is enough in a syntax highlighting context. Fix #369. --- MacDown/Resources/syntax_highlighting.json | 1 + 1 file changed, 1 insertion(+) diff --git a/MacDown/Resources/syntax_highlighting.json b/MacDown/Resources/syntax_highlighting.json index 06dc2327..1d46eb1b 100644 --- a/MacDown/Resources/syntax_highlighting.json +++ b/MacDown/Resources/syntax_highlighting.json @@ -13,6 +13,7 @@ "objc": "objectivec", "py": "python", "rb": "ruby", + "sass": "scss", "sh": "bash", "xml": "markup" } From a6de8b6e0c6f489bdee039aa01e9a3b90470d4c5 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 28 Jun 2015 22:09:48 +0800 Subject: [PATCH 077/439] Dependency upgrades Hoedown 3.0.3 M13OrderedDictionary 1.0.6 Sparkle 1.10.0 Fix #276 Fix #321 --- Podfile | 4 ++-- Podfile.lock | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Podfile b/Podfile index 20d85407..27e06d44 100644 --- a/Podfile +++ b/Podfile @@ -12,7 +12,7 @@ target "MacDown" do pod 'M13OrderedDictionary', '~> 1.0' pod 'MASPreferences', '~> 1.1' # Preference window. pod 'PAPreferences', '~> 0.4' # Preference singleton. - pod 'Sparkle', '< 1.8' # Updater. + pod 'Sparkle', '~> 1' # Updater. end target "MacDownTests" do @@ -20,5 +20,5 @@ target "MacDownTests" do end target "macdown-cmd" do - pod 'GBCli', '~> 1.0' + pod 'GBCli', '~> 1.1' end diff --git a/Podfile.lock b/Podfile.lock index 1c002c12..7f3e2d06 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,16 +1,18 @@ PODS: - GBCli (1.1) - handlebars-objc (1.3.0) - - hoedown (3.0.0) + - hoedown (3.0.3): + - hoedown/standard + - hoedown/standard (3.0.3) - JJPluralForm (2.1) - LibYAML (0.1.4) - - M13OrderedDictionary (1.0.5) + - M13OrderedDictionary (1.0.6) - MASPreferences (1.1.2) - PAPreferences (0.4) - - Sparkle (1.7.1) + - Sparkle (1.10.0) DEPENDENCIES: - - GBCli (~> 1.0) + - GBCli (~> 1.1) - handlebars-objc (~> 1.3) - hoedown (~> 3.0) - JJPluralForm (~> 2.1) @@ -18,17 +20,17 @@ DEPENDENCIES: - M13OrderedDictionary (~> 1.0) - MASPreferences (~> 1.1) - PAPreferences (~> 0.4) - - Sparkle (< 1.8) + - Sparkle (~> 1) SPEC CHECKSUMS: GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 handlebars-objc: df4f98f81cd380b1e6b19a9f7dacddac6b4c3bd8 - hoedown: 1a615272aa9b278b8497cda9e0b569d6b7580958 + hoedown: c1327bbbc96d269595ed86bf97f1d09867ec7529 JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 - M13OrderedDictionary: f16e52c6eaaff5c6042f91fa2dc959350246133f + M13OrderedDictionary: ca1bb2d743fd64500ffabee811d4bf2d0a65c908 MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 PAPreferences: ba3f8d236c4c398b82bb0110cddd8546cd619770 - Sparkle: f107eed24a7d41bcd510be49ebb640d176f06bb9 + Sparkle: c859bf5283b9f12aa45bceccf8e25ebb4c008eb2 COCOAPODS: 0.34.4 From 3cee9ae31a83a61b95253d7e46da5f5edc98fc49 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 28 Jun 2015 22:11:41 +0800 Subject: [PATCH 078/439] Update Prism to f28a3e0 Alias "sass" is removed in favour of the new sass syntax. --- Dependency/prism | 2 +- MacDown/Resources/syntax_highlighting.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Dependency/prism b/Dependency/prism index afb3cd52..f28a3e0a 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit afb3cd528321e141b42b6bba015c70814d4ab38b +Subproject commit f28a3e0ad676fb708aad917ac68b040118864db7 diff --git a/MacDown/Resources/syntax_highlighting.json b/MacDown/Resources/syntax_highlighting.json index 1d46eb1b..06dc2327 100644 --- a/MacDown/Resources/syntax_highlighting.json +++ b/MacDown/Resources/syntax_highlighting.json @@ -13,7 +13,6 @@ "objc": "objectivec", "py": "python", "rb": "ruby", - "sass": "scss", "sh": "bash", "xml": "markup" } From c0c32b192fee38e307bb70a57c3b653986d56e27 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 28 Jun 2015 23:26:25 +0800 Subject: [PATCH 079/439] Freeze Sparkle under 1.8 for compatibility --- Podfile | 2 +- Podfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Podfile b/Podfile index 27e06d44..07b46cf0 100644 --- a/Podfile +++ b/Podfile @@ -12,7 +12,7 @@ target "MacDown" do pod 'M13OrderedDictionary', '~> 1.0' pod 'MASPreferences', '~> 1.1' # Preference window. pod 'PAPreferences', '~> 0.4' # Preference singleton. - pod 'Sparkle', '~> 1' # Updater. + pod 'Sparkle', '< 1.8' # Updater. (Freeze under 1.8 until we can upgrade Cocoapods) end target "MacDownTests" do diff --git a/Podfile.lock b/Podfile.lock index 7f3e2d06..cea61e96 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -9,7 +9,7 @@ PODS: - M13OrderedDictionary (1.0.6) - MASPreferences (1.1.2) - PAPreferences (0.4) - - Sparkle (1.10.0) + - Sparkle (1.7.1) DEPENDENCIES: - GBCli (~> 1.1) @@ -20,7 +20,7 @@ DEPENDENCIES: - M13OrderedDictionary (~> 1.0) - MASPreferences (~> 1.1) - PAPreferences (~> 0.4) - - Sparkle (~> 1) + - Sparkle (< 1.8) SPEC CHECKSUMS: GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 @@ -31,6 +31,6 @@ SPEC CHECKSUMS: M13OrderedDictionary: ca1bb2d743fd64500ffabee811d4bf2d0a65c908 MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 PAPreferences: ba3f8d236c4c398b82bb0110cddd8546cd619770 - Sparkle: c859bf5283b9f12aa45bceccf8e25ebb4c008eb2 + Sparkle: f107eed24a7d41bcd510be49ebb640d176f06bb9 COCOAPODS: 0.34.4 From d897bef395c2b600025640014ca06b3ba2f11fff Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 26 Jul 2015 17:14:24 +0800 Subject: [PATCH 080/439] Always add "language-" class to code blocks This enables Prism to process all code blocks, regardless whether a language is specified. Blocks without a language are assigned "language-none" as recommended. This is a step toward resolution of #410, but will need upstream support to actually make Prism's plugins work with modified code blocks. --- MacDown/Code/Extension/hoedown_html_patch.c | 44 ++++++++++----------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c index d91b1709..2651b005 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.c +++ b/MacDown/Code/Extension/hoedown_html_patch.c @@ -23,34 +23,30 @@ void hoedown_patch_render_blockcode( { if (ob->size) hoedown_buffer_putc(ob, '\n'); - if (lang) - { - hoedown_html_renderer_state *state = data->opaque; - hoedown_html_renderer_state_extra *extra = state->opaque; + hoedown_html_renderer_state *state = data->opaque; + hoedown_html_renderer_state_extra *extra = state->opaque; - hoedown_buffer *mapped = NULL; - if (extra->language_addition) - mapped = extra->language_addition(lang, extra->owner); + hoedown_buffer *mapped = NULL; + if (lang && extra->language_addition) + mapped = extra->language_addition(lang, extra->owner); - HOEDOWN_BUFPUTSL(ob, "flags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS) - HOEDOWN_BUFPUTSL(ob, " class=\"line-numbers\""); - HOEDOWN_BUFPUTSL(ob, ">data, mapped->size, 0); - hoedown_buffer_free(mapped); - } - else - { - hoedown_escape_html(ob, lang->data, lang->size, 0); - } - HOEDOWN_BUFPUTSL(ob, "\">"); - } + HOEDOWN_BUFPUTSL(ob, "flags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS) + HOEDOWN_BUFPUTSL(ob, " class=\"line-numbers\""); + HOEDOWN_BUFPUTSL(ob, ">data, mapped->size, 0); + hoedown_buffer_free(mapped); + } else { - HOEDOWN_BUFPUTSL(ob, "
");
-	}
+        if (lang)
+            hoedown_escape_html(ob, lang->data, lang->size, 0);
+        else
+            HOEDOWN_BUFPUTSL(ob, "none");
+    }
+    HOEDOWN_BUFPUTSL(ob, "\">");
 
 	if (text)
     {

From cd913be34c9b3d38c15b8310cee50aceb1b1945e Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 26 Jul 2015 17:44:16 +0800
Subject: [PATCH 081/439] Ignore href to current pewview page

Fix #412
---
 MacDown/Code/Document/MPDocument.m | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m
index f7b6311c..336aa2ba 100644
--- a/MacDown/Code/Document/MPDocument.m
+++ b/MacDown/Code/Document/MPDocument.m
@@ -804,12 +804,20 @@ - (void)webView:(WebView *)webView
     switch ([information[WebActionNavigationTypeKey] integerValue])
     {
         case WebNavigationTypeLinkClicked:
-            if (![self isCurrentBaseUrl:request.URL])
+            // If the target is exactly as the current one, ignore.
+            if ([self.currentBaseUrl isEqual:request.URL])
+            {
+                [listener ignore];
+                return;
+            }
+            // If this is a different page, intercept and handle ourselves.
+            else if (![self isCurrentBaseUrl:request.URL])
             {
                 [listener ignore];
                 [self openOrCreateFileForUrl:request.URL];
                 return;
             }
+            // Otherwise this is somewhere else on the same page. Jump there.
             break;
         default:
             break;

From 61e4a736d56dad38d31a70caeb7a5fac5daa0835 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 26 Jul 2015 21:57:32 +0800
Subject: [PATCH 082/439] Always indent line on cmd-tab

Extra boundary checks added to take care of empty line situations.
Fix #402.
---
 MacDown/Code/Extension/NSTextView+Autocomplete.m | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m
index 48b7c61c..30a8b043 100644
--- a/MacDown/Code/Extension/NSTextView+Autocomplete.m
+++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m
@@ -384,17 +384,15 @@ - (void)indentSelectedLinesWithPadding:(NSString *)padding
     [lines enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop) {
         NSString *line = obj;
         if (line.length)
-        {
             totalShift += paddingLength;
-            line = [padding stringByAppendingString:line];
-        }
-        [modLines addObject:line];
+        [modLines addObject:[padding stringByAppendingString:line]];
     }];
     NSString *processed = [modLines componentsJoinedByString:@"\n"];
     [self insertText:processed replacementRange:lineRange];
 
     selectedRange.location += paddingLength;
-    selectedRange.length += totalShift - paddingLength;
+    selectedRange.length +=
+        (totalShift > paddingLength) ? totalShift - paddingLength : 0;
     self.selectedRange = selectedRange;
 }
 

From 472b94d6d1e1963ee069a99a87b0649872a14a84 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 26 Jul 2015 22:28:22 +0800
Subject: [PATCH 083/439] Open files directly if there's a running instance

Not running -> Persist the URLs temporarily, and launch the app.
               (The current solution.)
Running     -> Open directly. (New solution.)

Fix #392.
---
 macdown-cmd/main.m | 44 +++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m
index 5feebc13..21c40583 100644
--- a/macdown-cmd/main.m
+++ b/macdown-cmd/main.m
@@ -12,6 +12,36 @@
 #import "MPGlobals.h"
 #import "MPArgumentProcessor.h"
 
+
+NSRunningApplication *MPRunningMacDownInstance()
+{
+    NSArray *runningInstances = [NSRunningApplication
+        runningApplicationsWithBundleIdentifier:kMPApplicationSuiteName];
+    return runningInstances.firstObject;
+}
+
+
+void MPCollectForRunningMacDown(NSSet *urls)
+{
+    NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
+    for (NSString *url in urls)
+    {
+        NSString *path = [NSURL URLWithString:url].path;
+        [workspace openFile:path withApplication:kMPApplicationName];
+    }
+}
+
+
+void MPCollectForUnlaunchedMacDown(NSSet *urls)
+{
+    NSUserDefaults *defaults =
+        [[NSUserDefaults alloc] initWithSuiteNamed:kMPApplicationSuiteName];
+    [defaults setObject:urls.allObjects forKey:@"filesToOpenOnNextLaunch"
+           inSuiteNamed:kMPApplicationSuiteName];
+    [defaults synchronize];
+}
+
+
 int main(int argc, const char * argv[])
 {
     @autoreleasepool
@@ -34,11 +64,15 @@ int main(int argc, const char * argv[])
             NSURL *url = [NSURL URLWithString:argument relativeToURL:pwdUrl];
             [urls addObject:url.absoluteString];
         }
-        NSUserDefaults *defaults =
-            [[NSUserDefaults alloc] initWithSuiteNamed:kMPApplicationSuiteName];
-        [defaults setObject:urls.allObjects forKey:@"filesToOpenOnNextLaunch"
-               inSuiteNamed:kMPApplicationSuiteName];
-        [defaults synchronize];
+
+        // If the application is running, open all files with the first running
+        // instance. Otherwise save the file URLs, and start the app (saved URLs
+        // will be opened when the app launches).
+        NSRunningApplication *instance = MPRunningMacDownInstance();
+        if (instance)
+            MPCollectForRunningMacDown(urls);
+        else
+            MPCollectForUnlaunchedMacDown(urls);
 
         // Launch MacDown.
         [[NSWorkspace sharedWorkspace] launchApplication:@"MacDown"];

From 4d988889a970a0464037f8e1392609fe7ab69d49 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 26 Jul 2015 22:36:41 +0800
Subject: [PATCH 084/439] Remove redundant indentation on last line

Previously, if the selection includes the trailing newline, the line
*after* the selection will be indented, which is not correct.

Introduced in 61e4a73.
---
 MacDown/Code/Extension/NSTextView+Autocomplete.m | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m
index 30a8b043..19956647 100644
--- a/MacDown/Code/Extension/NSTextView+Autocomplete.m
+++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m
@@ -387,6 +387,11 @@ - (void)indentSelectedLinesWithPadding:(NSString *)padding
             totalShift += paddingLength;
         [modLines addObject:[padding stringByAppendingString:line]];
     }];
+    if ([modLines.lastObject isEqualToString:padding])
+    {
+        [modLines removeLastObject];
+        [modLines addObject:@""];
+    }
     NSString *processed = [modLines componentsJoinedByString:@"\n"];
     [self insertText:processed replacementRange:lineRange];
 

From 8291dd4ec6d62f2866b3d2cb047837a8ef0c7397 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 26 Jul 2015 22:41:11 +0800
Subject: [PATCH 085/439] Insert blockquote prefix for blank lines too

Similar logic to blank-line indentation. See 61e4a73 and 4d98888.

Fix #383.

Side effect: This patch also make list item insertion work with
empty lines - a backward-incompatible behaviAoural change. But this
seems to be what people want, so let's roll with it for now. We can
always change this later if reports appear.
---
 MacDown/Code/Extension/NSTextView+Autocomplete.m | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m
index 19956647..db785adb 100644
--- a/MacDown/Code/Extension/NSTextView+Autocomplete.m
+++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m
@@ -339,15 +339,18 @@ - (void)toggleBlockWithPattern:(NSString *)pattern prefix:(NSString *)prefix
     [lines enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop) {
         NSString *line = obj;
         if (line.length)
-        {
             totalShift += prefixLength;
-            if (!isMarked)
-                line = [prefix stringByAppendingString:line];
-            else
-                line = [line substringFromIndex:prefixLength];
-        }
+        if (!isMarked)
+            line = [prefix stringByAppendingString:line];
+        else
+            line = [line substringFromIndex:prefixLength];
         [modLines addObject:line];
     }];
+    if ([modLines.lastObject isEqualToString:prefix])
+    {
+        [modLines removeLastObject];
+        [modLines addObject:@""];
+    }
     NSString *processed = [modLines componentsJoinedByString:@"\n"];
     [self insertText:processed replacementRange:lineRange];
 

From 7561e7c31c86ea68f5910a1beb2ffa7a8610f828 Mon Sep 17 00:00:00 2001
From: Tzu-ping Chung 
Date: Sun, 26 Jul 2015 22:59:00 +0800
Subject: [PATCH 086/439] Add class to outmost TOC UL tag to support styling

Fix #381.
---
 MacDown/Code/Document/MPRenderer.m          | 10 +++++-
 MacDown/Code/Extension/hoedown_html_patch.c | 40 +++++++++++++++++++++
 MacDown/Code/Extension/hoedown_html_patch.h |  4 +++
 3 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m
index dc82c3dd..d814ff5f 100644
--- a/MacDown/Code/Document/MPRenderer.m
+++ b/MacDown/Code/Document/MPRenderer.m
@@ -248,6 +248,14 @@ @interface MPRenderer ()
     return htmlRenderer;
 }
 
+static hoedown_renderer *MPCreateHTMLTOCRenderer()
+{
+    hoedown_renderer *tocRenderer =
+        hoedown_html_toc_renderer_new(kMPRendererTOCLevel);
+    tocRenderer->header = hoedown_patch_render_toc_header;
+    return tocRenderer;
+}
+
 static void MPFreeHTMLRenderer(hoedown_renderer *htmlRenderer)
 {
     hoedown_html_renderer_state_extra *extra =
@@ -435,7 +443,7 @@ - (void)parse
     hoedown_renderer *htmlRenderer = MPCreateHTMLRenderer(self);
     hoedown_renderer *tocRenderer = NULL;
     if (hasTOC)
-        tocRenderer = hoedown_html_toc_renderer_new(kMPRendererTOCLevel);
+        tocRenderer = MPCreateHTMLTOCRenderer();
     self.currentHtml = MPHTMLFromMarkdown(
         markdown, extensions, smartypants, [frontMatter HTMLTable],
         htmlRenderer, tocRenderer);
diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c
index 2651b005..791d70ee 100644
--- a/MacDown/Code/Extension/hoedown_html_patch.c
+++ b/MacDown/Code/Extension/hoedown_html_patch.c
@@ -116,3 +116,43 @@ void hoedown_patch_render_listitem(
 	}
 	HOEDOWN_BUFPUTSL(ob, "\n");
 }
+
+// Adds a "toc" class to the outmost UL element to support TOC styling.
+void hoedown_patch_render_toc_header(
+    hoedown_buffer *ob, const hoedown_buffer *content, int level,
+    const hoedown_renderer_data *data)
+{
+    hoedown_html_renderer_state *state = data->opaque;
+
+    if (level <= state->toc_data.nesting_level) {
+        /* set the level offset if this is the first header
+         * we're parsing for the document */
+        if (state->toc_data.current_level == 0)
+            state->toc_data.level_offset = level - 1;
+
+        level -= state->toc_data.level_offset;
+
+        if (level > state->toc_data.current_level) {
+            while (level > state->toc_data.current_level) {
+                if (state->toc_data.current_level == 0)
+                    HOEDOWN_BUFPUTSL(ob, "
    \n
  • \n"); + else + HOEDOWN_BUFPUTSL(ob, "
      \n
    • \n"); + state->toc_data.current_level++; + } + } else if (level < state->toc_data.current_level) { + HOEDOWN_BUFPUTSL(ob, "
    • \n"); + while (level < state->toc_data.current_level) { + HOEDOWN_BUFPUTSL(ob, "
    \n
  • \n"); + state->toc_data.current_level--; + } + HOEDOWN_BUFPUTSL(ob,"
  • \n"); + } else { + HOEDOWN_BUFPUTSL(ob,"
  • \n
  • \n"); + } + + hoedown_buffer_printf(ob, "", state->toc_data.header_count++); + if (content) hoedown_buffer_put(ob, content->data, content->size); + HOEDOWN_BUFPUTSL(ob, "\n"); + } +} diff --git a/MacDown/Code/Extension/hoedown_html_patch.h b/MacDown/Code/Extension/hoedown_html_patch.h index d2d7f5de..eafb4b68 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.h +++ b/MacDown/Code/Extension/hoedown_html_patch.h @@ -31,4 +31,8 @@ void hoedown_patch_render_listitem( hoedown_buffer *ob, const hoedown_buffer *text, hoedown_list_flags flags, const hoedown_renderer_data *data); +void hoedown_patch_render_toc_header( + hoedown_buffer *ob, const hoedown_buffer *content, int level, + const hoedown_renderer_data *data); + #endif From ad02621a21184600745fda3f296233e4a3c10991 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 29 Jul 2015 08:40:56 +0800 Subject: [PATCH 087/439] Make sure asset type returns something Even text/plain is better than nil, which crashes apps. We can deal with non-applied assets later. At least now we will know exactly what asset is causing the problem. Fix #344. --- MacDown/Code/Document/MPAsset.m | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPAsset.m b/MacDown/Code/Document/MPAsset.m index 0b7b3245..4e3d92ff 100644 --- a/MacDown/Code/Document/MPAsset.m +++ b/MacDown/Code/Document/MPAsset.m @@ -11,6 +11,7 @@ #import "MPUtilities.h" +NSString * const kMPPlainType = @"text/plain"; NSString * const kMPCSSType = @"text/css"; NSString * const kMPJavaScriptType = @"text/javascript"; NSString * const kMPMathJaxConfigType = @"text/x-mathjax-config"; @@ -18,12 +19,24 @@ @interface MPAsset () @property (strong) NSURL *url; -@property (copy) NSString *typeName; +@property (copy, nonatomic) NSString *typeName; +@property (readonly) NSString *defaultTypeName; @end @implementation MPAsset +- (NSString *)typeName +{ + return _typeName ? _typeName : self.defaultTypeName; +} + +- (NSString *)defaultTypeName +{ + return kMPPlainType; +} + + + (instancetype)assetWithURL:(NSURL *)url andType:(NSString *)typeName { return [[self alloc] initWithURL:url andType:typeName]; @@ -41,7 +54,7 @@ - (instancetype)initWithURL:(NSURL *)url andType:(NSString *)typeName - (instancetype)init { - return [self initWithURL:nil andType:@"text/plain"]; + return [self initWithURL:nil andType:nil]; } - (NSString *)templateForOption:(MPAssetOption)option @@ -92,6 +105,11 @@ - (NSString *)htmlForOption:(MPAssetOption)option @implementation MPStyleSheet +- (NSString *)defaultTypeName +{ + return kMPCSSType; +} + + (instancetype)CSSWithURL:(NSURL *)url { return [super assetWithURL:url andType:kMPCSSType]; @@ -125,6 +143,11 @@ - (NSString *)templateForOption:(MPAssetOption)option @implementation MPScript +- (NSString *)defaultTypeName +{ + return kMPJavaScriptType; +} + + (instancetype)javaScriptWithURL:(NSURL *)url { return [super assetWithURL:url andType:kMPJavaScriptType]; From b1a827b0a0f14ab1e5a253db10df41baa8969b14 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 29 Jul 2015 08:54:02 +0800 Subject: [PATCH 088/439] Add tests for default asset types --- MacDownTests/MPAssetTests.m | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/MacDownTests/MPAssetTests.m b/MacDownTests/MPAssetTests.m index 35536ed2..4782541b 100644 --- a/MacDownTests/MPAssetTests.m +++ b/MacDownTests/MPAssetTests.m @@ -9,6 +9,12 @@ #import #import "MPAsset.h" + +@interface MPAsset () +@property (readonly, nonatomic) NSString *typeName; +@end + + @interface MPAssetTests : XCTestCase @property (strong) NSBundle *bundle; @end @@ -22,6 +28,18 @@ - (void)setUp self.bundle = [NSBundle bundleForClass:[self class]]; } +- (void)testDefaultAssetType +{ + MPAsset *asset = [[MPAsset alloc] init]; + XCTAssertEqualObjects(asset.typeName, @"text/plain"); + + MPStyleSheet *css = [[MPStyleSheet alloc] init]; + XCTAssertEqualObjects(css.typeName, @"text/css"); + + MPScript *script = [[MPScript alloc] init]; + XCTAssertEqualObjects(script.typeName, @"text/javascript"); +} + - (void)testAssetNone { XCTAssertNil([[[MPScript alloc] init] htmlForOption:MPAssetNone], From dcc2ee220abae7504c1f0b978df9eca1e16f94e5 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 10 Aug 2015 23:04:08 +0800 Subject: [PATCH 089/439] Update Prism to be57365 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index f28a3e0a..be573654 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit f28a3e0ad676fb708aad917ac68b040118864db7 +Subproject commit be573654d869d0d534bc41f549df7030e5703006 From 7cf8f3df5a17aa28fb5ea5770aeed6a0f82cf4a8 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 13 Aug 2015 16:55:15 +0800 Subject: [PATCH 090/439] Update Prism to 956cd85 Fix #410. --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index be573654..956cd85c 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit be573654d869d0d534bc41f549df7030e5703006 +Subproject commit 956cd85cd50964ebef3ec45e0d1d4d1e635cb77d From b102bcdc1250c9bd8f8de5a137a689e378f2cb8a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 13:05:28 +0800 Subject: [PATCH 091/439] Also process empty lines in block syntax toggle Make behaviour consistent with 61e4a73, 4d98888 and 8291dd4. --- .../Code/Extension/NSTextView+Autocomplete.m | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m index db785adb..f46623cf 100644 --- a/MacDown/Code/Extension/NSTextView+Autocomplete.m +++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m @@ -314,17 +314,21 @@ - (void)toggleBlockWithPattern:(NSString *)pattern prefix:(NSString *)prefix NSRange lineRange = [content lineRangeForRange:selectedRange]; NSString *toProcess = [content substringWithRange:lineRange]; + BOOL hasTrailingNewline = NO; + if ([toProcess hasSuffix:@"\n"]) + { + toProcess = [content substringToIndex:(toProcess.length - 1)]; + hasTrailingNewline = YES; + } + NSArray *lines = [toProcess componentsSeparatedByString:@"\n"]; BOOL isMarked = YES; for (NSString *line in lines) { - NSUInteger lineLength = line.length; - if (!lineLength) - continue; NSRange matchRange = [regex rangeOfFirstMatchInString:line options:0 - range:NSMakeRange(0, lineLength)]; + range:NSMakeRange(0, line.length)]; if (matchRange.location == NSNotFound) { isMarked = NO; @@ -346,12 +350,10 @@ - (void)toggleBlockWithPattern:(NSString *)pattern prefix:(NSString *)prefix line = [line substringFromIndex:prefixLength]; [modLines addObject:line]; }]; - if ([modLines.lastObject isEqualToString:prefix]) - { - [modLines removeLastObject]; - [modLines addObject:@""]; - } + NSString *processed = [modLines componentsJoinedByString:@"\n"]; + if (hasTrailingNewline) + processed = [NSString stringWithFormat:@"%@\n", processed]; [self insertText:processed replacementRange:lineRange]; if (!isMarked) From 39799ac6158852ae75cf21826e131fc5388a9ab8 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 13:32:03 +0800 Subject: [PATCH 092/439] Fix unindent for backtab and backward delete Fix #413. --- MacDown/Code/Document/MPDocument.m | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 336aa2ba..c702c77a 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -640,6 +640,8 @@ - (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector { if (commandSelector == @selector(insertTab:)) return ![self textViewShouldInsertTab:textView]; + else if (commandSelector == @selector(insertBacktab:)) + return ![self textViewShouldInsertBacktab:textView]; else if (commandSelector == @selector(insertNewline:)) return ![self textViewShouldInsertNewline:textView]; else if (commandSelector == @selector(deleteBackward:)) @@ -685,6 +687,12 @@ - (BOOL)textViewShouldInsertTab:(NSTextView *)textView return YES; } +- (BOOL)textViewShouldInsertBacktab:(NSTextView *)textView +{ + [self unindent:nil]; + return NO; +} + - (BOOL)textViewShouldInsertNewline:(NSTextView *)textView { if ([textView insertMappedContent]) @@ -703,15 +711,16 @@ - (BOOL)textViewShouldInsertNewline:(NSTextView *)textView - (BOOL)textViewShouldDeleteBackward:(NSTextView *)textView { + NSRange selectedRange = textView.selectedRange; if (self.preferences.editorCompleteMatchingCharacters) { - NSUInteger location = self.editor.selectedRange.location; + NSUInteger location = selectedRange.location; if ([textView deleteMatchingCharactersAround:location]) return NO; } - if (self.preferences.editorConvertTabs) + if (self.preferences.editorConvertTabs && !selectedRange.length) { - NSUInteger location = self.editor.selectedRange.location; + NSUInteger location = selectedRange.location; if ([textView unindentForSpacesBefore:location]) return NO; } From a05e3383836a0408d52278d8d540cbb0325ad7c7 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 13:44:47 +0800 Subject: [PATCH 093/439] Make table of contents a global preference Fix #360. --- MacDown/Code/Document/MPDocument.h | 2 - MacDown/Code/Document/MPDocument.m | 38 +------- MacDown/Code/Preferences/MPPreferences.h | 1 + MacDown/Code/Preferences/MPPreferences.m | 1 + .../MPHtmlPreferencesViewController.xib | 91 +++++++++++-------- MacDown/Localization/Base.lproj/MainMenu.xib | 10 +- 6 files changed, 57 insertions(+), 86 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.h b/MacDown/Code/Document/MPDocument.h index e6bf9efc..7528d890 100644 --- a/MacDown/Code/Document/MPDocument.h +++ b/MacDown/Code/Document/MPDocument.h @@ -14,6 +14,4 @@ @property (nonatomic, readonly) MPPreferences *preferences; -- (IBAction)toggleTOCRendering:(id)sender; - @end diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c702c77a..6a9043a2 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -30,7 +30,6 @@ #import "WebView+WebViewPrivateHeaders.h" -static NSString * const kMPRendersTOCPropertyKey = @"Renders TOC"; static NSString * const kMPDefaultAutosaveName = @"Untitled"; @@ -76,14 +75,6 @@ return keys; } -NS_INLINE NSString *MPAutosavePropertyKey( - id object, NSString *propertyName) -{ - NSString *className = NSStringFromClass([object class]); - return [NSString stringWithFormat:@"%@ %@ %@", className, propertyName, - object.autosaveName]; -} - NS_INLINE NSString *MPRectStringForAutosaveName(NSString *name) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; @@ -201,7 +192,6 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property BOOL shouldHandleBoundsChange; @property BOOL isPreviewReady; @property (strong) NSURL *currentBaseUrl; -@property (nonatomic) BOOL rendersTOC; @property (readonly) BOOL previewVisible; @property (readonly) BOOL editorVisible; @property CGFloat lastPreviewScrollTop; @@ -310,19 +300,6 @@ - (void)setAutosaveName:(NSString *)autosaveName self.splitView.autosaveName = autosaveName; } -- (BOOL)rendersTOC -{ - NSString *key = MPAutosavePropertyKey(self, kMPRendersTOCPropertyKey); - BOOL value = [[NSUserDefaults standardUserDefaults] boolForKey:key]; - return value; -} - -- (void)setRendersTOC:(BOOL)rendersTOC -{ - NSString *key = MPAutosavePropertyKey(self, kMPRendersTOCPropertyKey); - [[NSUserDefaults standardUserDefaults] setBool:rendersTOC forKey:key]; -} - #pragma mark - Override @@ -617,11 +594,6 @@ - (BOOL)validateUserInterfaceItem:(id)item NSLocalizedString(@"Restore Editor Pane", @"Toggle editor pane menu item"); } - else if (action == @selector(toggleTOCRendering:)) - { - NSInteger state = self.rendersTOC ? NSOnState : NSOffState; - ((NSMenuItem *)item).state = state; - } return result; } @@ -890,7 +862,7 @@ - (BOOL)rendererHasSmartyPants:(MPRenderer *)renderer - (BOOL)rendererRendersTOC:(MPRenderer *)renderer { - return self.rendersTOC; + return self.preferences.htmlRendersTOC; } - (NSString *)rendererStyleName:(MPRenderer *)renderer @@ -1291,14 +1263,6 @@ - (IBAction)render:(id)sender [self.renderer parseAndRenderLater]; } -- (IBAction)toggleTOCRendering:(id)sender -{ - BOOL nextState = NO; - if ([sender state] == NSOffState) - nextState = YES; - self.rendersTOC = nextState; -} - #pragma mark - Private diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 9c8c8af3..d11cedfd 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -66,6 +66,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) NSString *htmlHighlightingThemeName; @property (assign) BOOL htmlLineNumbers; @property (assign) NSURL *htmlDefaultDirectoryUrl; +@property (assign) BOOL htmlRendersTOC; // Calculated values. @property (nonatomic, assign) NSFont *editorBaseFont; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index eadf5cc6..d6101367 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -110,6 +110,7 @@ - (instancetype)init @dynamic htmlDefaultDirectoryUrl; @dynamic htmlHighlightingThemeName; @dynamic htmlLineNumbers; +@dynamic htmlRendersTOC; // Private preference. @dynamic editorBaseFontInfo; diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index defeab0c..b1b8aae4 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -1,8 +1,8 @@ - + - + @@ -16,11 +16,11 @@ - + - + @@ -28,7 +28,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -57,21 +57,8 @@ - - - - - - - public.folder - - - - - - - + @@ -93,7 +80,7 @@ - + @@ -104,7 +91,7 @@ - + @@ -133,7 +120,7 @@ + + - + @@ -193,7 +203,6 @@ - @@ -202,6 +211,7 @@ + @@ -233,14 +243,17 @@ + + + - + diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index 62c23b37..cf98540c 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -370,12 +370,6 @@ - - - - - - From 9f2293edbb31543651bb6e1d95f326eed090420a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 17:17:06 +0800 Subject: [PATCH 094/439] Implement show-language and a custom info variant Fix #421. For the "custom" variant, syntax os implemented as: ~~~lang:info code goes here... ~~~ The resulted HTML output:
        code goes here...
    
    --- MacDown/Code/Document/MPDocument.m | 7 + MacDown/Code/Document/MPRenderer.h | 9 + MacDown/Code/Document/MPRenderer.m | 61 ++++-- MacDown/Code/Extension/hoedown_html_patch.c | 47 +++- MacDown/Code/Extension/hoedown_html_patch.h | 1 + MacDown/Code/Preferences/MPPreferences.h | 2 + MacDown/Code/Preferences/MPPreferences.m | 1 + .../MPHtmlPreferencesViewController.xib | 202 ++++++++++-------- .../Resources/Extensions/show-information.css | 16 ++ 9 files changed, 237 insertions(+), 109 deletions(-) create mode 100644 MacDown/Resources/Extensions/show-information.css diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 6a9043a2..e40c566e 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -161,6 +161,8 @@ - (int)rendererFlags flags |= HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS; if (self.htmlHardWrap) flags |= HOEDOWN_HTML_HARD_WRAP; + if (self.htmlCodeBlockAccessory == MPCodeBlockAccessoryCustom) + flags |= HOEDOWN_HTML_BLOCKCODE_INFORMATION; return flags; } @end @@ -880,6 +882,11 @@ - (BOOL)rendererHasSyntaxHighlighting:(MPRenderer *)renderer return self.preferences.htmlSyntaxHighlighting; } +- (MPCodeBlockAccessoryType)rendererCodeBlockAccesory:(MPRenderer *)renderer +{ + return self.preferences.htmlCodeBlockAccessory; +} + - (BOOL)rendererHasMathJax:(MPRenderer *)renderer { return self.preferences.htmlMathJax; diff --git a/MacDown/Code/Document/MPRenderer.h b/MacDown/Code/Document/MPRenderer.h index de8928a7..52e2fc02 100644 --- a/MacDown/Code/Document/MPRenderer.h +++ b/MacDown/Code/Document/MPRenderer.h @@ -11,6 +11,14 @@ @protocol MPRendererDelegate; +typedef NS_ENUM(NSUInteger, MPCodeBlockAccessoryType) +{ + MPCodeBlockAccessoryNone = 0, + MPCodeBlockAccessoryLanguageName, + MPCodeBlockAccessoryCustom, +}; + + @interface MPRenderer : NSObject @property (nonatomic) int rendererFlags; @@ -48,6 +56,7 @@ - (NSString *)rendererStyleName:(MPRenderer *)renderer; - (BOOL)rendererDetectsFrontMatter:(MPRenderer *)renderer; - (BOOL)rendererHasSyntaxHighlighting:(MPRenderer *)renderer; +- (MPCodeBlockAccessoryType)rendererCodeBlockAccesory:(MPRenderer *)renderer; - (BOOL)rendererHasMathJax:(MPRenderer *)renderer; - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer; - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html; diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index d814ff5f..124bb0c4 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -28,6 +28,25 @@ static int kMPRendererTOCLevel = 6; // h1 to h6. +NS_INLINE NSURL *MPExtensionURL(NSString *name, NSString *extension) +{ + NSBundle *bundle = [NSBundle mainBundle]; + NSURL *url = [bundle URLForResource:name withExtension:extension + subdirectory:@"Extensions"]; + return url; +} + +NS_INLINE NSURL *MPPrismPluginURL(NSString *name, NSString *extension) +{ + NSBundle *bundle = [NSBundle mainBundle]; + NSString *dirPath = + [NSString stringWithFormat:@"%@/%@", kMPPrismPluginDirectory, name]; + NSString *filename = [NSString stringWithFormat:@"prism-%@", name]; + NSURL *url = [bundle URLForResource:filename withExtension:extension + subdirectory:dirPath]; + return url; +} + static NSArray *MPPrismScriptURLsForLanguage(NSString *language) { NSURL *baseUrl = nil; @@ -171,6 +190,7 @@ @interface MPRenderer () @property (copy) NSString *styleName; @property BOOL frontMatter; @property BOOL syntaxHighlighting; +@property MPCodeBlockAccessoryType codeBlockAccesory; @property BOOL lineNumbers; @property BOOL manualRender; @property (copy) NSString *highlightingThemeName; @@ -304,10 +324,13 @@ - (NSArray *)prismStylesheets if (self.rendererFlags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS) { - NSBundle *bundle = [NSBundle mainBundle]; - NSURL *url = [bundle URLForResource:@"line-numbers/prism-line-numbers" - withExtension:@"css" - subdirectory:kMPPrismPluginDirectory]; + NSURL *url = MPPrismPluginURL(@"line-numbers", @"css"); + [stylesheets addObject:[MPStyleSheet CSSWithURL:url]]; + } + if ([self.delegate rendererCodeBlockAccesory:self] + == MPCodeBlockAccessoryLanguageName) + { + NSURL *url = MPPrismPluginURL(@"show-language", @"css"); [stylesheets addObject:[MPStyleSheet CSSWithURL:url]]; } @@ -329,9 +352,13 @@ - (NSArray *)prismScripts if (self.rendererFlags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS) { - NSURL *url = - [bundle URLForResource:@"line-numbers/prism-line-numbers.min" - withExtension:@"js" subdirectory:kMPPrismPluginDirectory]; + NSURL *url = MPPrismPluginURL(@"line-numbers", @"js"); + [scripts addObject:[MPScript javaScriptWithURL:url]]; + } + if ([self.delegate rendererCodeBlockAccesory:self] + == MPCodeBlockAccessoryLanguageName) + { + NSURL *url = MPPrismPluginURL(@"show-language", @"js"); [scripts addObject:[MPScript javaScriptWithURL:url]]; } return scripts; @@ -342,8 +369,7 @@ - (NSArray *)mathjaxScripts NSMutableArray *scripts = [NSMutableArray array]; NSURL *url = [NSURL URLWithString:kMPMathJaxCDN]; NSBundle *bundle = [NSBundle mainBundle]; - MPEmbeddedScript *script = nil; - script = + MPEmbeddedScript *script = [MPEmbeddedScript assetWithURL:[bundle URLForResource:@"callback" withExtension:@"js" subdirectory:@"MathJax"] @@ -355,9 +381,17 @@ - (NSArray *)mathjaxScripts - (NSArray *)stylesheets { + id delegate = self.delegate; + NSMutableArray *stylesheets = [self.baseStylesheets mutableCopy]; - if ([self.delegate rendererHasSyntaxHighlighting:self]) + if ([delegate rendererHasSyntaxHighlighting:self]) [stylesheets addObjectsFromArray:self.prismStylesheets]; + + if ([delegate rendererCodeBlockAccesory:self] == MPCodeBlockAccessoryCustom) + { + NSURL *url = MPExtensionURL(@"show-information", @"css"); + [stylesheets addObject:[MPStyleSheet CSSWithURL:url]]; + } return stylesheets; } @@ -367,9 +401,7 @@ - (NSArray *)scripts NSMutableArray *scripts = [NSMutableArray array]; if (self.rendererFlags & HOEDOWN_HTML_USE_TASK_LIST) { - NSBundle *bundle = [NSBundle mainBundle]; - NSURL *url = [bundle URLForResource:@"tasklist" withExtension:@"js" - subdirectory:@"Extensions"]; + NSURL *url = MPExtensionURL(@"tasklist", @"js"); [scripts addObject:[MPScript javaScriptWithURL:url]]; } if ([d rendererHasSyntaxHighlighting:self]) @@ -472,6 +504,8 @@ - (void)renderIfPreferencesChanged else if (!MPAreNilableStringsEqual( [d rendererStyleName:self], self.styleName)) changed = YES; + else if ([d rendererCodeBlockAccesory:self] != self.codeBlockAccesory) + changed = YES; if (changed) [self render]; @@ -490,6 +524,7 @@ - (void)render self.styleName = [delegate rendererStyleName:self]; self.syntaxHighlighting = [delegate rendererHasSyntaxHighlighting:self]; self.highlightingThemeName = [delegate rendererHighlightingThemeName:self]; + self.codeBlockAccesory = [delegate rendererCodeBlockAccesory:self]; } - (NSString *)HTMLForExportWithStyles:(BOOL)withStyles diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c index 791d70ee..edd305d5 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.c +++ b/MacDown/Code/Extension/hoedown_html_patch.c @@ -13,6 +13,8 @@ #include "hoedown_html_patch.h" #define USE_XHTML(opt) (opt->flags & HOEDOWN_HTML_USE_XHTML) +#define USE_BLOCKCODE_INFORMATION(opt) \ + (opt->flags & HOEDOWN_HTML_BLOCKCODE_INFORMATION) #define USE_TASK_LIST(opt) (opt->flags & HOEDOWN_HTML_USE_TASK_LIST) // rndr_blockcode from HEAD. The "language-" prefix in class in needed to make @@ -26,26 +28,47 @@ void hoedown_patch_render_blockcode( hoedown_html_renderer_state *state = data->opaque; hoedown_html_renderer_state_extra *extra = state->opaque; + hoedown_buffer *front = NULL; + hoedown_buffer *back = NULL; + if (lang && USE_BLOCKCODE_INFORMATION(state)) + { + front = hoedown_buffer_new(lang->size); + back = hoedown_buffer_new(lang->size); + + hoedown_buffer *current = front; + for (size_t i = 0; i < lang->size; i++) + { + uint8_t c = lang->data[i]; + if (current == front && c == ':') + current = back; + else + hoedown_buffer_putc(current, c); + } + lang = front; + } + hoedown_buffer *mapped = NULL; if (lang && extra->language_addition) + { mapped = extra->language_addition(lang, extra->owner); + if (mapped) + lang = mapped; + } HOEDOWN_BUFPUTSL(ob, "flags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS) HOEDOWN_BUFPUTSL(ob, " class=\"line-numbers\""); - HOEDOWN_BUFPUTSL(ob, ">size) { - hoedown_escape_html(ob, mapped->data, mapped->size, 0); - hoedown_buffer_free(mapped); + HOEDOWN_BUFPUTSL(ob, " data-information=\""); + hoedown_buffer_put(ob, back->data, back->size); + HOEDOWN_BUFPUTSL(ob, "\""); } + HOEDOWN_BUFPUTSL(ob, ">size) + hoedown_escape_html(ob, lang->data, lang->size, 0); else - { - if (lang) - hoedown_escape_html(ob, lang->data, lang->size, 0); - else - HOEDOWN_BUFPUTSL(ob, "none"); - } + HOEDOWN_BUFPUTSL(ob, "none"); HOEDOWN_BUFPUTSL(ob, "\">"); if (text) @@ -59,6 +82,10 @@ void hoedown_patch_render_blockcode( } HOEDOWN_BUFPUTSL(ob, "
\n"); + + hoedown_buffer_free(mapped); + hoedown_buffer_free(front); + hoedown_buffer_free(back); } // Supports task list syntax if HOEDOWN_HTML_USE_TASK_LIST is on. diff --git a/MacDown/Code/Extension/hoedown_html_patch.h b/MacDown/Code/Extension/hoedown_html_patch.h index eafb4b68..159553ff 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.h +++ b/MacDown/Code/Extension/hoedown_html_patch.h @@ -11,6 +11,7 @@ static unsigned int HOEDOWN_HTML_USE_TASK_LIST = (1 << 4); static unsigned int HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS = (1 << 5); +static unsigned int HOEDOWN_HTML_BLOCKCODE_INFORMATION = (1 << 6); typedef struct hoedown_buffer hoedown_buffer; diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index d11cedfd..4db2b666 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -11,6 +11,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; + @interface MPPreferences : PAPreferences @property (assign) NSString *firstVersionInstalled; @@ -65,6 +66,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) BOOL htmlSyntaxHighlighting; @property (assign) NSString *htmlHighlightingThemeName; @property (assign) BOOL htmlLineNumbers; +@property (assign) NSInteger htmlCodeBlockAccessory; @property (assign) NSURL *htmlDefaultDirectoryUrl; @property (assign) BOOL htmlRendersTOC; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index d6101367..a279c2b8 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -110,6 +110,7 @@ - (instancetype)init @dynamic htmlDefaultDirectoryUrl; @dynamic htmlHighlightingThemeName; @dynamic htmlLineNumbers; +@dynamic htmlCodeBlockAccessory; @dynamic htmlRendersTOC; // Private preference. diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index b1b8aae4..56078120 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -16,11 +16,11 @@ - + - + @@ -28,7 +28,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -57,8 +57,29 @@ + + + + + + + public.folder + + + + + + + + + + + + + + - + @@ -80,10 +101,7 @@ - - - - + @@ -91,7 +109,7 @@ - + @@ -120,7 +138,7 @@ - - - + + + - - - public.folder - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/MacDown/Resources/Extensions/show-information.css b/MacDown/Resources/Extensions/show-information.css new file mode 100644 index 00000000..f90e554c --- /dev/null +++ b/MacDown/Resources/Extensions/show-information.css @@ -0,0 +1,16 @@ +pre[class*='language-'] { + position: relative; +} +pre[class*='language-'][data-information]::before { + content: attr(data-information); + color: black; + background-color: #CFCFCF; + display: inline-block; + position: absolute; + top: 0; + right: 0; + font-size: 0.9em; + border-radius: 0 0 0 5px; + padding: 0 0.5em; + text-shadow: none; +} \ No newline at end of file From 607bd146e92bee043899d4e3be73f9b7d71d2efc Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 17:39:04 +0800 Subject: [PATCH 095/439] Add some cool badges because why not --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 61abe160..bbca2940 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,10 @@ # MacDown +[![](https://img.shields.io/github/release/uranusjr/macdown.svg)](http://macdown.uranusjr.com/download/latest/) +![Total downloads](https://img.shields.io/github/downloads/uranusjr/macdown/latest/total.svg) [![Build Status](https://travis-ci.org/uranusjr/macdown.svg?branch=master)](https://travis-ci.org/uranusjr/macdown) + MacDown is an open source Markdown editor for OS X, released under the MIT License. The author stole the idea from [Chen Luo](https://twitter.com/chenluois)’s [Mou](http://mouapp.com) so that people can [make crappy clones](https://twitter.com/remaerd/status/484914820408279040). Visit the [project site](http://macdown.uranusjr.com/) for more information, or download [MacDown.app.zip](http://macdown.uranusjr.com/download/latest/) directly from the [latest releases](https://github.com/uranusjr/macdown/releases/latest) page. From 5bfed6cb3af04ffec49ae1a9cf617c75fdef5d1f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 18:56:29 +0800 Subject: [PATCH 096/439] Try to use minimized asset if possible --- MacDown/Code/Document/MPRenderer.m | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 124bb0c4..61238b5b 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -41,9 +41,16 @@ NSBundle *bundle = [NSBundle mainBundle]; NSString *dirPath = [NSString stringWithFormat:@"%@/%@", kMPPrismPluginDirectory, name]; - NSString *filename = [NSString stringWithFormat:@"prism-%@", name]; + + NSString *filename = [NSString stringWithFormat:@"prism-%@.min", name]; NSURL *url = [bundle URLForResource:filename withExtension:extension subdirectory:dirPath]; + if (url) + return url; + + filename = [NSString stringWithFormat:@"prism-%@", name]; + url = [bundle URLForResource:filename withExtension:extension + subdirectory:dirPath]; return url; } From 91062114e3ad036ecadb7e5d45e231e73af0f101 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 18:59:09 +0800 Subject: [PATCH 097/439] Make private functions NS_INLINE --- MacDown/Code/Document/MPRenderer.m | 18 +++++++++--------- .../MPHtmlPreferencesViewController.m | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 61238b5b..f018eb71 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -54,7 +54,7 @@ return url; } -static NSArray *MPPrismScriptURLsForLanguage(NSString *language) +NS_INLINE NSArray *MPPrismScriptURLsForLanguage(NSString *language) { NSURL *baseUrl = nil; NSURL *extraUrl = nil; @@ -88,7 +88,7 @@ return urls; } -static NSString *MPHTMLFromMarkdown( +NS_INLINE NSString *MPHTMLFromMarkdown( NSString *text, int flags, BOOL smartypants, NSString *frontMatter, hoedown_renderer *htmlRenderer, hoedown_renderer *tocRenderer) { @@ -139,7 +139,7 @@ return result; } -static NSString *MPGetHTML( +NS_INLINE NSString *MPGetHTML( NSString *title, NSString *body, NSArray *styles, MPAssetOption styleopt, NSArray *scripts, MPAssetOption scriptopt) { @@ -173,7 +173,7 @@ return html; } -static inline BOOL MPAreNilableStringsEqual(NSString *s1, NSString *s2) +NS_INLINE BOOL MPAreNilableStringsEqual(NSString *s1, NSString *s2) { // The == part takes care of cases where s1 and s2 are both nil. return ([s1 isEqualToString:s2] || s1 == s2); @@ -205,8 +205,8 @@ @interface MPRenderer () @end -static hoedown_buffer *language_addition(const hoedown_buffer *language, - void *owner) +NS_INLINE hoedown_buffer *language_addition( + const hoedown_buffer *language, void *owner) { MPRenderer *renderer = (__bridge MPRenderer *)owner; NSString *lang = [[NSString alloc] initWithBytes:language->data @@ -258,7 +258,7 @@ @interface MPRenderer () return mapped; } -static hoedown_renderer *MPCreateHTMLRenderer(MPRenderer *renderer) +NS_INLINE hoedown_renderer *MPCreateHTMLRenderer(MPRenderer *renderer) { int flags = renderer.rendererFlags; hoedown_renderer *htmlRenderer = hoedown_html_renderer_new( @@ -275,7 +275,7 @@ @interface MPRenderer () return htmlRenderer; } -static hoedown_renderer *MPCreateHTMLTOCRenderer() +NS_INLINE hoedown_renderer *MPCreateHTMLTOCRenderer() { hoedown_renderer *tocRenderer = hoedown_html_toc_renderer_new(kMPRendererTOCLevel); @@ -283,7 +283,7 @@ @interface MPRenderer () return tocRenderer; } -static void MPFreeHTMLRenderer(hoedown_renderer *htmlRenderer) +NS_INLINE void MPFreeHTMLRenderer(hoedown_renderer *htmlRenderer) { hoedown_html_renderer_state_extra *extra = ((hoedown_html_renderer_state *)htmlRenderer->opaque)->opaque; diff --git a/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m b/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m index dcd59d04..430a0bd9 100644 --- a/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m @@ -11,7 +11,7 @@ #import "MPPreferences.h" -static NSString *MPPrismDefaultThemeName() +NS_INLINE NSString *MPPrismDefaultThemeName() { return NSLocalizedString(@"(Default)", @"Prism theme title"); } From f3ccfc393cf25d1928011f504d1802b00b4cc35b Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 15 Aug 2015 19:05:43 +0800 Subject: [PATCH 098/439] More apt-named method --- MacDown/Code/Document/MPRenderer.m | 3 ++- MacDown/Code/Extension/NSJSONSerialization+File.h | 4 ++-- MacDown/Code/Extension/NSJSONSerialization+File.m | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index f018eb71..71d4a0b0 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -221,7 +221,8 @@ @interface MPRenderer () NSURL *url = [bundle URLForResource:@"syntax_highlighting" withExtension:@"json"]; NSDictionary *info = - [NSJSONSerialization JSONObjectFileAtURL:url options:0 error:NULL]; + [NSJSONSerialization JSONObjectWithFileAtURL:url options:0 + error:NULL]; aliasMap = info[@"aliases"]; diff --git a/MacDown/Code/Extension/NSJSONSerialization+File.h b/MacDown/Code/Extension/NSJSONSerialization+File.h index 233aa5ef..b3ba91aa 100644 --- a/MacDown/Code/Extension/NSJSONSerialization+File.h +++ b/MacDown/Code/Extension/NSJSONSerialization+File.h @@ -10,7 +10,7 @@ @interface NSJSONSerialization (File) -+ (id)JSONObjectFileAtURL:(NSURL *)url options:(NSJSONReadingOptions)opt - error:(NSError *__autoreleasing *)error; ++ (id)JSONObjectWithFileAtURL:(NSURL *)url options:(NSJSONReadingOptions)opt + error:(NSError *__autoreleasing *)error; @end diff --git a/MacDown/Code/Extension/NSJSONSerialization+File.m b/MacDown/Code/Extension/NSJSONSerialization+File.m index ce66d598..0924032f 100644 --- a/MacDown/Code/Extension/NSJSONSerialization+File.m +++ b/MacDown/Code/Extension/NSJSONSerialization+File.m @@ -10,8 +10,8 @@ @implementation NSJSONSerialization (File) -+ (id)JSONObjectFileAtURL:(NSURL *)url options:(NSJSONReadingOptions)opt - error:(NSError *__autoreleasing *)error ++ (id)JSONObjectWithFileAtURL:(NSURL *)url options:(NSJSONReadingOptions)opt + error:(NSError *__autoreleasing *)error { NSInputStream *stream = [NSInputStream inputStreamWithURL:url]; [stream open]; From 077e4d9af3529b076dae96389f252ffd2446f4fb Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 16 Aug 2015 00:20:55 +0800 Subject: [PATCH 099/439] Update reason why we use CocoaPods 0.35.x Even 0.37.x is still problematic. Sign. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bbca2940..c7004891 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ You may also need to install Xcode’s command line tools with the following com xcode-select --install -> Note: Due to an [upstream bug](https://github.com/CocoaPods/CocoaPods/issues/2559), Xcode will fail to build certain dependencies if you use the latest version of CocoaPods (0.36+ at the time of writing). To avoid the problem we use a Gemfile to specify the version, and thus you should add `bundle exec` before running a CocoaPods command. +> Note: Due to multiple upstream bugs, Xcode will fail to build certain dependencies if you use the CocoaPods 0.36.x ([reason](https://github.com/CocoaPods/CocoaPods/issues/2559)) or 0.37.x ([reason](https://github.com/Bertrand/handlebars-objc/issues/15)). To avoid the problem we use a Gemfile to specify the version, and thus you should add `bundle exec` before running a CocoaPods command. An appropriate SDK should be bundled with Xcode 5 or later versions. From 8de44f1cf2fc404b08ee748beda36039ef071c96 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 16 Aug 2015 13:19:51 +0800 Subject: [PATCH 100/439] Data upgrade --- MacDown/Resources/Data/treats.map | Bin 7287 -> 7684 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/MacDown/Resources/Data/treats.map b/MacDown/Resources/Data/treats.map index 5e5a20644bda4f4c5c15fa0841165eed7f951102..0c92f177dcadcb3d4d4121d05b2795101904cdee 100644 GIT binary patch delta 502 zcmexv(PAT*RFIQdTw-8wg^`Jwg_X_Dexjh7@Ol9Ob`D_?QE4?JV-r&|a|=tWiEd_$ z{1a>ETI&cc(a_Y=ZeVZVXy9z%TB56`Z_vQqz|+9nz}LVZVqj!w5@KLsXc=N)Y-kdx z=Mo$rT#{du>MzLXJK2-5d-6r8Lo7f}5s*_^pOl|csbHs2V3m_tT%wzwrdv{3kZP5f zR+3tzP|c+P1j+e%C8>EORticV=Jz!zS%U=&@{2P|GV}AS6cUq)^K(i|QX%3wscAr! zrUt4IZf;^xdS;$3L{!(%)S#dOB9R6(RJS;@iX+uZ!Po#OJb53Z7@JdOQAtM1XMlZvO2M-a6I347CjP42=wJ4BZTq7-ljo zW?0IwoMA1)7KZ%{Cm60UJY#sp@Q0C=k&jV;QIb)CQI%1hQIk=dQJ2w((S*^A(Sp&6 y(T35H(T&lYF_dW;iwvuPtc0GdtgNxDxvYz9m~5nM90M3IF+yktCnyc2WD@{v!GGxh delta 296 zcmZp%`EDVYRFIQdTw-8wg^`Jwg_X_9dZM5j|2lRKVG&VjH3LHSzls*3i^yU~k}P;9RVutJlEQz}>*pz#C#dMQXAD0W85y}4c^E|*Wf&D0l^9hR)flxHbr|&+4H%6W%^4jT-I%PToTMj9&yZdx dy-9k%n)F5KE7CU^z<`MnLNnMwX(%Oq8vxFWLL2}9 From 2c79d19818eafce4568e6ff065df2d99c9a8be32 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 16 Aug 2015 13:25:33 +0800 Subject: [PATCH 101/439] Use dot syntax if possible --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index e40c566e..0e3a1118 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1567,7 +1567,7 @@ - (void)openOrCreateFileForUrl:(NSURL *)url - (void)document:(NSDocument *)doc didPrint:(BOOL)ok context:(void *)context { if ([doc respondsToSelector:@selector(setPrinting:)]) - [(id)doc setPrinting:NO]; + ((MPDocument *)doc).printing = NO; if (context) { NSInvocation *invocation = (__bridge NSInvocation *)context; From 45d4e295fd154cc7c20474c6b22e7762aaf153cb Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 16 Aug 2015 13:33:05 +0800 Subject: [PATCH 102/439] Update Prism to ee463e8 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 956cd85c..ee463e8e 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 956cd85cd50964ebef3ec45e0d1d4d1e635cb77d +Subproject commit ee463e8e7b5522dfa09154b77c9cc1918afeee23 From 3f59837f948a56ea240d498ef2226e47272a0878 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 18:51:45 +0800 Subject: [PATCH 103/439] Upgrade to Xcode 7 --- .../project.pbxproj | 3 +- .../version/version.xcodeproj/project.pbxproj | 4 +- MacDown.xcodeproj/project.pbxproj | 7 ++- .../xcshareddata/xcschemes/MacDown.xcscheme | 19 ++++--- .../xcshareddata/MacDown.xcscmblueprint | 37 +++++++++++++ .../MPGeneralPreferencesViewController.xib | 53 ++++++++++--------- MacDown/MacDown-Info.plist | 2 +- MacDownTests/MacDownTests-Info.plist | 2 +- 8 files changed, 89 insertions(+), 38 deletions(-) create mode 100644 MacDown.xcworkspace/xcshareddata/MacDown.xcscmblueprint diff --git a/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj b/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj index 737a7db3..a0a05a38 100644 --- a/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj +++ b/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj @@ -50,7 +50,7 @@ 1F8A8367195348C500B6BF69 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0510; + LastUpgradeCheck = 0700; }; buildConfigurationList = 1F8A836A195348C500B6BF69 /* Build configuration list for PBXProject "peg-markdown-highlight" */; compatibilityVersion = "Xcode 3.2"; @@ -72,6 +72,7 @@ 1F8A8368195348C500B6BF69 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ENABLE_TESTABILITY = YES; ONLY_ACTIVE_ARCH = YES; }; name = Debug; diff --git a/Dependency/version/version.xcodeproj/project.pbxproj b/Dependency/version/version.xcodeproj/project.pbxproj index b901615c..e533a69d 100644 --- a/Dependency/version/version.xcodeproj/project.pbxproj +++ b/Dependency/version/version.xcodeproj/project.pbxproj @@ -40,7 +40,7 @@ 1FCD71091A20BA3A00C028B5 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0700; ORGANIZATIONNAME = uranusjr; TargetAttributes = { 1FCD710D1A20BA3A00C028B5 = { @@ -68,6 +68,7 @@ 1FCD710E1A20BA3A00C028B5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ENABLE_TESTABILITY = YES; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -118,6 +119,7 @@ 1FCD71121A20BA3A00C028B5 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 4d03c878..1d7f51c0 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -693,7 +693,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = MP; - LastUpgradeCheck = 0610; + LastUpgradeCheck = 0700; ORGANIZATIONNAME = "Tzu-ping Chung "; TargetAttributes = { 1FA6DE441941CC9E000409FB = { @@ -1095,6 +1095,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -1158,6 +1159,7 @@ GCC_PREFIX_HEADER = "MacDown/Code/MacDown-Prefix.pch"; INFOPLIST_FILE = "MacDown/MacDown-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_BUNDLE_IDENTIFIER = "com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower}"; PRODUCT_NAME = MacDown; SDKROOT = macosx; WRAPPER_EXTENSION = app; @@ -1174,6 +1176,7 @@ GCC_PREFIX_HEADER = "MacDown/Code/MacDown-Prefix.pch"; INFOPLIST_FILE = "MacDown/MacDown-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_BUNDLE_IDENTIFIER = "com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower}"; PRODUCT_NAME = MacDown; SDKROOT = macosx; WRAPPER_EXTENSION = app; @@ -1203,6 +1206,7 @@ "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug", ); MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_BUNDLE_IDENTIFIER = "com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower}"; PRODUCT_NAME = MacDownTests; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; @@ -1228,6 +1232,7 @@ "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug", ); MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_BUNDLE_IDENTIFIER = "com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower}"; PRODUCT_NAME = MacDownTests; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; diff --git a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme index f4364d15..a12214df 100644 --- a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme +++ b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme @@ -1,6 +1,6 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -48,17 +48,21 @@ ReferencedContainer = "container:MacDown.xcodeproj"> + + - + - + - + - + + @@ -19,7 +20,7 @@ - + @@ -39,17 +40,17 @@ - - - - + + + + - + @@ -146,24 +147,24 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 4204faad..bb3ef157 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -70,7 +70,7 @@ CFBundleIconFile CFBundleIdentifier - com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/MacDownTests/MacDownTests-Info.plist b/MacDownTests/MacDownTests-Info.plist index 633fa970..169b6f71 100644 --- a/MacDownTests/MacDownTests-Info.plist +++ b/MacDownTests/MacDownTests-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType From 53f3a46dba67e7461d76ea350167db8c19c2ed5f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 18:58:39 +0800 Subject: [PATCH 104/439] Fix unrecognized selector on NSNumber conversion --- MacDown/Code/Document/MPDocument.m | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 0e3a1118..db26da75 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1444,10 +1444,8 @@ - (void)scaleWebview return; NSNumber *fontSizeNum = self.preferences.editorBaseFontInfo[@"size"]; - CFNumberRef fontSizeNumCF = (__bridge CFNumberRef)(fontSizeNum); - CGFloat fontSize; - CFNumberGetValue(fontSizeNumCF, kCFNumberCGFloatType, &fontSize); - + CGFloat fontSize = fontSizeNum.doubleValue; + const CGFloat defaultSize = 14.0; CGFloat scale = fontSize / defaultSize; From bda57fd318f089f3dad96f0e5110e37c01a2172e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 19:08:32 +0800 Subject: [PATCH 105/439] Fix warnings in Xcode 7 --- MacDown/Code/Application/MPMainController.m | 5 +++-- MacDown/Code/Document/MPDocument.m | 5 +++-- MacDown/Code/Utility/MPUtilities.h | 7 +++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index a361e773..14680ad0 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -81,7 +81,8 @@ NS_INLINE void treat() // Make sure this is opened last and immediately visible. NSDocumentController *c = [NSDocumentController sharedDocumentController]; [[NSOperationQueue mainQueue] addOperationWithBlock:^{ - [c openDocumentWithContentsOfURL:url display:YES completionHandler:nil]; + [c openDocumentWithContentsOfURL:url display:YES + completionHandler:MPDocumentOpenCompletionEmpty]; }]; } @@ -215,7 +216,7 @@ - (void)openPendingFiles if ([url checkResourceIsReachableAndReturnError:NULL]) { [c openDocumentWithContentsOfURL:url display:YES - completionHandler:NULL]; + completionHandler:MPDocumentOpenCompletionEmpty]; } else { diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index db26da75..0462c33c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -170,7 +170,8 @@ - (int)rendererFlags @interface MPDocument () + MPAutosaving, MPRendererDataSource, MPRendererDelegate, + WebFrameLoadDelegate, WebPolicyDelegate> typedef NS_ENUM(NSUInteger, MPWordCountType) { MPWordCountTypeWord, @@ -1302,7 +1303,7 @@ - (void)setupEditor:(NSString *)changedKey self.editor.defaultParagraphStyle = [style copy]; self.editor.font = [self.preferences.editorBaseFont copy]; self.editor.textColor = nil; - self.editor.backgroundColor = nil; + self.editor.backgroundColor = [NSColor clearColor]; self.highlighter.styles = nil; [self.highlighter readClearTextStylesFromTextView]; diff --git a/MacDown/Code/Utility/MPUtilities.h b/MacDown/Code/Utility/MPUtilities.h index 21d8b722..a67da558 100644 --- a/MacDown/Code/Utility/MPUtilities.h +++ b/MacDown/Code/Utility/MPUtilities.h @@ -35,3 +35,10 @@ NSString *MPReadFileOfPath(NSString *path); NSDictionary *MPGetDataMap(NSString *name); id MPGetObjectFromJavaScript(NSString *code, NSString *variableName); + + +static void (^MPDocumentOpenCompletionEmpty)( + NSDocument *doc, BOOL wasOpen, NSError *error) = ^( + NSDocument *doc, BOOL wasOpen, NSError *error) { + +}; From 1f25df4b8667550dc8381378ab46e23843ec7cae Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 19:55:50 +0800 Subject: [PATCH 106/439] Fix builds on Xcode 7 --- Dependency/peg-markdown-highlight/Makefile | 6 ++++-- Dependency/version/Makefile | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Dependency/peg-markdown-highlight/Makefile b/Dependency/peg-markdown-highlight/Makefile index b50b48c8..2b183bd3 100644 --- a/Dependency/peg-markdown-highlight/Makefile +++ b/Dependency/peg-markdown-highlight/Makefile @@ -12,11 +12,13 @@ pmh_parser_core.c : pmh_grammar.leg $(GREG) pmh_parser.c : pmh_parser_core.c pmh_parser_head.c pmh_parser_foot.c tools/combine_parser_files.sh ./tools/combine_parser_files.sh > $@ -.PHONY: clean test +.PHONY: install clean distclean + +isntall: ALL clean: rm -f pmh_parser_core.c pmh_parser.c *.o; \ rm -rf *.dSYM; \ make -C $(GREGDIR) spotless -distclean: clean +distclean: clean \ No newline at end of file diff --git a/Dependency/version/Makefile b/Dependency/version/Makefile index b076ec8e..d4c4ebc3 100644 --- a/Dependency/version/Makefile +++ b/Dependency/version/Makefile @@ -3,7 +3,9 @@ ALL: version.h version.h: bash ../../Tools/generate_version_header.sh -.PHONY: ALL clean distclean +.PHONY: install clean distclean + +install: ALL clean: -rm version.h 2>/dev/null From 06cca8a564a57407d811811dac0e8db708e62859 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 20:09:45 +0800 Subject: [PATCH 107/439] Update Prism to 513137c Fix #441, #212, #189 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index ee463e8e..513137c7 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit ee463e8e7b5522dfa09154b77c9cc1918afeee23 +Subproject commit 513137c727083024874c447e039d5eb21dbd2759 From 68919ff6125716cdfd0bb70e9fe3a98ed31f92d3 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 20:12:58 +0800 Subject: [PATCH 108/439] Project file upgrading --- MacDown.xcodeproj/project.pbxproj | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 1d7f51c0..89d916b1 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -114,13 +114,14 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 905EF1A5196164CA00FC3CE9 /* CopyFiles */ = { + 905EF1A5196164CA00FC3CE9 /* Copy Files */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); + name = "Copy Files"; runOnlyForDeploymentPostprocessing = 1; }; 905EF1B6196164E300FC3CE9 /* Copy Command Line Utility */ = { @@ -673,8 +674,7 @@ 8354BB1F574EFC071D91C89B /* Check Pods Manifest.lock */, 905EF1A3196164CA00FC3CE9 /* Sources */, 905EF1A4196164CA00FC3CE9 /* Frameworks */, - 905EF1A5196164CA00FC3CE9 /* CopyFiles */, - 38BEB4F8BD690E8970217D44 /* Copy Pods Resources */, + 905EF1A5196164CA00FC3CE9 /* Copy Files */, ); buildRules = ( ); @@ -804,21 +804,6 @@ shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/plugins $TARGET\ncp -r $SOURCE/components.js $TARGET"; showEnvVarsInLog = 0; }; - 38BEB4F8BD690E8970217D44 /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 46C28C219A3C4CCD94797747 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From 20d812045a4abc95c2784f34340b3ea16a4890a7 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 28 Sep 2015 20:53:39 +0800 Subject: [PATCH 109/439] WebKit delegate protocols available only in 10.11+ --- MacDown/Code/Document/MPDocument.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 0462c33c..6b85c7e4 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -170,8 +170,10 @@ - (int)rendererFlags @interface MPDocument () +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101100 + WebFrameLoadDelegate, WebPolicyDelegate, +#endif + MPAutosaving, MPRendererDataSource, MPRendererDelegate> typedef NS_ENUM(NSUInteger, MPWordCountType) { MPWordCountTypeWord, From b58070222a33898fb5b91dfd27500c3410d4f124 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 29 Sep 2015 00:36:32 +0800 Subject: [PATCH 110/439] Convert Travis to Xcode 7 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4b5c1d79..ab7d4e9b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +osx_image: xcode7 language: objective-c install: - "bundle install" From b2896b09b372e8fb9868991c6489f651b459e466 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 30 Sep 2015 01:38:35 +0800 Subject: [PATCH 111/439] Be permissive when reading editor font size Ref #447. --- MacDown/Code/Document/MPDocument.m | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 6b85c7e4..dcd72f2d 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1445,12 +1445,13 @@ - (void)scaleWebview { if (!self.preferences.previewZoomRelativeToBaseFontSize) return; - - NSNumber *fontSizeNum = self.preferences.editorBaseFontInfo[@"size"]; - CGFloat fontSize = fontSizeNum.doubleValue; - const CGFloat defaultSize = 14.0; - CGFloat scale = fontSize / defaultSize; + id fontSizeObj = self.preferences.editorBaseFontInfo[@"size"]; + if (![fontSizeObj respondsToSelector:@selector(doubleValue)]) + return; + + static const CGFloat defaultSize = 14.0; + CGFloat scale = [fontSizeObj doubleValue] / defaultSize; #if 0 // Sadly, this doesn’t work correctly. From 1ba86c49457560d94bd8ba7da3ce06613d8e8c7e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 30 Sep 2015 01:45:56 +0800 Subject: [PATCH 112/439] Add comment explaining the -doubleValue usage --- MacDown/Code/Document/MPDocument.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index dcd72f2d..498b60f7 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1446,6 +1446,10 @@ - (void)scaleWebview if (!self.preferences.previewZoomRelativeToBaseFontSize) return; + // editorBaseFontInfo can be NSString or NSNumber. Fortunately both should + // work with -doubleValue. If it is something else, at least don't crash + // now. CGFloat is not double, but this should be close enough the users + // probably won't notice the difference. id fontSizeObj = self.preferences.editorBaseFontInfo[@"size"]; if (![fontSizeObj respondsToSelector:@selector(doubleValue)]) return; From ab14b28091877cad142f0e07febdcb8c21b92877 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 30 Sep 2015 01:54:44 +0800 Subject: [PATCH 113/439] Refactor editor font info getters into pref class --- MacDown/Code/Document/MPDocument.m | 10 +++------- MacDown/Code/Preferences/MPPreferences.h | 2 ++ MacDown/Code/Preferences/MPPreferences.m | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 498b60f7..4bc25634 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1446,16 +1446,12 @@ - (void)scaleWebview if (!self.preferences.previewZoomRelativeToBaseFontSize) return; - // editorBaseFontInfo can be NSString or NSNumber. Fortunately both should - // work with -doubleValue. If it is something else, at least don't crash - // now. CGFloat is not double, but this should be close enough the users - // probably won't notice the difference. - id fontSizeObj = self.preferences.editorBaseFontInfo[@"size"]; - if (![fontSizeObj respondsToSelector:@selector(doubleValue)]) + CGFloat fontSize = self.preferences.editorBaseFontSize; + if (fontSize <= 0.0) return; static const CGFloat defaultSize = 14.0; - CGFloat scale = [fontSizeObj doubleValue] / defaultSize; + CGFloat scale = fontSize / defaultSize; #if 0 // Sadly, this doesn’t work correctly. diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 4db2b666..3866463d 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -71,6 +71,8 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) BOOL htmlRendersTOC; // Calculated values. +@property (readonly) NSString *editorBaseFontName; +@property (readonly) CGFloat editorBaseFontSize; @property (nonatomic, assign) NSFont *editorBaseFont; - (instancetype)init; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index a279c2b8..5ff3e574 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -116,12 +116,21 @@ - (instancetype)init // Private preference. @dynamic editorBaseFontInfo; +- (NSString *)editorBaseFontName +{ + return [self.editorBaseFontInfo[kMPDefaultEditorFontNameKey] copy]; +} + +- (CGFloat)editorBaseFontSize +{ + NSDictionary *info = self.editorBaseFontInfo; + return [info[kMPDefaultEditorFontPointSizeKey] doubleValue]; +} + - (NSFont *)editorBaseFont { - NSDictionary *info = [self.editorBaseFontInfo copy]; - NSFont *font = [NSFont fontWithName:info[@"name"] - size:[info[@"size"] doubleValue]]; - return font; + return [NSFont fontWithName:self.editorBaseFontName + size:self.editorBaseFontSize]; } - (void)setEditorBaseFont:(NSFont *)font From e3d65acf2349acfe48ed975d3dd3e7bf2102f18b Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 30 Sep 2015 01:56:50 +0800 Subject: [PATCH 114/439] Use constants, not hard-coded keys --- MacDown/Code/Preferences/MPPreferences.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 5ff3e574..0e2b61b3 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -135,8 +135,10 @@ - (NSFont *)editorBaseFont - (void)setEditorBaseFont:(NSFont *)font { - NSDictionary *info = - @{@"name": font.fontName, @"size": @(font.pointSize)}; + NSDictionary *info = @{ + kMPDefaultEditorFontNameKey: font.fontName, + kMPDefaultEditorFontPointSizeKey: @(font.pointSize) + }; self.editorBaseFontInfo = info; } From 9bc25c7040fe67910166814ad2af3d6551b6c1a4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 1 Oct 2015 23:28:26 +0800 Subject: [PATCH 115/439] Remove unused CFBundleIconFile key from Info.plist --- MacDown/MacDown-Info.plist | 2 -- 1 file changed, 2 deletions(-) diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index bb3ef157..7398a2cd 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -67,8 +67,6 @@ CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleIconFile - CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion From 1e16897f356d5f81c4b9aa6e7d247b563ecdb8cd Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 1 Oct 2015 23:54:40 +0800 Subject: [PATCH 116/439] Ignore new hashed .o filenames --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 91dc81e1..5f8a14a3 100644 --- a/.gitignore +++ b/.gitignore @@ -178,6 +178,7 @@ Dependency/peg-markdown-highlight/pmh_parser_core.c Dependency/peg-markdown-highlight/pmh_parser.c Dependency/peg-markdown-highlight/*.o Dependency/peg-markdown-highlight/greg/*.o +Dependency/peg-markdown-highlight/greg/*.o-* Dependency/peg-markdown-highlight/greg/greg # Generated by build script From d5db85e19bccc4855f8037c4313adf9f8412a6f1 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 1 Oct 2015 23:55:19 +0800 Subject: [PATCH 117/439] Switch MathJax to HTTPS and add domain exceptions --- MacDown/Code/Document/MPRenderer.m | 2 +- MacDown/MacDown-Info.plist | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 71d4a0b0..33c06ff0 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -19,7 +19,7 @@ static NSString * const kMPMathJaxCDN = - @"http://cdn.mathjax.org/mathjax/latest/MathJax.js" + @"https://cdn.mathjax.org/mathjax/latest/MathJax.js" @"?config=TeX-AMS-MML_HTMLorMML"; static NSString * const kMPPrismScriptDirectory = @"Prism/components"; static NSString * const kMPPrismThemeDirectory = @"Prism/themes"; diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 7398a2cd..70dcc45d 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -127,5 +127,25 @@ + NSAppTransportSecurity + + NSExceptionDomains + + uranusjr.com + + NSIncludesSubdomains + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + mathjax.org + + NSIncludesSubdomains + + NSExceptionRequiresForwardSecrecy + + + + From f1e26238557c1a85b2f725d832ee848f485915be Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 3 Oct 2015 18:19:17 +0800 Subject: [PATCH 118/439] Upgrade Prism to 1ab4619 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 513137c7..1ab46199 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 513137c727083024874c447e039d5eb21dbd2759 +Subproject commit 1ab46199dbbf26bc15e32262a31ec494274ebb93 From 74c04167153f41556971b570c0dfce3db6204def Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 3 Oct 2015 18:30:34 +0800 Subject: [PATCH 119/439] Run codegen manually This used to be part of the build process, but Xcode 7 broke it. Until we can figure out another way... --- Tools/build_for_release.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Tools/build_for_release.py b/Tools/build_for_release.py index d4b991cc..012572f8 100755 --- a/Tools/build_for_release.py +++ b/Tools/build_for_release.py @@ -20,7 +20,8 @@ XCODEBUILD = '/usr/bin/xcodebuild' OSASCRIPT = '/usr/bin/osascript' -BUILD_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'Build') +ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +BUILD_DIR = os.path.join(ROOT_DIR, 'Build') APP_NAME = 'MacDown.app' ZIP_NAME = 'MacDown.app.zip' @@ -85,9 +86,13 @@ def main(argv): XCODEBUILD, 'clean', '-workspace', 'MacDown.xcworkspace', '-scheme', 'MacDown', ) - os.chdir(BUILD_DIR) + + print('Running external scripts...') + os.chdir(os.path.join(ROOT_DIR, 'Dependency', 'peg-markdown-highlight')) + execute('make') print('Building application archive...') + os.chdir(BUILD_DIR) output = execute( XCODEBUILD, 'archive', '-workspace', '../MacDown.xcworkspace', '-scheme', 'MacDown', From a017995876f15d190b2e48fada60acc9dc92c6ff Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 11 Oct 2015 14:11:02 +0900 Subject: [PATCH 120/439] Order collected documents in CLI --- macdown-cmd/main.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index 21c40583..ef707b7c 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -21,7 +21,7 @@ } -void MPCollectForRunningMacDown(NSSet *urls) +void MPCollectForRunningMacDown(NSOrderedSet *urls) { NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; for (NSString *url in urls) @@ -32,11 +32,11 @@ void MPCollectForRunningMacDown(NSSet *urls) } -void MPCollectForUnlaunchedMacDown(NSSet *urls) +void MPCollectForUnlaunchedMacDown(NSOrderedSet *urls) { NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteNamed:kMPApplicationSuiteName]; - [defaults setObject:urls.allObjects forKey:@"filesToOpenOnNextLaunch" + [defaults setObject:urls.array forKey:@"filesToOpenOnNextLaunch" inSuiteNamed:kMPApplicationSuiteName]; [defaults synchronize]; } @@ -58,7 +58,7 @@ int main(int argc, const char * argv[]) // be opened later. NSString *pwd = [NSFileManager defaultManager].currentDirectoryPath; NSURL *pwdUrl = [NSURL fileURLWithPath:pwd isDirectory:YES]; - NSMutableSet *urls = [NSMutableSet set]; + NSMutableOrderedSet *urls = [NSMutableOrderedSet orderedSet]; for (NSString *argument in argproc.arguments) { NSURL *url = [NSURL URLWithString:argument relativeToURL:pwdUrl]; From e51d19e8a0a1439086814948322d18d762f1547c Mon Sep 17 00:00:00 2001 From: John Muccigrosso Date: Thu, 15 Oct 2015 14:42:19 -0400 Subject: [PATCH 121/439] Allow for closing dots in YAML front matter. --- MacDown/Code/Extension/NSString+Lookup.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Extension/NSString+Lookup.m b/MacDown/Code/Extension/NSString+Lookup.m index b8076451..c6010eb2 100644 --- a/MacDown/Code/Extension/NSString+Lookup.m +++ b/MacDown/Code/Extension/NSString+Lookup.m @@ -54,9 +54,10 @@ - (NSArray *)matchesForPattern:(NSString *)p - (id)frontMatter:(NSUInteger *)contentOffset { + static NSString *pattern = @"^-{3}\n(.*?\n)((?:-{3})|(?:\\.{3}))"; NSRegularExpressionOptions op = NSRegularExpressionDotMatchesLineSeparators; NSRegularExpression *regex = - [NSRegularExpression regularExpressionWithPattern:@"^---\n(.*?\n)---" + [NSRegularExpression regularExpressionWithPattern:pattern options:op error:NULL]; NSTextCheckingResult *result = [regex firstMatchInString:self options:0 @@ -114,4 +115,4 @@ - (BOOL)hasExtension:(NSString *)extension return [self.pathExtension isEqualToString:extension]; } -@end \ No newline at end of file +@end From b817db55abc0800d431b8e4ce66e8fd90d1cf53e Mon Sep 17 00:00:00 2001 From: John Muccigrosso Date: Mon, 19 Oct 2015 12:15:26 -0400 Subject: [PATCH 122/439] Fixing typo in signature "-togglePreivewPane:" should be "-togglePreviewPane:". --- MacDown/Code/Document/MPDocument.m | 4 ++-- MacDown/Localization/Base.lproj/MainMenu.xib | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4bc25634..db5dcd0e 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -579,7 +579,7 @@ - (BOOL)validateUserInterfaceItem:(id)item { BOOL result = [super validateUserInterfaceItem:item]; SEL action = item.action; - if (action == @selector(togglePreivewPane:)) + if (action == @selector(togglePreviewPane:)) { NSMenuItem *it = ((NSMenuItem *)item); it.hidden = (!self.previewVisible && self.previousSplitRatio < 0.0); @@ -1236,7 +1236,7 @@ - (IBAction)setEqualSplit:(id)sender [self setSplitViewDividerLocation:0.5]; } -- (IBAction)togglePreivewPane:(id)sender +- (IBAction)togglePreviewPane:(id)sender { if (self.previewVisible) { diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index cf98540c..63bb2c82 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -391,7 +391,7 @@ - + From d417801fb8014f6c65c20a79e7efeb3b416f0bff Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 24 Oct 2015 17:22:48 +0800 Subject: [PATCH 123/439] Add @Jmuccigr to the contributor list --- MacDown/Localization/en.lproj/Credits.rtf | 102 +++++++++++----------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index f7fa7f31..c27f7ce1 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -1,11 +1,11 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1344\cocoasubrtf720 +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf130 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 SourceHanSansJP-Normal;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} \paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \f0\fs24 \cf0 \ Open source Markdown editor for OS X. @@ -17,52 +17,54 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt \b0\fs24 Tzu-ping Chung}} \b0\fs24 \ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt \f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \fs28 \cf0 \ @@ -84,11 +86,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI \b0\fs24 \ Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt \b\fs28 \cf0 DMTemplates}} \b\fs28 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ \ @@ -99,23 +101,23 @@ The above copyright notice and this permission notice shall be included in all c 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.\ \ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt \b\fs28 \cf0 DTCoreText}}\ Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ \ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ \ -\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720 +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 \ls1\ilvl0\cf0 - 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.\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \cf0 \ 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 HOLDER 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.\ \ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt \b\fs28 \cf0 GBCli}}\ Copyright \'a9 2012 by Tomaz Kragelj\ @@ -127,7 +129,7 @@ The above copyright notice and this permission notice shall be included in all c \ 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.\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt \b\fs28 \cf0 Hoedown}}\ Copyright \'a9 2008, Natacha Port\'e9\ @@ -141,7 +143,7 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE {\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt \b\fs28 Hoextdown}} \b\fs28 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ \ @@ -151,19 +153,19 @@ The above copyright notice and this permission notice shall be included in all c \ 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.\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt \b\fs28 \cf0 LibYAML}}\ Copyright \'a9 2006 Kirill Simonov\ \ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 \cf0 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.\ \ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt \b\fs28 \cf0 M13OrderedDictionary}}\ Copyright \'a9 2013 Brandon McQuilkin\ @@ -173,16 +175,16 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of 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.\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \cf0 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt \b\fs28 \cf0 JJPluralForm}} \fs28 \fs24 by Lin Junjie\ This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt \b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ MASPreferences is licensed under the 2-clause BSD license.\ @@ -197,7 +199,7 @@ Redistribution and use in source and binary forms, with or without modification, \ 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 HOLDER 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.\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt \b\fs28 \cf0 PAPreferences}}\ Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.com}})\ @@ -210,14 +212,14 @@ Redistribution and use in source and binary forms, with or without modification, \ 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt \b\fs28 \cf0 PEG Markdown Highlight}}\ Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ \ PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt \b\fs28 \cf0 peg-markdown}}\ markdown in c, implemented using PEG grammar\ @@ -226,7 +228,7 @@ ODF output code \'a9 2011 Fletcher T. Penney\ \ peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \b \cf0 The GPL \b0 \ @@ -259,7 +261,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI \ {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt \b\fs28 Sparkle}}\ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 \cf0 Copyright \'a9 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:\ @@ -268,7 +270,7 @@ The above copyright notice and this permission notice shall be included in all c \ 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.\ \ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 \b \cf0 EXTERNAL LICENSES \b0 \ @@ -284,7 +286,7 @@ Redistribution and use in source and binary forms, with or without modification, \ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ \ -\pard\pardeftab720 +\pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt \b\fs28 \cf0 YAML.framework}}\ Copyright \'a9 2010 Mirek Rusin\ @@ -294,13 +296,13 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of 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.\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \cf0 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt \b\fs28 \cf0 Mou}} by Chen Luo\ The following editor theme and CSS files are extracted from Mou.app:\ -\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720 +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 \ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ {\listtext \'95 }Mou Fresh Air+\ {\listtext \'95 }Mou Night\ @@ -316,7 +318,7 @@ The following editor theme and CSS files are extracted from Mou.app:\ {\listtext \'95 }Clearness Dark\ {\listtext \'95 }GitHub\ {\listtext \'95 }GirHub2\ -\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \cf0 Used under permission.\ \ {\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt From c6dc23d376631a55b362166315927eb7788faf1c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 7 Nov 2015 16:16:19 +0800 Subject: [PATCH 124/439] Upgrade Prism to 05a2a15 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 1ab46199..05a2a15f 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 1ab46199dbbf26bc15e32262a31ec494274ebb93 +Subproject commit 05a2a15f8ce8b8e23d90650eb2bae919b3a796be From 2aba9275ca543ed9bb76b32a3524311b7a58291f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 7 Nov 2015 16:24:42 +0800 Subject: [PATCH 125/439] Disable ATS completely, allow all arbirary loads Fix #479, close #468, close #490 --- MacDown/MacDown-Info.plist | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 70dcc45d..430d6f54 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -85,6 +85,11 @@ public.app-category.productivity LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSHumanReadableCopyright Copyright © 2014 Tzu-ping Chung. NSMainNibFile @@ -127,25 +132,5 @@ - NSAppTransportSecurity - - NSExceptionDomains - - uranusjr.com - - NSIncludesSubdomains - - NSThirdPartyExceptionAllowsInsecureHTTPLoads - - - mathjax.org - - NSIncludesSubdomains - - NSExceptionRequiresForwardSecrecy - - - - From 565e6384c712cc7cc6961754732d5de659a04ab7 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 7 Nov 2015 16:54:36 +0800 Subject: [PATCH 126/439] Process the corrent input on pattern-toggling Fix #475. I am an idiot. --- MacDown/Code/Extension/NSTextView+Autocomplete.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m index f46623cf..cb7034d0 100644 --- a/MacDown/Code/Extension/NSTextView+Autocomplete.m +++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m @@ -317,7 +317,7 @@ - (void)toggleBlockWithPattern:(NSString *)pattern prefix:(NSString *)prefix BOOL hasTrailingNewline = NO; if ([toProcess hasSuffix:@"\n"]) { - toProcess = [content substringToIndex:(toProcess.length - 1)]; + toProcess = [toProcess substringToIndex:(toProcess.length - 1)]; hasTrailingNewline = YES; } From b80c0a1475691706e27c57b525367e81c7c88bf2 Mon Sep 17 00:00:00 2001 From: Justin Kim Date: Thu, 19 Nov 2015 11:51:22 -0500 Subject: [PATCH 127/439] Fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c7004891..ca517178 100644 --- a/README.md +++ b/README.md @@ -79,5 +79,5 @@ MacDown depends a lot on other open source projects, such as [Hoedown](https://g ## Tipping -If you find MacDown suitable for your needs, please consider [giving me a tip through PayPal](http://macdown.uranusjr.com/faq/#donation). Or, if you perfer to buy me a drink *personally* instead, just [send me a tweet](https://twitter.com/uranusjr) when you visit [Taipei, Taiwan](http://en.wikipedia.org/wiki/Taipei), where I live. I look forward to meeting you! +If you find MacDown suitable for your needs, please consider [giving me a tip through PayPal](http://macdown.uranusjr.com/faq/#donation). Or, if you prefer to buy me a drink *personally* instead, just [send me a tweet](https://twitter.com/uranusjr) when you visit [Taipei, Taiwan](http://en.wikipedia.org/wiki/Taipei), where I live. I look forward to meeting you! From 567c25671d8b6548827d67b6d44ab88f5eb93e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Ca=C3=B1as?= Date: Thu, 26 Nov 2015 19:58:40 -0500 Subject: [PATCH 128/439] Fix grammar in CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0565b2b3..ec202b50 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,11 +32,11 @@ Exception: If a URL in a comment is too long, it can go over the limit. This hap #### Stetements Inside `if`, `while`, etc. * Prefer implicit boolean conversion when it makes sense. - * `if (str.length)` is better than `if (str.length != 0)` if you wants to know whether a string is empty. + * `if (str.length)` is better than `if (str.length != 0)` if you want to know whether a string is empty. * The same applies when checking for object `nil`-ness. * If what you want to compare against is *zero as a number*, not emptiness, such as for `NSRange` position, `NSPoint` coordinates, etc., *do* use the `== 0`/`!= 0` expression. -* If statements need to span multiple lines, prefer putting logical operators in the *beginning* of the line. +* If statements need to span multiple lines, prefer putting logical operators at the *beginning* of the line. Yes: ```c @@ -108,4 +108,4 @@ Under certain circumstances I may wish you perform furthur rebasing and/or squas ## More to Come -This style guide is a work in progress. Please feel free to ask is you have any questions about it. I’ll add more rules if there’s ambiguity. \ No newline at end of file +This style guide is a work in progress. Please feel free to ask is you have any questions about it. I’ll add more rules if there’s ambiguity. From cbdbbf6a46d654401895be569fac6858b5bcd225 Mon Sep 17 00:00:00 2001 From: tbrannam Date: Mon, 30 Nov 2015 14:11:44 -0500 Subject: [PATCH 129/439] Fixed Exception being thrown from File->Revert (Document revision) Observers were not being removed properly before deallocating MPDocument, when MPDocument is closed programmatically by "Time Machine" --- MacDown/Code/Document/MPDocument.m | 48 +++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index db5dcd0e..e9335081 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -207,6 +207,7 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property (strong) NSMenuItem *wordsMenuItem; @property (strong) NSMenuItem *charMenuItem; @property (strong) NSMenuItem *charNoSpacesMenuItem; +@property (nonatomic) BOOL needsToUnregister; // Store file content in initializer until nib is loaded. @property (copy) NSString *loadedString; @@ -391,6 +392,8 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller object:self.preview.enclosingScrollView]; } + self.needsToUnregister = YES; + self.wordsMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL keyEquivalent:@""]; self.charMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:NULL @@ -440,22 +443,39 @@ - (void)document:(NSDocument *)doc shouldClose:(BOOL)shouldClose if (!shouldClose) return; - // Need to cleanup these so that callbacks won't crash the app. - [self.highlighter deactivate]; - self.highlighter.targetTextView = nil; - self.highlighter = nil; - self.renderer = nil; - self.preview.frameLoadDelegate = nil; - self.preview.policyDelegate = nil; + [self close]; +} - [[NSNotificationCenter defaultCenter] removeObserver:self]; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - for (NSString *key in MPEditorPreferencesToObserve()) - [defaults removeObserver:self forKeyPath:key]; - for (NSString *key in MPEditorKeysToObserve()) - [self.editor removeObserver:self forKeyPath:key]; +- (void)close{ - [self close]; + if (self.needsToUnregister) { + + // close can be called multiple times + // http://www.cocoabuilder.com/archive/cocoa/240166-nsdocument-close-method-calls-itself.html + + self.needsToUnregister = NO; + + // Need to cleanup these so that callbacks won't crash the app. + [self.highlighter deactivate]; + self.highlighter.targetTextView = nil; + self.highlighter = nil; + self.renderer = nil; + self.preview.frameLoadDelegate = nil; + self.preview.policyDelegate = nil; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + for (NSString *key in MPEditorPreferencesToObserve()) + [defaults removeObserver:self forKeyPath:key]; + for (NSString *key in MPEditorKeysToObserve()) + [self.editor removeObserver:self forKeyPath:key]; + + + } + + [super close]; } + (BOOL)autosavesInPlace From 321eaab1fc81fc08f2fd4f44ee9d1a28138dc0ab Mon Sep 17 00:00:00 2001 From: Waldo Jaquith Date: Thu, 10 Dec 2015 13:46:24 -0500 Subject: [PATCH 130/439] Fix spelling It's properly spelled "accessory," not "accesory." See http://www.merriam-webster.com/dictionary/accessory --- .../Localization/Base.lproj/MPHtmlPreferencesViewController.xib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index 56078120..4017394b 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -200,7 +200,7 @@ - + From 93e853ace3f78752e93252bb514b006130bc0b93 Mon Sep 17 00:00:00 2001 From: Todd Brannam Date: Fri, 11 Dec 2015 15:08:05 -0500 Subject: [PATCH 131/439] Update MPDocument.m Fix up style --- MacDown/Code/Document/MPDocument.m | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index e9335081..3da48bf1 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -446,13 +446,12 @@ - (void)document:(NSDocument *)doc shouldClose:(BOOL)shouldClose [self close]; } -- (void)close{ - - if (self.needsToUnregister) { - +- (void)close +{ + if (self.needsToUnregister) + { // close can be called multiple times // http://www.cocoabuilder.com/archive/cocoa/240166-nsdocument-close-method-calls-itself.html - self.needsToUnregister = NO; // Need to cleanup these so that callbacks won't crash the app. @@ -471,8 +470,6 @@ - (void)close{ [defaults removeObserver:self forKeyPath:key]; for (NSString *key in MPEditorKeysToObserve()) [self.editor removeObserver:self forKeyPath:key]; - - } [super close]; From 52b8058f2af0521f4bb6995768591f0193f468e8 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 13 Dec 2015 23:50:30 +0800 Subject: [PATCH 132/439] Add back ATS exceptions --- MacDown/MacDown-Info.plist | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 430d6f54..989575dd 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -89,6 +89,23 @@ NSAllowsArbitraryLoads + NSExceptionDomains + + mathjax.org + + NSExceptionRequiresForwardSecrecy + + NSIncludesSubdomains + + + uranusjr.com + + NSIncludesSubdomains + + NSThirdPartyExceptionAllowsInsecureHTTPLoads + + + NSHumanReadableCopyright Copyright © 2014 Tzu-ping Chung. From 7199ef027fa0e9d428d08b0a8a5047f96171122f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 1 Jan 2016 00:45:44 +0800 Subject: [PATCH 133/439] Update Prism to 73b7135 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 05a2a15f..73b71357 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 05a2a15f8ce8b8e23d90650eb2bae919b3a796be +Subproject commit 73b71357bf3780304611d1a741d5784e17030557 From dbe2bc3b33c1a90a661298dd1620f65fad079e20 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 1 Jan 2016 00:49:25 +0800 Subject: [PATCH 134/439] Always rebuild Prism resources from scratch This makes sure we don't have leftovers when Prism deletes something. --- MacDown.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 89d916b1..d378b004 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -801,7 +801,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/plugins $TARGET\ncp -r $SOURCE/components.js $TARGET"; + shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\nrm -rf $TARGET\nmkdir -p $TARGET\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/plugins $TARGET\ncp -r $SOURCE/components.js $TARGET"; showEnvVarsInLog = 0; }; 46C28C219A3C4CCD94797747 /* Copy Pods Resources */ = { From efac0b80dc2bc58f39b76e1663857a8df01798f1 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 1 Jan 2016 00:57:03 +0800 Subject: [PATCH 135/439] =?UTF-8?q?Happy=202016=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #518 --- MacDown/MacDown-Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 989575dd..bd3bb203 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -108,7 +108,7 @@ NSHumanReadableCopyright - Copyright © 2014 Tzu-ping Chung. + Copyright © 2014–2016 Tzu-ping Chung. NSMainNibFile MainMenu NSPrincipalClass From ef197524626f47334bd6481feb3031c02fb569a4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 1 Jan 2016 22:21:34 +0800 Subject: [PATCH 136/439] Wrap pre-code block inside div This prevents Prism from messing with styles. --- MacDown/Code/Extension/hoedown_html_patch.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Extension/hoedown_html_patch.c b/MacDown/Code/Extension/hoedown_html_patch.c index edd305d5..906decbf 100644 --- a/MacDown/Code/Extension/hoedown_html_patch.c +++ b/MacDown/Code/Extension/hoedown_html_patch.c @@ -55,7 +55,7 @@ void hoedown_patch_render_blockcode( lang = mapped; } - HOEDOWN_BUFPUTSL(ob, "flags & HOEDOWN_HTML_BLOCKCODE_LINE_NUMBERS) HOEDOWN_BUFPUTSL(ob, " class=\"line-numbers\""); if (back && back->size) @@ -81,7 +81,7 @@ void hoedown_patch_render_blockcode( hoedown_escape_html(ob, text->data, size, 0); } - HOEDOWN_BUFPUTSL(ob, "
\n"); + HOEDOWN_BUFPUTSL(ob, "
\n"); hoedown_buffer_free(mapped); hoedown_buffer_free(front); From 945f455adf193086c7e47f0761074836043678c1 Mon Sep 17 00:00:00 2001 From: John Muccigrosso Date: Tue, 26 Jan 2016 22:55:22 -0500 Subject: [PATCH 137/439] Adding ordered list command. --- MacDown/Localization/Base.lproj/MainMenu.xib | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index 63bb2c82..8f95cd65 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -514,6 +514,11 @@
+ + + + + From 97c1ff2b5f2196b86f6420944b84f5d940b407f2 Mon Sep 17 00:00:00 2001 From: John Muccigrosso Date: Tue, 26 Jan 2016 22:56:34 -0500 Subject: [PATCH 138/439] Adding ordered list command. --- MacDown/Code/Document/MPDocument.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 3da48bf1..2d65eac6 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1197,6 +1197,11 @@ - (IBAction)toggleImage:(id)sender } } +- (IBAction)toggleOrderedList:(id)sender +{ + [self.editor toggleBlockWithPattern:@"^[0-9]+ \\S" prefix:@"1. "]; +} + - (IBAction)toggleUnorderedList:(id)sender { [self.editor toggleBlockWithPattern:@"^[\\*\\+-] \\S" prefix:@"* "]; From 653570cc51db6c6fb533b0b066908993de07fb43 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 29 Jan 2016 23:45:10 +0800 Subject: [PATCH 139/439] Upgrade CocoaPods and Sparkle This addresses the important security fix in Sparkle 1.13.1. See . Thankfully CocoaPods now fixes the ARC issue blocked by Handlebars-objc, so that we can upgrade to 0.39.0, which is compatible with new versions of Sparkle. Handlebars-objc has also upgraded to 1.4.4 so that it works with newer CocoaPods versions. --- Gemfile | 2 +- MacDown.xcodeproj/project.pbxproj | 32 +++++++++++++++++++++++++++++++ Podfile | 4 ++-- Podfile.lock | 16 ++++++++-------- README.md | 2 +- 5 files changed, 44 insertions(+), 12 deletions(-) diff --git a/Gemfile b/Gemfile index 139b965a..b8952c89 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source 'https://rubygems.org/' -gem 'cocoapods', '0.34.4' +gem 'cocoapods', '0.39.0' diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index d378b004..21c7c702 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -635,6 +635,7 @@ 46C28C219A3C4CCD94797747 /* Copy Pods Resources */, 1F8A82A81952F19B00B6BF69 /* Update Build Number */, 905EF1B6196164E300FC3CE9 /* Copy Command Line Utility */, + 91FE3BB20F0F45435A80C717 /* Embed Pods Frameworks */, ); buildRules = ( ); @@ -656,6 +657,7 @@ 1FA6DE421941CC9E000409FB /* Frameworks */, 1FA6DE431941CC9E000409FB /* Resources */, 72CBA169CC684D3CB9F83627 /* Copy Pods Resources */, + E28FA180AF86F997B4FBB4BD /* Embed Pods Frameworks */, ); buildRules = ( ); @@ -864,6 +866,21 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; + 91FE3BB20F0F45435A80C717 /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; A4C68C7905CF45C89A0CC47D /* Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -879,6 +896,21 @@ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; + E28FA180AF86F997B4FBB4BD /* Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/Podfile b/Podfile index 07b46cf0..d0225cf2 100644 --- a/Podfile +++ b/Podfile @@ -5,14 +5,14 @@ source 'https://github.com/CocoaPods/Specs.git' xcodeproj 'MacDown.xcodeproj' target "MacDown" do - pod 'handlebars-objc', '~> 1.3' + pod 'handlebars-objc', '~> 1.4' pod 'hoedown', '~> 3.0' pod 'JJPluralForm', '~> 2.1' # Plural form localization. pod 'LibYAML', '~> 0.1', :inhibit_warnings => true pod 'M13OrderedDictionary', '~> 1.0' pod 'MASPreferences', '~> 1.1' # Preference window. pod 'PAPreferences', '~> 0.4' # Preference singleton. - pod 'Sparkle', '< 1.8' # Updater. (Freeze under 1.8 until we can upgrade Cocoapods) + pod 'Sparkle', '~> 1.13' # Updater. end target "MacDownTests" do diff --git a/Podfile.lock b/Podfile.lock index cea61e96..f05cdb86 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,36 +1,36 @@ PODS: - GBCli (1.1) - - handlebars-objc (1.3.0) + - handlebars-objc (1.4.4) - hoedown (3.0.3): - - hoedown/standard + - hoedown/standard (= 3.0.3) - hoedown/standard (3.0.3) - JJPluralForm (2.1) - LibYAML (0.1.4) - M13OrderedDictionary (1.0.6) - MASPreferences (1.1.2) - PAPreferences (0.4) - - Sparkle (1.7.1) + - Sparkle (1.13.0) DEPENDENCIES: - GBCli (~> 1.1) - - handlebars-objc (~> 1.3) + - handlebars-objc (~> 1.4) - hoedown (~> 3.0) - JJPluralForm (~> 2.1) - LibYAML (~> 0.1) - M13OrderedDictionary (~> 1.0) - MASPreferences (~> 1.1) - PAPreferences (~> 0.4) - - Sparkle (< 1.8) + - Sparkle (~> 1.13) SPEC CHECKSUMS: GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 - handlebars-objc: df4f98f81cd380b1e6b19a9f7dacddac6b4c3bd8 + handlebars-objc: ffad49df7e6dd17630ecccb2ef5e91cbaf12ad70 hoedown: c1327bbbc96d269595ed86bf97f1d09867ec7529 JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 M13OrderedDictionary: ca1bb2d743fd64500ffabee811d4bf2d0a65c908 MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 PAPreferences: ba3f8d236c4c398b82bb0110cddd8546cd619770 - Sparkle: f107eed24a7d41bcd510be49ebb640d176f06bb9 + Sparkle: d04d17a32eaddab19471d0c3d9db15164afdbc6e -COCOAPODS: 0.34.4 +COCOAPODS: 0.39.0 diff --git a/README.md b/README.md index ca517178..86881603 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ You may also need to install Xcode’s command line tools with the following com xcode-select --install -> Note: Due to multiple upstream bugs, Xcode will fail to build certain dependencies if you use the CocoaPods 0.36.x ([reason](https://github.com/CocoaPods/CocoaPods/issues/2559)) or 0.37.x ([reason](https://github.com/Bertrand/handlebars-objc/issues/15)). To avoid the problem we use a Gemfile to specify the version, and thus you should add `bundle exec` before running a CocoaPods command. +> Note: Due to multiple upstream bugs, Xcode may fail to build certain dependencies if you use the CocoaPods with versions lower than 0.39. Please upgrade CocoaPods, or use Bundler to execute a local version (as suggested above) instead. An appropriate SDK should be bundled with Xcode 5 or later versions. From 0d6300a4d15482b63afc7e9d7e5130b9f17bae16 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 29 Jan 2016 23:55:57 +0800 Subject: [PATCH 140/439] Upgrade some other pods while we're at it --- Podfile | 4 ++-- Podfile.lock | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Podfile b/Podfile index d0225cf2..88558d6e 100644 --- a/Podfile +++ b/Podfile @@ -9,9 +9,9 @@ target "MacDown" do pod 'hoedown', '~> 3.0' pod 'JJPluralForm', '~> 2.1' # Plural form localization. pod 'LibYAML', '~> 0.1', :inhibit_warnings => true - pod 'M13OrderedDictionary', '~> 1.0' + pod 'M13OrderedDictionary', '~> 1.1' pod 'MASPreferences', '~> 1.1' # Preference window. - pod 'PAPreferences', '~> 0.4' # Preference singleton. + pod 'PAPreferences', '~> 0.4' # Preference singleton (Locked until we drop 10.8 support). pod 'Sparkle', '~> 1.13' # Updater. end diff --git a/Podfile.lock b/Podfile.lock index f05cdb86..8092b4c2 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -6,7 +6,7 @@ PODS: - hoedown/standard (3.0.3) - JJPluralForm (2.1) - LibYAML (0.1.4) - - M13OrderedDictionary (1.0.6) + - M13OrderedDictionary (1.1.0) - MASPreferences (1.1.2) - PAPreferences (0.4) - Sparkle (1.13.0) @@ -17,7 +17,7 @@ DEPENDENCIES: - hoedown (~> 3.0) - JJPluralForm (~> 2.1) - LibYAML (~> 0.1) - - M13OrderedDictionary (~> 1.0) + - M13OrderedDictionary (~> 1.1) - MASPreferences (~> 1.1) - PAPreferences (~> 0.4) - Sparkle (~> 1.13) @@ -28,7 +28,7 @@ SPEC CHECKSUMS: hoedown: c1327bbbc96d269595ed86bf97f1d09867ec7529 JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 - M13OrderedDictionary: ca1bb2d743fd64500ffabee811d4bf2d0a65c908 + M13OrderedDictionary: 6e157fe9c82aa6b3cd7198f5c5c30c7a6834c4a6 MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 PAPreferences: ba3f8d236c4c398b82bb0110cddd8546cd619770 Sparkle: d04d17a32eaddab19471d0c3d9db15164afdbc6e From b8d7df6e96bc68c82c097b6c2bda98e58ff5f6fa Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 30 Jan 2016 18:59:09 +0800 Subject: [PATCH 141/439] Set editor font only when the settings are valid Fix #538. --- MacDown/Code/Document/MPDocument.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 3da48bf1..d721832c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1320,7 +1320,9 @@ - (void)setupEditor:(NSString *)changedKey NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; style.lineSpacing = self.preferences.editorLineSpacing; self.editor.defaultParagraphStyle = [style copy]; - self.editor.font = [self.preferences.editorBaseFont copy]; + NSFont *font = [self.preferences.editorBaseFont copy]; + if (font) + self.editor.font = font; self.editor.textColor = nil; self.editor.backgroundColor = [NSColor clearColor]; self.highlighter.styles = nil; From 70dca931a0bf29616606228b7e48d1803a095591 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 31 Jan 2016 20:36:20 +0800 Subject: [PATCH 142/439] Re-bundle Sparkle to force 1.13.1 update --- Podfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 8092b4c2..a817d7f1 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -8,8 +8,8 @@ PODS: - LibYAML (0.1.4) - M13OrderedDictionary (1.1.0) - MASPreferences (1.1.2) - - PAPreferences (0.4) - - Sparkle (1.13.0) + - PAPreferences (0.5) + - Sparkle (1.13.1) DEPENDENCIES: - GBCli (~> 1.1) @@ -30,7 +30,7 @@ SPEC CHECKSUMS: LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 M13OrderedDictionary: 6e157fe9c82aa6b3cd7198f5c5c30c7a6834c4a6 MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 - PAPreferences: ba3f8d236c4c398b82bb0110cddd8546cd619770 - Sparkle: d04d17a32eaddab19471d0c3d9db15164afdbc6e + PAPreferences: 9f0ffb1e67174a0df001af9d3320166ceb9ee6f5 + Sparkle: 2fbd47b869621d1e679c7554e3e19dda02104818 COCOAPODS: 0.39.0 From 294eae3613df3d8cc195430efcfb06199e46d1bc Mon Sep 17 00:00:00 2001 From: Aaron Brager Date: Wed, 17 Feb 2016 17:11:16 -0600 Subject: [PATCH 143/439] Update help.md --- MacDown/Resources/help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index 01cf7f93..93583e9b 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -212,7 +212,7 @@ The left- and right-most pipes (`|`) are only aesthetic, and can be omitted. The This is a fenced code block: ``` -print ('Hello world!)' +print ('Hello world!') ``` You can also use waves (`~`) instead of back ticks (`` ` ``): From e8c18639edf51c019e15431b80e97cfdeaeee6d3 Mon Sep 17 00:00:00 2001 From: Aaron Brager Date: Thu, 18 Feb 2016 00:25:39 -0600 Subject: [PATCH 144/439] Always display latest version of file --- MacDown/Code/Document/MPDocument.m | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d721832c..d70ecf3a 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -418,17 +418,20 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [self setupEditor:nil]; [self redrawDivider]; - - if (self.loadedString) - { - self.editor.string = self.loadedString; - self.loadedString = nil; - [self.renderer parseAndRenderNow]; - [self.highlighter parseAndHighlightNow]; - } + [self reloadString]; }]; } +- (void)reloadString { + if (self.loadedString && self.editor && self.renderer && self.highlighter) + { + self.editor.string = self.loadedString; + self.loadedString = nil; + [self.renderer parseAndRenderNow]; + [self.highlighter parseAndHighlightNow]; + } +} + - (void)canCloseDocumentWithDelegate:(id)delegate shouldCloseSelector:(SEL)selector contextInfo:(void *)context { @@ -517,6 +520,7 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName return NO; self.loadedString = content; + [self reloadString]; return YES; } From 9ce2b94ee26d974a7fa6f824fe8c444ab74c50d1 Mon Sep 17 00:00:00 2001 From: Aaron Brager Date: Thu, 18 Feb 2016 01:43:54 -0600 Subject: [PATCH 145/439] Paste image URL from clipboard when inserting image --- MacDown/Code/Document/MPDocument.m | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d721832c..2b801b56 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1189,12 +1189,32 @@ - (IBAction)toggleLink:(id)sender - (IBAction)toggleImage:(id)sender { - if ([self.editor toggleForMarkupPrefix:@"![" suffix:@"]()"]) + BOOL inserted = [self.editor toggleForMarkupPrefix:@"![](" suffix:@")"]; + + if (inserted) { NSRange selectedRange = self.editor.selectedRange; - NSUInteger location = selectedRange.location + selectedRange.length + 2; + NSUInteger location = selectedRange.location + selectedRange.length; self.editor.selectedRange = NSMakeRange(location, 0); + + NSString *URLString = [self stringIfClipboardContainsURL]; + + if (URLString) { + [self.editor insertText:URLString]; + self.editor.selectedRange = NSMakeRange(location, URLString.length); + } + } +} + +- (NSString *) stringIfClipboardContainsURL { + NSString *pasteboardString = [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]; + NSURL *url; + + if ([pasteboardString.lowercaseString hasPrefix:@"http"] || [pasteboardString.lowercaseString hasPrefix:@"https"] || [pasteboardString.lowercaseString hasPrefix:@"file"]) { + url = [NSURL URLWithString:pasteboardString]; } + + return url ? pasteboardString : nil; } - (IBAction)toggleUnorderedList:(id)sender From 15de2016b3dddbcad9458a225ee68294dd91b8c2 Mon Sep 17 00:00:00 2001 From: Blake Skinner Date: Fri, 19 Feb 2016 10:24:14 -0500 Subject: [PATCH 146/439] Percent-escape command arguments --- macdown-cmd/main.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index ef707b7c..8b6f863b 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -61,7 +61,9 @@ int main(int argc, const char * argv[]) NSMutableOrderedSet *urls = [NSMutableOrderedSet orderedSet]; for (NSString *argument in argproc.arguments) { - NSURL *url = [NSURL URLWithString:argument relativeToURL:pwdUrl]; + NSString *escapedArgument = + [argument stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSURL *url = [NSURL URLWithString:escapedArgument relativeToURL:pwdUrl]; [urls addObject:url.absoluteString]; } From c669fb374dd4c60b00a4f95646c36805d70bceb9 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 22 Feb 2016 00:06:54 +0800 Subject: [PATCH 147/439] Remove redundant space after print function --- MacDown/Resources/help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index 93583e9b..96ef8e8c 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -212,7 +212,7 @@ The left- and right-most pipes (`|`) are only aesthetic, and can be omitted. The This is a fenced code block: ``` -print ('Hello world!') +print('Hello world!') ``` You can also use waves (`~`) instead of back ticks (`` ` ``): From aa20646560c1c46d46883a8af0d0d07cea05ed45 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 22 Feb 2016 00:07:52 +0800 Subject: [PATCH 148/439] Add @getaaron as contributor --- MacDown/Localization/en.lproj/Credits.rtf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index c27f7ce1..ac786a7b 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf130 +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 SourceHanSansJP-Normal;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -64,6 +64,8 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ \pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \fs28 \cf0 \ From 101308a61a0f6b6d5d3f09734623ef9942e31fe1 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 22 Feb 2016 00:37:16 +0800 Subject: [PATCH 149/439] Rename method to make things clearer --- MacDown/Code/Document/MPDocument.m | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d70ecf3a..c3430259 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -418,11 +418,12 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [self setupEditor:nil]; [self redrawDivider]; - [self reloadString]; + [self reloadFromLoadedString]; }]; } -- (void)reloadString { +- (void)reloadFromLoadedString +{ if (self.loadedString && self.editor && self.renderer && self.highlighter) { self.editor.string = self.loadedString; @@ -520,7 +521,7 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName return NO; self.loadedString = content; - [self reloadString]; + [self reloadFromLoadedString]; return YES; } From 04fbd2c620902c6c0e2197ebe41e4a5ddebe5325 Mon Sep 17 00:00:00 2001 From: Aaron Brager Date: Thu, 18 Feb 2016 01:02:44 -0600 Subject: [PATCH 150/439] Include .md extension when saving untitled files --- MacDown/Code/Document/MPDocument.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 60137999..d2421408 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -527,6 +527,7 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel { + savePanel.extensionHidden = NO; NSString *fileName = self.presumedFileName; if (fileName && ![fileName hasExtension:@"md"]) { @@ -1542,7 +1543,7 @@ - (NSString *)presumedFileName title = string.titleString; if (!title) - return nil; + return NSLocalizedString(@"untitled", @"default filename if no title can be determined"); static NSRegularExpression *regex = nil; static dispatch_once_t onceToken; From ed64a94c6f8421ea6103d1ef0f5bcbc26fd8fdc9 Mon Sep 17 00:00:00 2001 From: Aaron Brager Date: Sun, 21 Feb 2016 19:54:42 -0600 Subject: [PATCH 151/439] Make "Untitled" uppercase --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d2421408..471ee92e 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1543,7 +1543,7 @@ - (NSString *)presumedFileName title = string.titleString; if (!title) - return NSLocalizedString(@"untitled", @"default filename if no title can be determined"); + return NSLocalizedString(@"Untitled", @"default filename if no title can be determined"); static NSRegularExpression *regex = nil; static dispatch_once_t onceToken; From aa56676f9fcc5d2d0d81e3d8d236ef01274c091e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 27 Feb 2016 12:50:46 +0800 Subject: [PATCH 152/439] Xcode upgrade --- MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme index a12214df..1e5523e3 100644 --- a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme +++ b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme @@ -1,6 +1,6 @@ Date: Sat, 27 Feb 2016 13:10:58 +0800 Subject: [PATCH 153/439] Check for underflow when applying selection change Fix #546 --- MacDown/Code/Extension/NSTextView+Autocomplete.m | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m index cb7034d0..b904f83c 100644 --- a/MacDown/Code/Extension/NSTextView+Autocomplete.m +++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m @@ -359,12 +359,22 @@ - (void)toggleBlockWithPattern:(NSString *)pattern prefix:(NSString *)prefix if (!isMarked) { selectedRange.location += prefixLength; - selectedRange.length += totalShift - prefixLength; + if (selectedRange.length + totalShift >= prefixLength) + selectedRange.length += totalShift - prefixLength; + else // Underflow. + selectedRange.length = 0; } else { - selectedRange.location -= prefixLength; - selectedRange.length -= totalShift - prefixLength; + if (prefixLength <= selectedRange.location) + selectedRange.location -= prefixLength; + else // Underflow. + selectedRange.location = 0; + if (totalShift - prefixLength <= selectedRange.length) + selectedRange.length -= totalShift - prefixLength; + else // Underflow. + selectedRange.length = 0; + if (selectedRange.location < lineRange.location) { selectedRange.length -= lineRange.location - selectedRange.location; From 8d542bd317b7215cecd2781bb893035a87af5a8e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 1 Mar 2016 12:43:21 +0800 Subject: [PATCH 154/439] Refactor to push pure logic into category --- MacDown.xcodeproj/project.pbxproj | 6 ++++ MacDown/Code/Document/MPDocument.m | 25 +++++-------- MacDown/Code/Extension/NSPasteboard+Types.h | 15 ++++++++ MacDown/Code/Extension/NSPasteboard+Types.m | 40 +++++++++++++++++++++ 4 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 MacDown/Code/Extension/NSPasteboard+Types.h create mode 100644 MacDown/Code/Extension/NSPasteboard+Types.m diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 21c7c702..e024200f 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -37,6 +37,7 @@ 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */; }; 1F396E6619B0EA17000D3EFC /* MPEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F396E6519B0EA17000D3EFC /* MPEditorView.m */; }; 1F3A47521953E84700293259 /* help.md in Resources */ = {isa = PBXBuildFile; fileRef = 1F3A47511953E84700293259 /* help.md */; }; + 1F3FC87C1C854E1C000965E1 /* NSPasteboard+Types.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3FC87B1C854E1C000965E1 /* NSPasteboard+Types.m */; }; 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */; }; 1F51C9A5194565050015A96F /* MPPreferencesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */; }; 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F59491A1AB57C78007394CB /* syntax_highlighting.json */; }; @@ -187,6 +188,8 @@ 1F396E6419B0EA17000D3EFC /* MPEditorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEditorView.h; sourceTree = ""; }; 1F396E6519B0EA17000D3EFC /* MPEditorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEditorView.m; sourceTree = ""; }; 1F3A47511953E84700293259 /* help.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = help.md; path = Resources/help.md; sourceTree = ""; }; + 1F3FC87A1C854E1C000965E1 /* NSPasteboard+Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSPasteboard+Types.h"; sourceTree = ""; }; + 1F3FC87B1C854E1C000965E1 /* NSPasteboard+Types.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSPasteboard+Types.m"; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; @@ -311,6 +314,8 @@ 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */, 1FFEB3231972D88900B2254F /* NSObject+HTMLTabularize.h */, 1FFEB3241972D88900B2254F /* NSObject+HTMLTabularize.m */, + 1F3FC87A1C854E1C000965E1 /* NSPasteboard+Types.h */, + 1F3FC87B1C854E1C000965E1 /* NSPasteboard+Types.m */, 1F0D9D5E194AC7CF008E1856 /* NSString+Lookup.h */, 1F0D9D5F194AC7CF008E1856 /* NSString+Lookup.m */, 1F0D9D60194AC7CF008E1856 /* NSTextView+Autocomplete.h */, @@ -923,6 +928,7 @@ 1F0D9D7D194AC7F7008E1856 /* MPPreferencesViewController.m in Sources */, 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */, 1F0D9D65194AC7CF008E1856 /* NSString+Lookup.m in Sources */, + 1F3FC87C1C854E1C000965E1 /* NSPasteboard+Types.m in Sources */, 1F8A835E1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m in Sources */, 1F33F2A11A3B4B660001C849 /* MPDocumentSplitView.m in Sources */, 1F23A92119928E650052DB78 /* MPMathJaxListener.m in Sources */, diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 2b801b56..935b4a79 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -16,6 +16,7 @@ #import "MPAutosaving.h" #import "NSColor+HTML.h" #import "NSDocumentController+Document.h" +#import "NSPasteboard+Types.h" #import "NSString+Lookup.h" #import "NSTextView+Autocomplete.h" #import "DOMNode+Text.h" @@ -1196,25 +1197,15 @@ - (IBAction)toggleImage:(id)sender NSRange selectedRange = self.editor.selectedRange; NSUInteger location = selectedRange.location + selectedRange.length; self.editor.selectedRange = NSMakeRange(location, 0); - - NSString *URLString = [self stringIfClipboardContainsURL]; - - if (URLString) { - [self.editor insertText:URLString]; - self.editor.selectedRange = NSMakeRange(location, URLString.length); - } - } -} -- (NSString *) stringIfClipboardContainsURL { - NSString *pasteboardString = [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString]; - NSURL *url; - - if ([pasteboardString.lowercaseString hasPrefix:@"http"] || [pasteboardString.lowercaseString hasPrefix:@"https"] || [pasteboardString.lowercaseString hasPrefix:@"file"]) { - url = [NSURL URLWithString:pasteboardString]; + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + NSString *url = [pb URLForType:NSPasteboardTypeString].absoluteString; + if (url) + { + [self.editor insertText:url]; + self.editor.selectedRange = NSMakeRange(location, url.length); + } } - - return url ? pasteboardString : nil; } - (IBAction)toggleUnorderedList:(id)sender diff --git a/MacDown/Code/Extension/NSPasteboard+Types.h b/MacDown/Code/Extension/NSPasteboard+Types.h new file mode 100644 index 00000000..54a339f4 --- /dev/null +++ b/MacDown/Code/Extension/NSPasteboard+Types.h @@ -0,0 +1,15 @@ +// +// NSPasteboard+Types.h +// MacDown +// +// Created by Tzu-ping Chung on 01/3. +// Copyright © 2016 Tzu-ping Chung . All rights reserved. +// + +#import + +@interface NSPasteboard (Types) + +- (NSURL *)URLForType:(NSString *)dataType; + +@end diff --git a/MacDown/Code/Extension/NSPasteboard+Types.m b/MacDown/Code/Extension/NSPasteboard+Types.m new file mode 100644 index 00000000..f01ae74e --- /dev/null +++ b/MacDown/Code/Extension/NSPasteboard+Types.m @@ -0,0 +1,40 @@ +// +// NSPasteboard+Types.m +// MacDown +// +// Created by Tzu-ping Chung on 01/3. +// Copyright © 2016 Tzu-ping Chung . All rights reserved. +// + +#import "NSPasteboard+Types.h" + + +@implementation NSPasteboard (Types) + +- (NSURL *)URLForType:(NSString *)dataType +{ + NSString *string = [self stringForType:dataType]; + + static NSRegularExpression *schemeRegex = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + schemeRegex = [NSRegularExpression + regularExpressionWithPattern:@"^(?:https?|file)$" + options:NSRegularExpressionCaseInsensitive + error:NULL]; + }); + + + NSURL *url = [NSURL URLWithString:string]; + if (!url) + return nil; + NSString *scheme = url.scheme; + if (!scheme) + return nil; + NSRange matchRange = [schemeRegex + rangeOfFirstMatchInString:scheme options:0 + range:NSMakeRange(0, scheme.length)]; + return (matchRange.location != NSNotFound) ? url : nil; +} + +@end From ceca0de8c2a30835ac24040e68206d199ce7f6fa Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 1 Mar 2016 12:43:55 +0800 Subject: [PATCH 155/439] Correct paste logic Previous implementation does not take current selection into account, and breaks content before toggling. This is fixed. Before: (Pasteboard: http://mosky.tw) Mosky ^^^^^ Select and toggle ![](Moskyhttp://mosky.tw) After: ![Mosky](http://mosky.tw) --- MacDown/Code/Document/MPDocument.m | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 935b4a79..4df52825 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1190,22 +1190,22 @@ - (IBAction)toggleLink:(id)sender - (IBAction)toggleImage:(id)sender { - BOOL inserted = [self.editor toggleForMarkupPrefix:@"![](" suffix:@")"]; - - if (inserted) - { - NSRange selectedRange = self.editor.selectedRange; - NSUInteger location = selectedRange.location + selectedRange.length; - self.editor.selectedRange = NSMakeRange(location, 0); + BOOL inserted = [self.editor toggleForMarkupPrefix:@"![" suffix:@"]()"]; + if (!inserted) + return; - NSPasteboard *pb = [NSPasteboard generalPasteboard]; - NSString *url = [pb URLForType:NSPasteboardTypeString].absoluteString; - if (url) - { - [self.editor insertText:url]; - self.editor.selectedRange = NSMakeRange(location, url.length); - } + NSRange selectedRange = self.editor.selectedRange; + NSUInteger location = selectedRange.location + selectedRange.length + 2; + selectedRange = NSMakeRange(location, 0); + + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + NSString *url = [pb URLForType:NSPasteboardTypeString].absoluteString; + if (url) + { + [self.editor insertText:url replacementRange:selectedRange]; + selectedRange.length = url.length; } + self.editor.selectedRange = selectedRange; } - (IBAction)toggleUnorderedList:(id)sender From c420bb255ec5314bd9a0a5f2a3c3d48ecdb87280 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 1 Mar 2016 15:28:37 +0800 Subject: [PATCH 156/439] Make auto-paste work with link toggle too --- MacDown/Code/Document/MPDocument.m | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4df52825..0f8100ce 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1180,12 +1180,22 @@ - (IBAction)toggleComment:(id)sender - (IBAction)toggleLink:(id)sender { - if ([self.editor toggleForMarkupPrefix:@"[" suffix:@"]()"]) + BOOL inserted = [self.editor toggleForMarkupPrefix:@"[" suffix:@"]()"]; + if (!inserted) + return; + + NSRange selectedRange = self.editor.selectedRange; + NSUInteger location = selectedRange.location + selectedRange.length + 2; + selectedRange = NSMakeRange(location, 0); + + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + NSString *url = [pb URLForType:NSPasteboardTypeString].absoluteString; + if (url) { - NSRange selectedRange = self.editor.selectedRange; - NSUInteger location = selectedRange.location + selectedRange.length + 2; - self.editor.selectedRange = NSMakeRange(location, 0); + [self.editor insertText:url replacementRange:selectedRange]; + selectedRange.length = url.length; } + self.editor.selectedRange = selectedRange; } - (IBAction)toggleImage:(id)sender From 58906dc832d3181fb21ca8201d3a25bf5d3a37a7 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 1 Mar 2016 19:50:57 +0800 Subject: [PATCH 157/439] Add basic AppleScript support Closes #324. Currently supports * Basic file manipulations (create, open, close, quit) * Markdown source read/write (text of document) * Rendered HTML read (html of document) --- MacDown.xcodeproj/project.pbxproj | 4 + MacDown/Code/Document/MPDocument.h | 3 + MacDown/Code/Document/MPDocument.m | 15 +++ MacDown/MacDown-Info.plist | 4 + MacDown/Resources/MacDown.sdef | 205 +++++++++++++++++++++++++++++ 5 files changed, 231 insertions(+) create mode 100644 MacDown/Resources/MacDown.sdef diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 21c7c702..a83ab24e 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -37,6 +37,7 @@ 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */; }; 1F396E6619B0EA17000D3EFC /* MPEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F396E6519B0EA17000D3EFC /* MPEditorView.m */; }; 1F3A47521953E84700293259 /* help.md in Resources */ = {isa = PBXBuildFile; fileRef = 1F3A47511953E84700293259 /* help.md */; }; + 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 1F3FC8A91C85AE9F000965E1 /* MacDown.sdef */; }; 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */; }; 1F51C9A5194565050015A96F /* MPPreferencesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */; }; 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F59491A1AB57C78007394CB /* syntax_highlighting.json */; }; @@ -187,6 +188,7 @@ 1F396E6419B0EA17000D3EFC /* MPEditorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEditorView.h; sourceTree = ""; }; 1F396E6519B0EA17000D3EFC /* MPEditorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEditorView.m; sourceTree = ""; }; 1F3A47511953E84700293259 /* help.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = help.md; path = Resources/help.md; sourceTree = ""; }; + 1F3FC8A91C85AE9F000965E1 /* MacDown.sdef */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = MacDown.sdef; path = Resources/MacDown.sdef; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; @@ -401,6 +403,7 @@ 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */, 1F3A47511953E84700293259 /* help.md */, 1F59491A1AB57C78007394CB /* syntax_highlighting.json */, + 1F3FC8A91C85AE9F000965E1 /* MacDown.sdef */, ); name = Resources; sourceTree = ""; @@ -759,6 +762,7 @@ 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */, 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, + 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacDown/Code/Document/MPDocument.h b/MacDown/Code/Document/MPDocument.h index 7528d890..5bfb6a2e 100644 --- a/MacDown/Code/Document/MPDocument.h +++ b/MacDown/Code/Document/MPDocument.h @@ -14,4 +14,7 @@ @property (nonatomic, readonly) MPPreferences *preferences; +@property (nonatomic, readwrite) NSString *markdown; +@property (nonatomic, readonly) NSString *html; + @end diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 471ee92e..19cd0027 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -252,6 +252,21 @@ - (MPPreferences *)preferences return [MPPreferences sharedInstance]; } +- (NSString *)markdown +{ + return self.editor.string; +} + +- (void)setMarkdown:(NSString *)markdown +{ + self.editor.string = markdown; +} + +- (NSString *)html +{ + return self.renderer.currentHtml; +} + - (BOOL)previewVisible { return (self.preview.frame.size.width != 0.0); diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index bd3bb203..4506970b 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -107,12 +107,16 @@ + NSAppleScriptEnabled + NSHumanReadableCopyright Copyright © 2014–2016 Tzu-ping Chung. NSMainNibFile MainMenu NSPrincipalClass NSApplication + OSAScriptingDefinition + MacDown.sdef SUBetaFeedURL http://macdown.uranusjr.com/sparkle/macdown/testing/appcast.xml SUFeedURL diff --git a/MacDown/Resources/MacDown.sdef b/MacDown/Resources/MacDown.sdef new file mode 100644 index 00000000..42248fdf --- /dev/null +++ b/MacDown/Resources/MacDown.sdef @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e37c911b439919b6f4300e0d44d947bf46f74596 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 3 Mar 2016 19:26:04 +0800 Subject: [PATCH 158/439] Organise MPEditorView.m --- MacDown/Code/View/MPEditorView.m | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MacDown/Code/View/MPEditorView.m b/MacDown/Code/View/MPEditorView.m index 562f319e..cec084de 100644 --- a/MacDown/Code/View/MPEditorView.m +++ b/MacDown/Code/View/MPEditorView.m @@ -27,6 +27,8 @@ @interface MPEditorView () @implementation MPEditorView +#pragma mark - Accessors + @synthesize contentRect = _contentRect; @synthesize scrollsPastEnd = _scrollsPastEnd; @@ -106,6 +108,9 @@ - (void)setString:(NSString *)string } } + +#pragma mark - Overrides + /** Overriden to perform extra operation on text change. * * Updates content height, and invoke the resizing method to apply it. @@ -119,6 +124,9 @@ - (void)didChangeText [self updateContentGeometry]; } + +#pragma mark - Private + - (void)updateContentGeometry { static NSCharacterSet *visibleCharacterSet = nil; From c68e91362c3174f63f5377e389aa402a59dd320c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 3 Mar 2016 19:33:26 +0800 Subject: [PATCH 159/439] Add a lot of contributors I seem to have missed lots of contributors along the way. I checked the contributor list on GitHub, and added everyone on it. Sorry if you name was missing from the list; I really didn't mean it. :( --- MacDown/Localization/en.lproj/Credits.rtf | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index ac786a7b..7061dd00 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -66,6 +66,20 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ \pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt Waldo Jaquith}}\ +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt Fabian Ca\'f1as}}\ +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt Justin Kim}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 \fs28 \cf0 \ From f668605357d6b314b9593199beef71b33c34e315 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 4 Mar 2016 02:46:52 +0800 Subject: [PATCH 160/439] Refactor cmd arg processing to make more sense --- macdown-cmd/main.m | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index 8b6f863b..abcf14e2 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -13,6 +13,9 @@ #import "MPArgumentProcessor.h" +const NSUInteger kMPPathEncoding = NSUTF8StringEncoding; + + NSRunningApplication *MPRunningMacDownInstance() { NSArray *runningInstances = [NSRunningApplication @@ -21,22 +24,23 @@ } -void MPCollectForRunningMacDown(NSOrderedSet *urls) +void MPCollectForRunningMacDown(NSOrderedSet *urls) { NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; - for (NSString *url in urls) - { - NSString *path = [NSURL URLWithString:url].path; - [workspace openFile:path withApplication:kMPApplicationName]; - } + for (NSURL *url in urls) + [workspace openFile:url.path withApplication:kMPApplicationName]; } -void MPCollectForUnlaunchedMacDown(NSOrderedSet *urls) +void MPCollectForUnlaunchedMacDown(NSOrderedSet *urls) { NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteNamed:kMPApplicationSuiteName]; - [defaults setObject:urls.array forKey:@"filesToOpenOnNextLaunch" + NSMutableArray *urlStrings = + [[NSMutableArray alloc] initWithCapacity:urls.count]; + for (NSURL *url in urls) + [urlStrings addObject:url.path]; + [defaults setObject:urlStrings forKey:@"filesToOpenOnNextLaunch" inSuiteNamed:kMPApplicationSuiteName]; [defaults synchronize]; } @@ -58,13 +62,13 @@ int main(int argc, const char * argv[]) // be opened later. NSString *pwd = [NSFileManager defaultManager].currentDirectoryPath; NSURL *pwdUrl = [NSURL fileURLWithPath:pwd isDirectory:YES]; - NSMutableOrderedSet *urls = [NSMutableOrderedSet orderedSet]; - for (NSString *argument in argproc.arguments) + NSMutableOrderedSet *urls = [NSMutableOrderedSet orderedSet]; + for (NSString *arg in argproc.arguments) { - NSString *escapedArgument = - [argument stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - NSURL *url = [NSURL URLWithString:escapedArgument relativeToURL:pwdUrl]; - [urls addObject:url.absoluteString]; + NSString *escaped = + [arg stringByAddingPercentEscapesUsingEncoding:kMPPathEncoding]; + NSURL *url = [NSURL URLWithString:escaped relativeToURL:pwdUrl]; + [urls addObject:url]; } // If the application is running, open all files with the first running @@ -77,7 +81,7 @@ int main(int argc, const char * argv[]) MPCollectForUnlaunchedMacDown(urls); // Launch MacDown. - [[NSWorkspace sharedWorkspace] launchApplication:@"MacDown"]; + [[NSWorkspace sharedWorkspace] launchApplication:kMPApplicationName]; } return EXIT_SUCCESS; } From c3791dce89fecb9075509b4f38fc2b92c5fb738e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 4 Mar 2016 13:14:34 +0800 Subject: [PATCH 161/439] Make editor uneditable when hidden This does not prevent the editor from being changed through menu commands; we should disable them as well, but I haven't found a good way to do this. --- MacDown/Code/Document/MPDocument.m | 1 + 1 file changed, 1 insertion(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 19cd0027..fb3cf38f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -646,6 +646,7 @@ - (BOOL)validateUserInterfaceItem:(id)item - (void)splitViewDidResizeSubviews:(NSNotification *)notification { [self redrawDivider]; + self.editor.editable = self.editorVisible; } From 6d77697e5edf66974b90147a71d72c9ba9375d08 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 Mar 2016 13:24:27 +0800 Subject: [PATCH 162/439] Add (extremely) simple plugin architecture * A menu that holds all plug-ins, refreshed when appearing. * Show a plug-in via the `-name` property. * Invoke a plug-in via `-run:` when an item is clicked. An example is published at . --- MacDown.xcodeproj/project.pbxproj | 16 ++++- MacDown/Code/Application/MPPlugInController.h | 15 +++++ MacDown/Code/Application/MPPlugInController.m | 48 +++++++++++++++ MacDown/Code/Utility/MPPlugIn.h | 19 ++++++ MacDown/Code/Utility/MPPlugIn.m | 60 +++++++++++++++++++ MacDown/Code/Utility/MPUtilities.h | 2 + MacDown/Code/Utility/MPUtilities.m | 2 + MacDown/Localization/Base.lproj/MainMenu.xib | 17 +++++- 8 files changed, 175 insertions(+), 4 deletions(-) create mode 100644 MacDown/Code/Application/MPPlugInController.h create mode 100644 MacDown/Code/Application/MPPlugInController.m create mode 100644 MacDown/Code/Utility/MPPlugIn.h create mode 100644 MacDown/Code/Utility/MPPlugIn.m diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index a83ab24e..9894bd71 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -42,6 +42,8 @@ 1F51C9A5194565050015A96F /* MPPreferencesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */; }; 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F59491A1AB57C78007394CB /* syntax_highlighting.json */; }; 1F59491E1AB57D87007394CB /* NSJSONSerialization+File.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */; }; + 1F5A37101C868EC0006E63E7 /* MPPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F5A370F1C868EC0006E63E7 /* MPPlugIn.m */; }; + 1F5A37141C869C81006E63E7 /* MPPlugInController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F5A37131C869C81006E63E7 /* MPPlugInController.m */; }; 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F64CCC8195F5AB900CE619A /* MPAsset.m */; }; 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */; }; 1F8A82D919533E9300B6BF69 /* Prism in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A82D819533E9300B6BF69 /* Prism */; }; @@ -194,6 +196,10 @@ 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; 1F59491C1AB57D87007394CB /* NSJSONSerialization+File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+File.h"; sourceTree = ""; }; 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+File.m"; sourceTree = ""; }; + 1F5A370E1C868EC0006E63E7 /* MPPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPlugIn.h; sourceTree = ""; }; + 1F5A370F1C868EC0006E63E7 /* MPPlugIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPlugIn.m; sourceTree = ""; }; + 1F5A37121C869C81006E63E7 /* MPPlugInController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPPlugInController.h; path = Code/Application/MPPlugInController.h; sourceTree = ""; }; + 1F5A37131C869C81006E63E7 /* MPPlugInController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPPlugInController.m; path = Code/Application/MPPlugInController.m; sourceTree = ""; }; 1F64CCC7195F5AB900CE619A /* MPAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAsset.h; sourceTree = ""; }; 1F64CCC8195F5AB900CE619A /* MPAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAsset.m; sourceTree = ""; }; 1F70CCD81978F03E00703429 /* MPAutosaving.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAutosaving.h; sourceTree = ""; }; @@ -328,11 +334,13 @@ 1F0D9D62194AC7CF008E1856 /* Utility */ = { isa = PBXGroup; children = ( + 1F23A91F19928E650052DB78 /* MPMathJaxListener.h */, + 1F23A92019928E650052DB78 /* MPMathJaxListener.m */, + 1F5A370E1C868EC0006E63E7 /* MPPlugIn.h */, + 1F5A370F1C868EC0006E63E7 /* MPPlugIn.m */, 1F0D9D63194AC7CF008E1856 /* MPUtilities.h */, 1F0D9D64194AC7CF008E1856 /* MPUtilities.m */, 1F70CCD81978F03E00703429 /* MPAutosaving.h */, - 1F23A91F19928E650052DB78 /* MPMathJaxListener.h */, - 1F23A92019928E650052DB78 /* MPMathJaxListener.m */, ); name = Utility; path = Code/Utility; @@ -461,6 +469,8 @@ 1F9A14E8194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.h */, 1F9A14E9194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m */, 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */, + 1F5A37121C869C81006E63E7 /* MPPlugInController.h */, + 1F5A37131C869C81006E63E7 /* MPPlugInController.m */, ); name = Application; sourceTree = ""; @@ -926,6 +936,7 @@ 1F0D9D7A194AC7F7008E1856 /* MPMarkdownPreferencesViewController.m in Sources */, 1F0D9D7D194AC7F7008E1856 /* MPPreferencesViewController.m in Sources */, 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */, + 1F5A37141C869C81006E63E7 /* MPPlugInController.m in Sources */, 1F0D9D65194AC7CF008E1856 /* NSString+Lookup.m in Sources */, 1F8A835E1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m in Sources */, 1F33F2A11A3B4B660001C849 /* MPDocumentSplitView.m in Sources */, @@ -941,6 +952,7 @@ 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */, 1FFEB3251972D88900B2254F /* NSObject+HTMLTabularize.m in Sources */, 1F9A14EC194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m in Sources */, + 1F5A37101C868EC0006E63E7 /* MPPlugIn.m in Sources */, 1FBDFEA11962A25A00BEEA70 /* MPGeneralPreferencesViewController.m in Sources */, 1F9A14ED194EEE9900D1C6A9 /* MPMainController.m in Sources */, 1F002A23195B3DAE008B8D93 /* MPRenderer.m in Sources */, diff --git a/MacDown/Code/Application/MPPlugInController.h b/MacDown/Code/Application/MPPlugInController.h new file mode 100644 index 00000000..119375af --- /dev/null +++ b/MacDown/Code/Application/MPPlugInController.h @@ -0,0 +1,15 @@ +// +// MPPlugInController.h +// MacDown +// +// Created by Tzu-ping Chung on 02/3. +// Copyright © 2016 Tzu-ping Chung . All rights reserved. +// + +#import + +@interface MPPlugInController : NSObject + +@property (weak) IBOutlet NSDocumentController *documentController; + +@end diff --git a/MacDown/Code/Application/MPPlugInController.m b/MacDown/Code/Application/MPPlugInController.m new file mode 100644 index 00000000..a7c5f23d --- /dev/null +++ b/MacDown/Code/Application/MPPlugInController.m @@ -0,0 +1,48 @@ +// +// MPPlugInController.m +// MacDown +// +// Created by Tzu-ping Chung on 02/3. +// Copyright © 2016 Tzu-ping Chung . All rights reserved. +// + +#import "NSString+Lookup.h" +#import "MPPlugIn.h" +#import "MPPlugInController.h" +#import "MPUtilities.h" + + +@implementation MPPlugInController + +#pragma mark - NSMenuDelegate + +- (void)menuNeedsUpdate:(NSMenu *)menu +{ + NSArray *paths = MPListEntriesForDirectory( + kMPPlugInsDirectoryName, nil); + + [menu removeAllItems]; + for (NSString *path in paths) + { + if (![path hasExtension:kMPPlugInFileExtension]) + continue; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + MPPlugIn *plugin = [[MPPlugIn alloc] initWithBundle:bundle]; + if (!plugin) + continue; + NSMenuItem *item = [menu addItemWithTitle:plugin.name + action:@selector(invokePlugIn:) + keyEquivalent:@""]; + item.target = self; + item.representedObject = plugin; + } +} + +- (IBAction)invokePlugIn:(NSMenuItem *)item +{ + MPPlugIn *plugin = item.representedObject; + if (![plugin run:item]) + NSLog(@"Failed to run plugin %@", plugin.name); +} + +@end diff --git a/MacDown/Code/Utility/MPPlugIn.h b/MacDown/Code/Utility/MPPlugIn.h new file mode 100644 index 00000000..0fecc870 --- /dev/null +++ b/MacDown/Code/Utility/MPPlugIn.h @@ -0,0 +1,19 @@ +// +// MPPlugIn.h +// MacDown +// +// Created by Tzu-ping Chung on 02/3. +// Copyright © 2016 Tzu-ping Chung . All rights reserved. +// + +#import +#import "MPDOcument.h" + +@interface MPPlugIn : NSObject + +@property (readonly) NSString *name; + +- (instancetype)initWithBundle:(NSBundle *)bundle; +- (BOOL)run:(id)sender; + +@end diff --git a/MacDown/Code/Utility/MPPlugIn.m b/MacDown/Code/Utility/MPPlugIn.m new file mode 100644 index 00000000..b190d92a --- /dev/null +++ b/MacDown/Code/Utility/MPPlugIn.m @@ -0,0 +1,60 @@ +// +// MPPlugIn.m +// MacDown +// +// Created by Tzu-ping Chung on 02/3. +// Copyright © 2016 Tzu-ping Chung . All rights reserved. +// + +#import "MPPlugIn.h" + + +@interface MPPlugIn () +@property (nonatomic) id content; +@end + + +@implementation MPPlugIn + +- (void)setName:(NSString *)name +{ + _name = name; +} + +- (instancetype)initWithBundle:(NSBundle *)bundle +{ + self = [super init]; + if (!self) + return nil; + + if (!bundle.isLoaded) + { + NSError *e = nil; + BOOL ok = [bundle loadAndReturnError:&e]; + if (!ok) + return nil; + } + Class plugInClass = bundle.principalClass; + if (!plugInClass) + return nil; + self.content = [[plugInClass alloc] init]; + + if ([self.content respondsToSelector:@selector(name)]) + self.name = [self.content name]; + if (!self.name) + { + NSURL *url = bundle.bundleURL; + self.name = url.lastPathComponent.stringByDeletingPathExtension; + } + + return self; +} + +- (BOOL)run:(id)sender +{ + if ([self.content respondsToSelector:@selector(run:)]) + return [self.content run:sender]; + return NO; +} + +@end diff --git a/MacDown/Code/Utility/MPUtilities.h b/MacDown/Code/Utility/MPUtilities.h index a67da558..523456ba 100644 --- a/MacDown/Code/Utility/MPUtilities.h +++ b/MacDown/Code/Utility/MPUtilities.h @@ -12,6 +12,8 @@ extern NSString * const kMPStylesDirectoryName; extern NSString * const kMPStyleFileExtension; extern NSString * const kMPThemesDirectoryName; extern NSString * const kMPThemeFileExtension; +extern NSString * const kMPPlugInsDirectoryName; +extern NSString * const kMPPlugInFileExtension; NSString *MPDataDirectory(NSString *relativePath); NSString *MPPathToDataFile(NSString *name, NSString *dirPath); diff --git a/MacDown/Code/Utility/MPUtilities.m b/MacDown/Code/Utility/MPUtilities.m index bada39bb..c6a546fa 100644 --- a/MacDown/Code/Utility/MPUtilities.m +++ b/MacDown/Code/Utility/MPUtilities.m @@ -14,6 +14,8 @@ NSString * const kMPStyleFileExtension = @"css"; NSString * const kMPThemesDirectoryName = @"Themes"; NSString * const kMPThemeFileExtension = @"style"; +NSString * const kMPPlugInsDirectoryName = @"PlugIns"; +NSString * const kMPPlugInFileExtension = @"plugin"; static NSString *MPDataRootDirectory() { diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index 8f95cd65..c3d66663 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -562,6 +562,14 @@ DQ
+ + + + + + + + @@ -609,6 +617,11 @@ DQ + + + + + From feddc7416e3a2ccb56d92321e21fccaf91f61af9 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 8 Mar 2016 17:47:28 +0800 Subject: [PATCH 163/439] Add plugin initialization hook --- MacDown/Code/Application/MPPlugInController.m | 48 ++++++++++++++----- MacDown/Code/Utility/MPPlugIn.h | 3 +- MacDown/Code/Utility/MPPlugIn.m | 6 +++ 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/MacDown/Code/Application/MPPlugInController.m b/MacDown/Code/Application/MPPlugInController.m index a7c5f23d..0ea311d9 100644 --- a/MacDown/Code/Application/MPPlugInController.m +++ b/MacDown/Code/Application/MPPlugInController.m @@ -14,22 +14,28 @@ @implementation MPPlugInController +- (instancetype)init +{ + self = [super init]; + if (!self) + return nil; + + id q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); + dispatch_async(q, ^{ + for (MPPlugIn *plugin in [self buildPlugIns]) + [plugin pluginsDidInitialize]; + }); + return self; +} + + #pragma mark - NSMenuDelegate - (void)menuNeedsUpdate:(NSMenu *)menu { - NSArray *paths = MPListEntriesForDirectory( - kMPPlugInsDirectoryName, nil); - [menu removeAllItems]; - for (NSString *path in paths) + for (MPPlugIn *plugin in [self buildPlugIns]) { - if (![path hasExtension:kMPPlugInFileExtension]) - continue; - NSBundle *bundle = [NSBundle bundleWithPath:path]; - MPPlugIn *plugin = [[MPPlugIn alloc] initWithBundle:bundle]; - if (!plugin) - continue; NSMenuItem *item = [menu addItemWithTitle:plugin.name action:@selector(invokePlugIn:) keyEquivalent:@""]; @@ -38,11 +44,31 @@ - (void)menuNeedsUpdate:(NSMenu *)menu } } -- (IBAction)invokePlugIn:(NSMenuItem *)item + +#pragma mark - Private + +- (void)invokePlugIn:(NSMenuItem *)item { MPPlugIn *plugin = item.representedObject; if (![plugin run:item]) NSLog(@"Failed to run plugin %@", plugin.name); } +- (NSArray *)buildPlugIns +{ + NSArray *paths = MPListEntriesForDirectory(kMPPlugInsDirectoryName, nil); + NSMutableArray *plugins = [NSMutableArray arrayWithCapacity:paths.count]; + for (NSString *path in paths) + { + if (![path hasExtension:kMPPlugInFileExtension]) + continue; + NSBundle *bundle = [NSBundle bundleWithPath:path]; + MPPlugIn *plugin = [[MPPlugIn alloc] initWithBundle:bundle]; + if (!plugin) + continue; + [plugins addObject:plugin]; + } + return [plugins copy]; +} + @end diff --git a/MacDown/Code/Utility/MPPlugIn.h b/MacDown/Code/Utility/MPPlugIn.h index 0fecc870..30ea28c0 100644 --- a/MacDown/Code/Utility/MPPlugIn.h +++ b/MacDown/Code/Utility/MPPlugIn.h @@ -11,9 +11,10 @@ @interface MPPlugIn : NSObject -@property (readonly) NSString *name; +@property (nonatomic, readonly) NSString *name; - (instancetype)initWithBundle:(NSBundle *)bundle; +- (void)pluginsDidInitialize; - (BOOL)run:(id)sender; @end diff --git a/MacDown/Code/Utility/MPPlugIn.m b/MacDown/Code/Utility/MPPlugIn.m index b190d92a..431f129c 100644 --- a/MacDown/Code/Utility/MPPlugIn.m +++ b/MacDown/Code/Utility/MPPlugIn.m @@ -50,6 +50,12 @@ - (instancetype)initWithBundle:(NSBundle *)bundle return self; } +- (void)pluginsDidInitialize +{ + if ([self.content respondsToSelector:@selector(pluginsDidInitialize)]) + [self.content pluginsDidInitialize]; +} + - (BOOL)run:(id)sender { if ([self.content respondsToSelector:@selector(run:)]) From dd84092822a1d8f3d70b68b09d291e3a9324297d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 8 Mar 2016 19:24:03 +0800 Subject: [PATCH 164/439] Render preview HTML with Handlebars For #577. Need to make this configurable in the future. --- MacDown.xcodeproj/project.pbxproj | 4 +++ MacDown/Code/Document/MPRenderer.m | 34 +++++++++++++------ .../Resources/Templates/Default.handlebars | 25 ++++++++++++++ 3 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 MacDown/Resources/Templates/Default.handlebars diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index a83ab24e..9b1545fc 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -38,6 +38,7 @@ 1F396E6619B0EA17000D3EFC /* MPEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F396E6519B0EA17000D3EFC /* MPEditorView.m */; }; 1F3A47521953E84700293259 /* help.md in Resources */ = {isa = PBXBuildFile; fileRef = 1F3A47511953E84700293259 /* help.md */; }; 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 1F3FC8A91C85AE9F000965E1 /* MacDown.sdef */; }; + 1F41FF7B1C8EEE9200FD9886 /* Templates in Resources */ = {isa = PBXBuildFile; fileRef = 1F41FF7A1C8EEE9200FD9886 /* Templates */; }; 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */; }; 1F51C9A5194565050015A96F /* MPPreferencesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */; }; 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */ = {isa = PBXBuildFile; fileRef = 1F59491A1AB57C78007394CB /* syntax_highlighting.json */; }; @@ -189,6 +190,7 @@ 1F396E6519B0EA17000D3EFC /* MPEditorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEditorView.m; sourceTree = ""; }; 1F3A47511953E84700293259 /* help.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = help.md; path = Resources/help.md; sourceTree = ""; }; 1F3FC8A91C85AE9F000965E1 /* MacDown.sdef */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = MacDown.sdef; path = Resources/MacDown.sdef; sourceTree = ""; }; + 1F41FF7A1C8EEE9200FD9886 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; @@ -395,6 +397,7 @@ 1FCE066319633D6B00DC83B4 /* Data */, 1F9A14EE194EEEDD00D1C6A9 /* Styles */, 1F9A14F3194EF6A600D1C6A9 /* Themes */, + 1F41FF7A1C8EEE9200FD9886 /* Templates */, 1FBDFE9B196170FE00BEEA70 /* Extensions */, 1F0F3BFB195F75F200FC0B3B /* MathJax */, 1F8A82D819533E9300B6BF69 /* Prism */, @@ -751,6 +754,7 @@ 1F3A47521953E84700293259 /* help.md in Resources */, 1F0D9DB4194AC9EE008E1856 /* MainMenu.xib in Resources */, 1FBDFE9C196170FE00BEEA70 /* Extensions in Resources */, + 1F41FF7B1C8EEE9200FD9886 /* Templates in Resources */, 1FBBD4BE194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib in Resources */, 1FA6CDB91952D2CD008D5CA0 /* dsa_pub.pem in Resources */, 1F27896B1973BEB100EE696A /* Localizable.strings in Resources */, diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 33c06ff0..a63ca19e 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -10,6 +10,7 @@ #import #import #import +#import #import "hoedown_html_patch.h" #import "NSJSONSerialization+File.h" #import "NSObject+HTMLTabularize.h" @@ -157,19 +158,32 @@ if (s) [scriptTags addObject:s]; } - NSString *style = [styleTags componentsJoinedByString:@"\n"]; - NSString *script = [scriptTags componentsJoinedByString:@"\n"]; - static NSString *f = - (@"\n\n" - @"\n\n%@%@\n\n" - @"\n%@\n%@\n\n\n\n"); + static NSString *f = nil; + static dispatch_once_t token; + dispatch_once(&token, ^{ + NSBundle *bundle = [NSBundle mainBundle]; + NSURL *url = [bundle URLForResource:@"Default" + withExtension:@".handlebars" + subdirectory:@"Templates"]; + f = [NSString stringWithContentsOfURL:url + encoding:NSUTF8StringEncoding error:NULL]; + }); + NSCAssert(f.length, @"Could not read template"); + NSString *titleTag = @""; if (title.length) - title = [NSString stringWithFormat:@"%@\n", title]; - else - title = @""; - NSString *html = [NSString stringWithFormat:f, title, style, body, script]; + titleTag = [NSString stringWithFormat:@"%@", title]; + + NSDictionary *context = @{ + @"title": title, + @"titleTag": titleTag, + @"styleTags": styleTags, + @"body": body, + @"scriptTags": scriptTags, + }; + NSString *html = [HBHandlebars renderTemplateString:f withContext:context + error:NULL]; return html; } diff --git a/MacDown/Resources/Templates/Default.handlebars b/MacDown/Resources/Templates/Default.handlebars new file mode 100644 index 00000000..039a2f28 --- /dev/null +++ b/MacDown/Resources/Templates/Default.handlebars @@ -0,0 +1,25 @@ + + + + + + +{{{ titleTag }}} + +{{#each styleTags }} +{{{ this }}} +{{/each }} + + + + + +{{{ body }}} + +{{#each scriptTags }} +{{{ this }}} +{{/each }} + + + + From 6538324f8e8e981db423a1130673d16af466f4dc Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 8 Mar 2016 19:33:38 +0800 Subject: [PATCH 165/439] Make template source configurable --- MacDown/Code/Document/MPRenderer.m | 5 ++++- MacDown/Code/Preferences/MPPreferences.h | 1 + MacDown/Code/Preferences/MPPreferences.m | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index a63ca19e..b33c8637 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -17,6 +17,7 @@ #import "NSString+Lookup.h" #import "MPUtilities.h" #import "MPAsset.h" +#import "MPPreferences.h" static NSString * const kMPMathJaxCDN = @@ -159,11 +160,13 @@ [scriptTags addObject:s]; } + MPPreferences *preferences = [MPPreferences sharedInstance]; + static NSString *f = nil; static dispatch_once_t token; dispatch_once(&token, ^{ NSBundle *bundle = [NSBundle mainBundle]; - NSURL *url = [bundle URLForResource:@"Default" + NSURL *url = [bundle URLForResource:preferences.htmlTemplateName withExtension:@".handlebars" subdirectory:@"Templates"]; f = [NSString stringWithContentsOfURL:url diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 3866463d..d5a6ba56 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -57,6 +57,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) BOOL previewZoomRelativeToBaseFontSize; +@property (assign) NSString *htmlTemplateName; @property (assign) NSString *htmlStyleName; @property (assign) BOOL htmlDetectFrontMatter; @property (assign) BOOL htmlTaskList; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 0e2b61b3..5e4ada01 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -100,6 +100,7 @@ - (instancetype)init @dynamic previewZoomRelativeToBaseFontSize; +@dynamic htmlTemplateName; @dynamic htmlStyleName; @dynamic htmlDetectFrontMatter; @dynamic htmlTaskList; @@ -228,6 +229,8 @@ - (void)loadDefaultUserDefaults self.editorAutoIncrementNumberedLists = YES; if (![defaults objectForKey:@"editorInsertPrefixInBlock"]) self.editorInsertPrefixInBlock = YES; + if (![defaults objectForKey:@"htmlTemplateName"]) + self.htmlTemplateName = @"Default"; } @end From 070394f5b70ebc898fce32c572821abee30944e0 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 9 Mar 2016 23:20:13 +0800 Subject: [PATCH 166/439] Rename hook to "plugInDidInitialize" --- MacDown/Code/Application/MPPlugInController.m | 2 +- MacDown/Code/Utility/MPPlugIn.h | 3 ++- MacDown/Code/Utility/MPPlugIn.m | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/MacDown/Code/Application/MPPlugInController.m b/MacDown/Code/Application/MPPlugInController.m index 0ea311d9..669bd392 100644 --- a/MacDown/Code/Application/MPPlugInController.m +++ b/MacDown/Code/Application/MPPlugInController.m @@ -23,7 +23,7 @@ - (instancetype)init id q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); dispatch_async(q, ^{ for (MPPlugIn *plugin in [self buildPlugIns]) - [plugin pluginsDidInitialize]; + [plugin plugInDidInitialize]; }); return self; } diff --git a/MacDown/Code/Utility/MPPlugIn.h b/MacDown/Code/Utility/MPPlugIn.h index 30ea28c0..582ba568 100644 --- a/MacDown/Code/Utility/MPPlugIn.h +++ b/MacDown/Code/Utility/MPPlugIn.h @@ -14,7 +14,8 @@ @property (nonatomic, readonly) NSString *name; - (instancetype)initWithBundle:(NSBundle *)bundle; -- (void)pluginsDidInitialize; - (BOOL)run:(id)sender; +- (void)plugInDidInitialize; + @end diff --git a/MacDown/Code/Utility/MPPlugIn.m b/MacDown/Code/Utility/MPPlugIn.m index 431f129c..e8c7285d 100644 --- a/MacDown/Code/Utility/MPPlugIn.m +++ b/MacDown/Code/Utility/MPPlugIn.m @@ -50,10 +50,10 @@ - (instancetype)initWithBundle:(NSBundle *)bundle return self; } -- (void)pluginsDidInitialize +- (void)plugInDidInitialize { - if ([self.content respondsToSelector:@selector(pluginsDidInitialize)]) - [self.content pluginsDidInitialize]; + if ([self.content respondsToSelector:@selector(plugInDidInitialize)]) + [self.content plugInDidInitialize]; } - (BOOL)run:(id)sender From abd381d27d04149fa4b74139e91dd616703d0c6f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 9 Mar 2016 23:22:54 +0800 Subject: [PATCH 167/439] Updata Prism to bd479f1 --- Dependency/prism | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/prism b/Dependency/prism index 73b71357..bd479f1d 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 73b71357bf3780304611d1a741d5784e17030557 +Subproject commit bd479f1d5ff0855b4c50168c1a82c91b2db191f2 From eb41cf140892b3ca2ca97ca9e81327367955ce65 Mon Sep 17 00:00:00 2001 From: Ali Rantakari Date: Wed, 9 Mar 2016 23:31:45 +0800 Subject: [PATCH 168/439] Update grammar to match the peg-markdown (c30a78f) Fixes ali-rantakari/peg-markdown-highlight#6 (potentially) --- .../peg-markdown-highlight/pmh_grammar.leg | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/Dependency/peg-markdown-highlight/pmh_grammar.leg b/Dependency/peg-markdown-highlight/pmh_grammar.leg index 7876b56d..13a3273a 100644 --- a/Dependency/peg-markdown-highlight/pmh_grammar.leg +++ b/Dependency/peg-markdown-highlight/pmh_grammar.leg @@ -432,39 +432,37 @@ UlLine = "____" '_'* | Spacechar '_'+ &Spacechar Emph = EmphStar | EmphUl -OneStarOpen = !StarLine < '*' > !Spacechar !Newline { $$ = elem(pmh_NO_TYPE); } -OneStarClose = !Spacechar !Newline Inline !StrongStar < '*' > { $$ = elem(pmh_NO_TYPE); } - -EmphStar = s:OneStarOpen - ( !OneStarClose Inline )* - OneStarClose +Whitespace = Spacechar | Newline + +EmphStar = < s:LocMarker + '*' !Whitespace + ( !'*' Inline + | StrongStar + )+ + '*' > { ADD(elem_s(pmh_EMPH)); } -OneUlOpen = !UlLine < '_' > !Spacechar !Newline { $$ = elem(pmh_NO_TYPE); } -OneUlClose = !Spacechar !Newline Inline !StrongUl < '_' > !Alphanumeric { $$ = elem(pmh_NO_TYPE); } - -EmphUl = s:OneUlOpen - ( !OneUlClose Inline )* - OneUlClose +EmphUl = < s:LocMarker + '_' !Whitespace + ( !'_' Inline + | StrongUl + )+ + '_' > { ADD(elem_s(pmh_EMPH)); } Strong = StrongStar | StrongUl -TwoStarOpen = !StarLine < "**" > !Spacechar !Newline { $$ = elem(pmh_NO_TYPE); } -TwoStarClose = !Spacechar !Newline Inline < "**" > { $$ = elem(pmh_NO_TYPE); } - -StrongStar = s:TwoStarOpen - ( !TwoStarClose Inline )* - TwoStarClose +StrongStar = < s:LocMarker + "**" !Whitespace + ( !"**" Inline )+ + "**" > { ADD(elem_s(pmh_STRONG)); } -TwoUlOpen = !UlLine < "__" > !Spacechar !Newline { $$ = elem(pmh_NO_TYPE); } -TwoUlClose = !Spacechar !Newline Inline < "__" > !Alphanumeric { $$ = elem(pmh_NO_TYPE); } - -StrongUl = s:TwoUlOpen - ( !TwoUlClose Inline )* - TwoUlClose - { ADD(elem_s(pmh_STRONG)); } +StrongUl = < s:LocMarker + "__" !Whitespace + ( !"__" Inline )+ + "__" > + { ADD(elem_s(pmh_STRONG)); } Image = '!' ( ExplicitLink | ReferenceLink ) { From 8613582f9f0f5302a265b381bef91d16c98d7ba1 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 14 Mar 2016 01:43:12 +0800 Subject: [PATCH 169/439] Update repository links --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 86881603..ccbd2acb 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # MacDown -[![](https://img.shields.io/github/release/uranusjr/macdown.svg)](http://macdown.uranusjr.com/download/latest/) -![Total downloads](https://img.shields.io/github/downloads/uranusjr/macdown/latest/total.svg) +[![](https://img.shields.io/github/release/MacDownApp/macdown.svg)](http://macdown.uranusjr.com/download/latest/) +![Total downloads](https://img.shields.io/github/downloads/MacDownApp/macdown/latest/total.svg) [![Build Status](https://travis-ci.org/uranusjr/macdown.svg?branch=master)](https://travis-ci.org/uranusjr/macdown) MacDown is an open source Markdown editor for OS X, released under the MIT License. The author stole the idea from [Chen Luo](https://twitter.com/chenluois)’s [Mou](http://mouapp.com) so that people can [make crappy clones](https://twitter.com/remaerd/status/484914820408279040). -Visit the [project site](http://macdown.uranusjr.com/) for more information, or download [MacDown.app.zip](http://macdown.uranusjr.com/download/latest/) directly from the [latest releases](https://github.com/uranusjr/macdown/releases/latest) page. +Visit the [project site](http://macdown.uranusjr.com/) for more information, or download [MacDown.app.zip](http://macdown.uranusjr.com/download/latest/) directly from the [latest releases](https://github.com/MacDownApp/macdown/releases/latest) page. ## License @@ -69,11 +69,11 @@ Refer to the official guides of Git and CocoaPods if you need more instructions. ## Discussion -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/uranusjr/macdown?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/MacDownApp/macdown) -Join our [Gitter channel](https://gitter.im/uranusjr/macdown?utm_source=share-link&utm_medium=link&utm_campaign=share-link) if you have any problems with MacDown. Any suggestions are welcomed, too! +Join our [Gitter channel](https://gitter.im/MacDownApp/macdown) if you have any problems with MacDown. Any suggestions are welcomed, too! -You can also [file an issue directly](https://github.com/uranusjr/macdown/issues/new) on GitHub if you prefer so. But please, **search first to make sure no-one has reported the same issue already** before opening one yourself. MacDown does not update in your computer immediately when we make changes, so something you experienced might be known, or even fixed in the development version. +You can also [file an issue directly](https://github.com/MacDownApp/macdown/issues/new) on GitHub if you prefer so. But please, **search first to make sure no-one has reported the same issue already** before opening one yourself. MacDown does not update in your computer immediately when we make changes, so something you experienced might be known, or even fixed in the development version. MacDown depends a lot on other open source projects, such as [Hoedown](https://github.com/hoedown/hoedown) for Markdown-to-HTML rendering, [Prism](http://prismjs.com) for syntax highlighting (in code blocks), and [PEG Markdown Highlight](https://github.com/ali-rantakari/peg-markdown-highlight) for editor highlighting. If you find problems when using those particular features, you can also consider reporting them directly to upstream projects as well as to MacDown’s issue tracker. I will do what I can if you report it here, but sometimes it can be more beneficial to interact with them directly. From 7cece8d2d9225658a4a2a65fd2f95780db377d67 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 17 Mar 2016 01:29:24 +0800 Subject: [PATCH 170/439] Update Travis CI badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ccbd2acb..16abdd23 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![](https://img.shields.io/github/release/MacDownApp/macdown.svg)](http://macdown.uranusjr.com/download/latest/) ![Total downloads](https://img.shields.io/github/downloads/MacDownApp/macdown/latest/total.svg) -[![Build Status](https://travis-ci.org/uranusjr/macdown.svg?branch=master)](https://travis-ci.org/uranusjr/macdown) +[![Build Status](https://travis-ci.org/MacDownApp/macdown.svg?branch=master)](https://travis-ci.org/MacDownApp/macdown) MacDown is an open source Markdown editor for OS X, released under the MIT License. The author stole the idea from [Chen Luo](https://twitter.com/chenluois)’s [Mou](http://mouapp.com) so that people can [make crappy clones](https://twitter.com/remaerd/status/484914820408279040). From 9c2b4ffe52020a6d8b8f5f3c67b199b289e176ec Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 18 Mar 2016 07:29:57 +0800 Subject: [PATCH 171/439] Provide better error for nonexistent link target UX enhancement regarding #580. Previously MacDown delegates error-handling to Finder when a link to nonexistent local file is clicked in preview (via NSWorkspace). This leads to a generic "Can't find the file XXX" message, which is not really useful. This patch detects a file URL in the above scenario, and shows a better message inside MacDown that provides an absolute path (instead of just the filename), and hints the user to use the auto-create feature if desired. Behaviours are unchanged for cases which... * The URL is not a local file. * The target file exists. * The auto-create option is on. --- MacDown/Code/Document/MPDocument.m | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index fb3cf38f..1ce1775c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -826,6 +826,7 @@ - (void)webView:(WebView *)webView request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { +// NSURL *url = information[WebActionOriginalURLKey]; switch ([information[WebActionNavigationTypeKey] integerValue]) { case WebNavigationTypeLinkClicked: @@ -1595,14 +1596,29 @@ - (BOOL)isCurrentBaseUrl:(NSURL *)another - (void)openOrCreateFileForUrl:(NSURL *)url { - // TODO: Make this togglable in preferences. - // If this is a file URL and the target does not exist, create and open it. - if (self.preferences.createFileForLinkTarget && url.isFileURL - && ![[NSFileManager defaultManager] fileExistsAtPath:url.path]) + // If the URL points to a nonexistent file, create automatically if + // requested, or provide better error message. + if (url.isFileURL && ![url checkResourceIsReachableAndReturnError:NULL]) { - NSDocumentController *controller = - [NSDocumentController sharedDocumentController]; - [controller openUntitledDocumentForURL:url display:YES error:NULL]; + if (self.preferences.createFileForLinkTarget) + { + NSDocumentController *controller = + [NSDocumentController sharedDocumentController]; + [controller openUntitledDocumentForURL:url display:YES error:NULL]; + return; + } + + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"File not found at path:\n%@", + @"preview navigation error message"); + alert.messageText = [NSString stringWithFormat:template, url.path]; + alert.informativeText = NSLocalizedString( + @"Please check the path of your link is correct. Turn on " + @"“Automatically create link targets” If you want MacDown to " + @"create nonexistent link targets for you", + @"preview navigation error information"); + [alert runModal]; return; } From 388738fee693ff73ae950683184bda3349c7bc25 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 18 Mar 2016 07:38:20 +0800 Subject: [PATCH 172/439] Remove unused variable --- MacDown/Code/Document/MPDocument.m | 1 - 1 file changed, 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 1ce1775c..eab465da 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -826,7 +826,6 @@ - (void)webView:(WebView *)webView request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener { -// NSURL *url = information[WebActionOriginalURLKey]; switch ([information[WebActionNavigationTypeKey] integerValue]) { case WebNavigationTypeLinkClicked: From e263bd7c308df6a739a3a2574b28bd8fe4c96bed Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 18 Mar 2016 07:38:58 +0800 Subject: [PATCH 173/439] Punctuation --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index eab465da..a1d354d0 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1615,7 +1615,7 @@ - (void)openOrCreateFileForUrl:(NSURL *)url alert.informativeText = NSLocalizedString( @"Please check the path of your link is correct. Turn on " @"“Automatically create link targets” If you want MacDown to " - @"create nonexistent link targets for you", + @"create nonexistent link targets for you.", @"preview navigation error information"); [alert runModal]; return; From 95b88ef07f85c95674fe7583a1053901ba03bd84 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 30 Mar 2016 17:05:39 +0800 Subject: [PATCH 174/439] Hide MathJax processing messages Fix #596. --- MacDown/Code/Document/MPRenderer.m | 2 +- MacDown/Resources/MathJax/callback.js | 5 ----- MacDown/Resources/MathJax/init.js | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 6 deletions(-) delete mode 100644 MacDown/Resources/MathJax/callback.js create mode 100644 MacDown/Resources/MathJax/init.js diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index b33c8637..27615ae2 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -395,7 +395,7 @@ - (NSArray *)mathjaxScripts NSURL *url = [NSURL URLWithString:kMPMathJaxCDN]; NSBundle *bundle = [NSBundle mainBundle]; MPEmbeddedScript *script = - [MPEmbeddedScript assetWithURL:[bundle URLForResource:@"callback" + [MPEmbeddedScript assetWithURL:[bundle URLForResource:@"init" withExtension:@"js" subdirectory:@"MathJax"] andType:kMPMathJaxConfigType]; diff --git a/MacDown/Resources/MathJax/callback.js b/MacDown/Resources/MathJax/callback.js deleted file mode 100644 index 0d797c84..00000000 --- a/MacDown/Resources/MathJax/callback.js +++ /dev/null @@ -1,5 +0,0 @@ -if (typeof MathJaxListener !== 'undefined') { - MathJax.Hub.Register.StartupHook('End', function () { - MathJaxListener.invokeCallbackForKey_('End'); - }); -} diff --git a/MacDown/Resources/MathJax/init.js b/MacDown/Resources/MathJax/init.js new file mode 100644 index 00000000..6b66412a --- /dev/null +++ b/MacDown/Resources/MathJax/init.js @@ -0,0 +1,14 @@ +(function () { + +MathJax.Hub.Config({ + 'showProcessingMessages': false, + 'messageStyle': 'none' +}); + +if (typeof MathJaxListener !== 'undefined') { + MathJax.Hub.Register.StartupHook('End', function () { + MathJaxListener.invokeCallbackForKey_('End'); + }); +} + +})(); From 48b8ff903743d7b12651d2b74f565658cd98b978 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 9 Jun 2016 09:03:20 +0800 Subject: [PATCH 175/439] Xcode-triggered update --- .../PreferencesEditor.imageset/Contents.json | 12 ++++++++---- .../PreferencesGeneral.imageset/Contents.json | 12 ++++++++---- .../PreferencesMarkdown.imageset/Contents.json | 12 ++++++++---- .../PreferencesRendering.imageset/Contents.json | 12 ++++++++---- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json index b4941498..4b40d852 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "PreferencesEditor.png" + "filename" : "PreferencesEditor.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "PreferencesEditor@2x.png" + "filename" : "PreferencesEditor@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json index 36204057..25e93f6c 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "PreferencesGeneral.png" + "filename" : "PreferencesGeneral.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "PreferencesGeneral@2x.png" + "filename" : "PreferencesGeneral@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesMarkdown.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesMarkdown.imageset/Contents.json index 264b5075..4d158ea4 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesMarkdown.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesMarkdown.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "PreferencesMarkdown.png" + "filename" : "PreferencesMarkdown.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "PreferencesMarkdown@2x.png" + "filename" : "PreferencesMarkdown@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json index 46e0e1c5..5d463828 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json @@ -2,13 +2,17 @@ "images" : [ { "idiom" : "universal", - "scale" : "1x", - "filename" : "PreferencesRendering.png" + "filename" : "PreferencesRendering.png", + "scale" : "1x" }, { "idiom" : "universal", - "scale" : "2x", - "filename" : "PreferencesRendering@2x.png" + "filename" : "PreferencesRendering@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { From 522bf80a28a876a7f6e8b45997030e4226c322ed Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 9 Jun 2016 09:03:38 +0800 Subject: [PATCH 176/439] Add quotes around paths in build script This should fix build issues when there are spaces in paths. See #163. --- MacDown.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index b46f87e9..755671f9 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -821,7 +821,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SOURCE=$PWD/Dependency/prism\nTARGET=$PWD/MacDown/Resources/Prism\nrm -rf $TARGET\nmkdir -p $TARGET\ncp -r $SOURCE/components $TARGET\ncp -r $SOURCE/themes $TARGET\ncp -r $SOURCE/plugins $TARGET\ncp -r $SOURCE/components.js $TARGET"; + shellScript = "SOURCE=\"$PWD/Dependency/prism\"\nTARGET=\"$PWD/MacDown/Resources/Prism\"\nrm -rf \"$TARGET\"\nmkdir -p \"$TARGET\"\ncp -r \"$SOURCE/components\" \"$TARGET\"\ncp -r \"$SOURCE/themes\" \"$TARGET\"\ncp -r \"$SOURCE/plugins\" \"$TARGET\"\ncp -r \"$SOURCE/components.js\" \"$TARGET\""; showEnvVarsInLog = 0; }; 46C28C219A3C4CCD94797747 /* Copy Pods Resources */ = { From b7276d34329f5a6c9325b2f2994a5ae9e433fc1d Mon Sep 17 00:00:00 2001 From: Sol Irvine Date: Thu, 16 Jun 2016 23:18:41 +0900 Subject: [PATCH 177/439] Add Github-style kbd tag style At least partially resolves https://github.com/MacDownApp/macdown/issues/404 --- MacDown/Resources/Styles/GitHub2.css | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/MacDown/Resources/Styles/GitHub2.css b/MacDown/Resources/Styles/GitHub2.css index f0b74483..ca62d29f 100755 --- a/MacDown/Resources/Styles/GitHub2.css +++ b/MacDown/Resources/Styles/GitHub2.css @@ -278,6 +278,21 @@ sup { vertical-align: super; line-height: 0; } + +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb +} + * { -webkit-print-color-adjust: exact; } @@ -294,4 +309,4 @@ sup { pre { word-wrap: break-word; } -} \ No newline at end of file +} From c42616e166e3079d262fbb1fe71fa124ee7eb1fe Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Fri, 22 Jul 2016 02:15:13 -0400 Subject: [PATCH 178/439] Add support for ".markdown" extension Files with ".markdown" extension should also have the Markdown file icon. --- MacDown/MacDown-Info.plist | 1 + 1 file changed, 1 insertion(+) diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 4506970b..8b2138ad 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -10,6 +10,7 @@ CFBundleTypeExtensions md + markdown CFBundleTypeIconFile MarkdownDocument From f809958717ba289b69c13f670d1171f0b8daf05e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 10 Aug 2016 23:20:07 +0800 Subject: [PATCH 179/439] Add Franklin Yu as author --- MacDown/Localization/en.lproj/Credits.rtf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MacDown/Localization/en.lproj/Credits.rtf b/MacDown/Localization/en.lproj/Credits.rtf index 7061dd00..93e036ec 100644 --- a/MacDown/Localization/en.lproj/Credits.rtf +++ b/MacDown/Localization/en.lproj/Credits.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 SourceHanSansJP-Normal;} {\colortbl;\red255\green255\blue255;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} @@ -72,13 +72,16 @@ Open source Markdown editor for OS X. {\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ \pard\pardeftab720\partightenfactor0 {\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ -{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ {\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt Fabian Ca\'f1as}}\ {\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt Justin Kim}}\ {\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt Andreas Hippler}}\ {\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ {\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ {\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ \ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 From ff0067a02864556d882a2f65e5fc6ba20a42637a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 11 Aug 2016 00:16:41 +0800 Subject: [PATCH 180/439] Make unordered list marker configurable Currently no UI, but at least it's a start. Partially address #526. --- MacDown/Code/Document/MPDocument.m | 3 ++- MacDown/Code/Preferences/MPPreferences.h | 2 ++ MacDown/Code/Preferences/MPPreferences.m | 25 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index a1d354d0..77592408 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1226,7 +1226,8 @@ - (IBAction)toggleOrderedList:(id)sender - (IBAction)toggleUnorderedList:(id)sender { - [self.editor toggleBlockWithPattern:@"^[\\*\\+-] \\S" prefix:@"* "]; + NSString *marker = self.preferences.editorUnorderedListMarker; + [self.editor toggleBlockWithPattern:@"^[\\*\\+-] \\S" prefix:marker]; } - (IBAction)toggleBlockquote:(id)sender diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index d5a6ba56..971847ca 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -54,6 +54,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) NSInteger editorWordCountType; @property (assign) BOOL editorScrollsPastEnd; @property (assign) BOOL editorEnsuresNewlineAtEndOfFile; +@property (assign) NSInteger editorUnorderedListMarkerType; @property (assign) BOOL previewZoomRelativeToBaseFontSize; @@ -75,6 +76,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (readonly) NSString *editorBaseFontName; @property (readonly) CGFloat editorBaseFontSize; @property (nonatomic, assign) NSFont *editorBaseFont; +@property (readonly) NSString *editorUnorderedListMarker; - (instancetype)init; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 5e4ada01..f360fa77 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -9,6 +9,15 @@ #import "MPPreferences.h" +typedef NS_ENUM(NSUInteger, MPUnorderedListMarkerType) +{ + MPUnorderedListMarkerAsterisk = 0, + MPUnorderedListMarkerPlusSign = 1, + MPUnorderedListMarkerMinusSign = 2, +}; + + + NSString * const MPDidDetectFreshInstallationNotification = @"MPDidDetectFreshInstallationNotificationName"; @@ -97,6 +106,7 @@ - (instancetype)init @dynamic editorWordCountType; @dynamic editorScrollsPastEnd; @dynamic editorEnsuresNewlineAtEndOfFile; +@dynamic editorUnorderedListMarkerType; @dynamic previewZoomRelativeToBaseFontSize; @@ -143,6 +153,21 @@ - (void)setEditorBaseFont:(NSFont *)font self.editorBaseFontInfo = info; } +- (NSString *)editorUnorderedListMarker +{ + switch (self.editorUnorderedListMarkerType) + { + case MPUnorderedListMarkerAsterisk: + return @"* "; + case MPUnorderedListMarkerPlusSign: + return @"+ "; + case MPUnorderedListMarkerMinusSign: + return @"- "; + default: + return @"* "; + } +} + #pragma mark - Private From a7e50c66d55cfb6d86c9e13764673fcd5543a104 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 11 Aug 2016 00:45:10 +0800 Subject: [PATCH 181/439] Add option in UI for editorUnorderedListMarkerType Fix #526. --- .../MPEditorPreferencesViewController.xib | 234 ++++++++++-------- 1 file changed, 133 insertions(+), 101 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib index b49048a0..88753a74 100644 --- a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib @@ -1,8 +1,10 @@ - + - + + + @@ -16,11 +18,11 @@ - + - + @@ -28,7 +30,7 @@ - + @@ -36,7 +38,7 @@ - + @@ -44,7 +46,7 @@ - + @@ -52,7 +54,7 @@ - + @@ -79,7 +81,7 @@ - + @@ -92,7 +94,7 @@ - + @@ -100,7 +102,7 @@ - + @@ -121,7 +123,7 @@ - + @@ -142,21 +144,21 @@ - + - + - + @@ -164,7 +166,7 @@ - + @@ -179,14 +181,14 @@ - + - + @@ -212,16 +214,43 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -282,8 +311,8 @@ - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + From b3f1d5e30bdf0f36e767dad2aae852677267de41 Mon Sep 17 00:00:00 2001 From: Sol Irvine Date: Thu, 11 Aug 2016 11:15:47 +0900 Subject: [PATCH 182/439] Added kbd tag styles to all stylesheets --- MacDown/Resources/Styles/Clearness Dark.css | 17 +++++++++++++++-- MacDown/Resources/Styles/Clearness.css | 17 +++++++++++++++-- MacDown/Resources/Styles/GitHub.css | 3 +++ MacDown/Resources/Styles/Solarized (Dark).css | 13 +++++++++++++ MacDown/Resources/Styles/Solarized (Light).css | 13 +++++++++++++ 5 files changed, 59 insertions(+), 4 deletions(-) diff --git a/MacDown/Resources/Styles/Clearness Dark.css b/MacDown/Resources/Styles/Clearness Dark.css index b47ad189..0b158bc1 100755 --- a/MacDown/Resources/Styles/Clearness Dark.css +++ b/MacDown/Resources/Styles/Clearness Dark.css @@ -21,12 +21,12 @@ table { margin: 10px 0 15px 0; border-collapse: collapse; } -td,th { +td,th { border: 1px solid #ddd; padding: 3px 10px; } th { - padding: 5px 10px; + padding: 5px 10px; } a { color: #59acf3; @@ -127,6 +127,19 @@ sup { vertical-align: super; line-height: 0; } +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} * { -webkit-print-color-adjust: exact; } diff --git a/MacDown/Resources/Styles/Clearness.css b/MacDown/Resources/Styles/Clearness.css index 37e18af3..eef609d5 100755 --- a/MacDown/Resources/Styles/Clearness.css +++ b/MacDown/Resources/Styles/Clearness.css @@ -21,12 +21,12 @@ table { margin: 10px 0 15px 0; border-collapse: collapse; } -td,th { +td,th { border: 1px solid #ddd; padding: 3px 10px; } th { - padding: 5px 10px; + padding: 5px 10px; } a { @@ -128,6 +128,19 @@ sup { vertical-align: super; line-height: 0; } +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} * { -webkit-print-color-adjust: exact; } diff --git a/MacDown/Resources/Styles/GitHub.css b/MacDown/Resources/Styles/GitHub.css index b5f09ec5..7b030172 100755 --- a/MacDown/Resources/Styles/GitHub.css +++ b/MacDown/Resources/Styles/GitHub.css @@ -71,6 +71,9 @@ sup { vertical-align: super; line-height: 0; } +kbd { + display: inline-block;padding: 3px 5px;font-size: 11px;line-height: 10px;color: #555;vertical-align: middle;background-color: #fcfcfc;border: solid 1px #ccc;border-bottom-color: #bbb;border-radius: 3px;box-shadow: inset 0 -1px 0 #bbb; +} * { -webkit-print-color-adjust: exact; } diff --git a/MacDown/Resources/Styles/Solarized (Dark).css b/MacDown/Resources/Styles/Solarized (Dark).css index a17baa39..8ab1d03b 100755 --- a/MacDown/Resources/Styles/Solarized (Dark).css +++ b/MacDown/Resources/Styles/Solarized (Dark).css @@ -175,6 +175,19 @@ html h5, html h6 { color: #b58900; } +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} @media print { body { diff --git a/MacDown/Resources/Styles/Solarized (Light).css b/MacDown/Resources/Styles/Solarized (Light).css index 23246a3b..ba6590c6 100755 --- a/MacDown/Resources/Styles/Solarized (Light).css +++ b/MacDown/Resources/Styles/Solarized (Light).css @@ -175,6 +175,19 @@ html h5, html h6 { color: #b58900; } +kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} @media print { body { From a638e7196ad0d38ac28a98a505271d9b043a7120 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 1 Sep 2016 18:16:25 +0800 Subject: [PATCH 183/439] Fix Prism asset dependency resolution The original implementation assumed that each Prism language can have only one dependency, which is not the case anymore. Fixed by implementing a depth-first recusive resolution strategy. --- MacDown/Code/Document/MPRenderer.m | 38 +++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 27615ae2..693eb727 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -222,6 +222,34 @@ @interface MPRenderer () @end +NS_INLINE void add_to_languages( + NSString *lang, NSMutableArray *languages, NSDictionary *languageMap) +{ + // Move language to root of dependencies. + NSUInteger index = [languages indexOfObject:lang]; + if (index != NSNotFound) + [languages removeObjectAtIndex:index]; + [languages insertObject:lang atIndex:0]; + + // Add dependencies of this language. + id require = languageMap[lang][@"require"]; + if ([require isKindOfClass:[NSString class]]) + { + add_to_languages(require, languages, languageMap); + } + else if ([require isKindOfClass:[NSArray class]]) + { + for (NSString *lang in require) + add_to_languages(lang, languages, languageMap); + } + else if (require) + { + NSLog(@"Unknown Prism langauge requirement " + @"%@ dropped for unknown format", require); + } +} + + NS_INLINE hoedown_buffer *language_addition( const hoedown_buffer *language, void *owner) { @@ -263,15 +291,7 @@ @interface MPRenderer () } // Walk dependencies to include all required scripts. - NSMutableArray *languages = renderer.currentLanguages; - while (lang) - { - NSUInteger index = [languages indexOfObject:lang]; - if (index != NSNotFound) - [languages removeObjectAtIndex:index]; - [languages insertObject:lang atIndex:0]; - lang = languageMap[lang][@"require"]; - } + add_to_languages(lang, renderer.currentLanguages, languageMap); return mapped; } From c76ff9c34b8239780cfccaa5c1eaced6a4dcfc4d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 1 Sep 2016 18:27:36 +0800 Subject: [PATCH 184/439] Fix build script on Python 3 --- Tools/build_for_release.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Tools/build_for_release.py b/Tools/build_for_release.py index 012572f8..b5d62a6e 100755 --- a/Tools/build_for_release.py +++ b/Tools/build_for_release.py @@ -25,6 +25,8 @@ APP_NAME = 'MacDown.app' ZIP_NAME = 'MacDown.app.zip' +TERM_ENCODING = 'utf-8' + class CommandError(Exception): pass @@ -97,7 +99,11 @@ def main(argv): XCODEBUILD, 'archive', '-workspace', '../MacDown.xcworkspace', '-scheme', 'MacDown', ) - match = re.search(r'^\s*ARCHIVE_PATH: (.+)$', output, re.MULTILINE) + match = re.search( + r'^\s*ARCHIVE_PATH: (.+)$', + output.decode(TERM_ENCODING), + re.MULTILINE, + ) archive_path = match.group(1) print('Exporting application bundle...') execute( From b16a14cab1a524cf3138eb05b6db70fbc95a01a5 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 6 Oct 2016 11:17:13 +0800 Subject: [PATCH 185/439] Relax front-matter rule to match CR and CRLF Fix #669 --- MacDown/Code/Extension/NSString+Lookup.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Extension/NSString+Lookup.m b/MacDown/Code/Extension/NSString+Lookup.m index c6010eb2..fd972a29 100644 --- a/MacDown/Code/Extension/NSString+Lookup.m +++ b/MacDown/Code/Extension/NSString+Lookup.m @@ -54,7 +54,8 @@ - (NSArray *)matchesForPattern:(NSString *)p - (id)frontMatter:(NSUInteger *)contentOffset { - static NSString *pattern = @"^-{3}\n(.*?\n)((?:-{3})|(?:\\.{3}))"; + static NSString *pattern = + @"^-{3}[\r\n]+(.*?[\r\n]+)((?:-{3})|(?:\\.{3}))"; NSRegularExpressionOptions op = NSRegularExpressionDotMatchesLineSeparators; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern From f8aff466f8399c648a70b8a7e33965699857bc37 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 6 Oct 2016 11:23:54 +0800 Subject: [PATCH 186/439] Upgrade project for Xcode 8 --- .../project.pbxproj | 36 ++++++++++++++++++- .../version/version.xcodeproj/project.pbxproj | 36 ++++++++++++++++++- MacDown.xcodeproj/project.pbxproj | 12 ++++++- .../xcshareddata/xcschemes/MacDown.xcscheme | 2 +- MacDown/Code/Document/MPDocument.m | 2 +- 5 files changed, 83 insertions(+), 5 deletions(-) diff --git a/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj b/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj index a0a05a38..fb1a2f1a 100644 --- a/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj +++ b/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj @@ -50,7 +50,7 @@ 1F8A8367195348C500B6BF69 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastUpgradeCheck = 0800; }; buildConfigurationList = 1F8A836A195348C500B6BF69 /* Build configuration list for PBXProject "peg-markdown-highlight" */; compatibilityVersion = "Xcode 3.2"; @@ -72,7 +72,24 @@ 1F8A8368195348C500B6BF69 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -80,6 +97,23 @@ 1F8A8369195348C500B6BF69 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; }; name = Release; }; diff --git a/Dependency/version/version.xcodeproj/project.pbxproj b/Dependency/version/version.xcodeproj/project.pbxproj index e533a69d..bc6bc356 100644 --- a/Dependency/version/version.xcodeproj/project.pbxproj +++ b/Dependency/version/version.xcodeproj/project.pbxproj @@ -40,7 +40,7 @@ 1FCD71091A20BA3A00C028B5 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = uranusjr; TargetAttributes = { 1FCD710D1A20BA3A00C028B5 = { @@ -68,7 +68,24 @@ 1FCD710E1A20BA3A00C028B5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; ONLY_ACTIVE_ARCH = YES; }; name = Debug; @@ -76,6 +93,23 @@ 1FCD710F1A20BA3A00C028B5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; }; name = Release; }; diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 755671f9..959036e3 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -711,7 +711,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = MP; - LastUpgradeCheck = 0700; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Tzu-ping Chung "; TargetAttributes = { 1FA6DE441941CC9E000409FB = { @@ -1128,14 +1128,19 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -1167,14 +1172,19 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; diff --git a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme index 1e5523e3..2d29dd29 100644 --- a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme +++ b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme @@ -1,6 +1,6 @@ = 101100 - WebFrameLoadDelegate, WebPolicyDelegate, + WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate, #endif MPAutosaving, MPRendererDataSource, MPRendererDelegate> From cba85166c77233864343ff32d7222a4b6a34ad58 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 8 Oct 2016 22:57:20 +0800 Subject: [PATCH 187/439] Silence warnings in Xcode for PMH --- Dependency/peg-markdown-highlight/pmh_parser_foot.c | 1 + Dependency/peg-markdown-highlight/pmh_parser_head.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Dependency/peg-markdown-highlight/pmh_parser_foot.c b/Dependency/peg-markdown-highlight/pmh_parser_foot.c index 0be8f5a4..0ee07891 100644 --- a/Dependency/peg-markdown-highlight/pmh_parser_foot.c +++ b/Dependency/peg-markdown-highlight/pmh_parser_foot.c @@ -40,3 +40,4 @@ static void parse_references(parser_data *p_data) p_data->head_elems[pmh_REFERENCE] = NULL; } +#pragma clang diagnostic pop diff --git a/Dependency/peg-markdown-highlight/pmh_parser_head.c b/Dependency/peg-markdown-highlight/pmh_parser_head.c index 6591b88b..f5ee983b 100644 --- a/Dependency/peg-markdown-highlight/pmh_parser_head.c +++ b/Dependency/peg-markdown-highlight/pmh_parser_head.c @@ -31,7 +31,8 @@ #define strdup _strdup #endif - +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" // Internal language element occurrence structure, containing // both public and private members: From 8e1fb45fc9e74b1c3b49f1da110241ce3e3aae66 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 8 Oct 2016 23:09:00 +0800 Subject: [PATCH 188/439] Fix file URL assembling when from preferences --- MacDown/Code/Application/MPMainController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 14680ad0..085afe81 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -212,7 +212,7 @@ - (void)openPendingFiles NSDocumentController *c = [NSDocumentController sharedDocumentController]; for (NSString *path in self.prefereces.filesToOpenOnNextLaunch) { - NSURL *url = [NSURL URLWithString:path]; + NSURL *url = [NSURL fileURLWithPath:path]; if ([url checkResourceIsReachableAndReturnError:NULL]) { [c openDocumentWithContentsOfURL:url display:YES From 595906b17be74e7f20ba6b20c39842aeb8dc93ab Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 9 Oct 2016 18:48:36 +0800 Subject: [PATCH 189/439] Guard against NULL CGColorRef assignment Probably related to #659. No idea, but this should not cause any drawbacks anyway, so why not. --- MacDown/Code/Document/MPDocument.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 01d09fcc..39c4aaa0 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1368,10 +1368,10 @@ - (void)setupEditor:(NSString *)changedKey }]; } - CGColorRef backgroundCGColor = self.editor.backgroundColor.CGColor; - CALayer *layer = [CALayer layer]; - layer.backgroundColor = backgroundCGColor; + CGColorRef backgroundCGColor = self.editor.backgroundColor.CGColor; + if (backgroundCGColor) + layer.backgroundColor = backgroundCGColor; self.editorContainer.layer = layer; } From be1b60840874467bf14d9b87fd62e8408012edb3 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 21 Oct 2016 19:09:19 +0800 Subject: [PATCH 190/439] Fix closing bug from deadlocking Could be related to #678, #433, #263. Confirmation needed. --- MacDown/Code/Document/MPDocument.m | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 39c4aaa0..ed9026b4 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -448,28 +448,11 @@ - (void)reloadFromLoadedString } } -- (void)canCloseDocumentWithDelegate:(id)delegate - shouldCloseSelector:(SEL)selector contextInfo:(void *)context -{ - selector = @selector(document:shouldClose:contextInfo:); - [super canCloseDocumentWithDelegate:delegate shouldCloseSelector:selector - contextInfo:context]; -} - -- (void)document:(NSDocument *)doc shouldClose:(BOOL)shouldClose - contextInfo:(void *)contextInfo -{ - if (!shouldClose) - return; - - [self close]; -} - - (void)close { if (self.needsToUnregister) { - // close can be called multiple times + // Close can be called multiple times, but this can only be done once. // http://www.cocoabuilder.com/archive/cocoa/240166-nsdocument-close-method-calls-itself.html self.needsToUnregister = NO; From 406c7a7ae2f5559175343900b7f036c7ff6dc3cd Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 4 Nov 2016 00:21:21 +0800 Subject: [PATCH 191/439] Add meta to make HTML output responsive on mobile Fix #691. --- MacDown/Resources/Templates/Default.handlebars | 1 + 1 file changed, 1 insertion(+) diff --git a/MacDown/Resources/Templates/Default.handlebars b/MacDown/Resources/Templates/Default.handlebars index 039a2f28..a5660d09 100644 --- a/MacDown/Resources/Templates/Default.handlebars +++ b/MacDown/Resources/Templates/Default.handlebars @@ -4,6 +4,7 @@ + {{{ titleTag }}} {{#each styleTags }} From 186a1bfd76ba8e6524e225a5ea5a18c356c50ce6 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 4 Nov 2016 18:26:43 +0800 Subject: [PATCH 192/439] Guard against nil being put into dict --- MacDown/Code/Document/MPRenderer.m | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 693eb727..04504f8c 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -179,11 +179,11 @@ titleTag = [NSString stringWithFormat:@"%@", title]; NSDictionary *context = @{ - @"title": title, - @"titleTag": titleTag, - @"styleTags": styleTags, - @"body": body, - @"scriptTags": scriptTags, + @"title": title ? title : @"", + @"titleTag": titleTag ? titleTag : @"", + @"styleTags": styleTags ? styleTags : @[], + @"body": body ? body : @"", + @"scriptTags": scriptTags ? scriptTags : @[], }; NSString *html = [HBHandlebars renderTemplateString:f withContext:context error:NULL]; From 17a212619fbb997d8f7f67d17236c45aff9571cf Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 4 Nov 2016 18:45:15 +0800 Subject: [PATCH 193/439] Use matching pref implementation on GUI and cmd This avoids any error we write to the wrong domain. --- MacDown.xcodeproj/project.pbxproj | 17 +++++++++-------- MacDown/Code/Application/MPMainController.m | 14 ++++++++++++-- .../Code/Extension}/NSUserDefaults+Suite.h | 1 + .../Code/Extension}/NSUserDefaults+Suite.m | 9 +++++++++ MacDown/Code/Preferences/MPPreferences.h | 1 - MacDown/Code/Preferences/MPPreferences.m | 1 - .../Code/Utility}/MPGlobals.h | 0 7 files changed, 31 insertions(+), 12 deletions(-) rename {macdown-cmd => MacDown/Code/Extension}/NSUserDefaults+Suite.h (84%) rename {macdown-cmd => MacDown/Code/Extension}/NSUserDefaults+Suite.m (68%) rename {macdown-cmd => MacDown/Code/Utility}/MPGlobals.h (100%) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 959036e3..27307081 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -31,7 +31,6 @@ 1F25E1C31A50F4F10029371D /* MPColorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F25E1C21A50F4F10029371D /* MPColorTests.m */; }; 1F2649B01A7406DB00EF6AF3 /* NSDocumentController+Document.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */; }; 1F27896B1973BEB100EE696A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F2789691973BEB100EE696A /* Localizable.strings */; }; - 1F2A17281A1BB3E30055A107 /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */; }; 1F3386E61A6B999600FC88C4 /* DOMNode+Text.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */; }; 1F33F2A11A3B4B660001C849 /* MPDocumentSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A01A3B4B660001C849 /* MPDocumentSplitView.m */; }; 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */; }; @@ -46,6 +45,7 @@ 1F5A37101C868EC0006E63E7 /* MPPlugIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F5A370F1C868EC0006E63E7 /* MPPlugIn.m */; }; 1F5A37141C869C81006E63E7 /* MPPlugInController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F5A37131C869C81006E63E7 /* MPPlugInController.m */; }; 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F64CCC8195F5AB900CE619A /* MPAsset.m */; }; + 1F847BC61DCC9DB600A47385 /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F847BC51DCC9DB600A47385 /* NSUserDefaults+Suite.m */; }; 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */; }; 1F8A82D919533E9300B6BF69 /* Prism in Resources */ = {isa = PBXBuildFile; fileRef = 1F8A82D819533E9300B6BF69 /* Prism */; }; 1F8A835D1953454F00B6BF69 /* HGMarkdownHighlighter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A83581953454F00B6BF69 /* HGMarkdownHighlighter.m */; }; @@ -180,8 +180,6 @@ 1F2649AE1A7406DB00EF6AF3 /* NSDocumentController+Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDocumentController+Document.h"; sourceTree = ""; }; 1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDocumentController+Document.m"; sourceTree = ""; }; 1F27896A1973BEB100EE696A /* Base */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Base; path = Localization/Base.lproj/Localizable.strings; sourceTree = ""; }; - 1F2A17261A1BB3E30055A107 /* NSUserDefaults+Suite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+Suite.h"; path = "macdown-cmd/NSUserDefaults+Suite.h"; sourceTree = SOURCE_ROOT; }; - 1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+Suite.m"; path = "macdown-cmd/NSUserDefaults+Suite.m"; sourceTree = SOURCE_ROOT; }; 1F3386E41A6B999600FC88C4 /* DOMNode+Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DOMNode+Text.h"; sourceTree = ""; }; 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DOMNode+Text.m"; sourceTree = ""; }; 1F33F29F1A3B4B660001C849 /* MPDocumentSplitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDocumentSplitView.h; sourceTree = ""; }; @@ -205,9 +203,11 @@ 1F64CCC7195F5AB900CE619A /* MPAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAsset.h; sourceTree = ""; }; 1F64CCC8195F5AB900CE619A /* MPAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAsset.m; sourceTree = ""; }; 1F70CCD81978F03E00703429 /* MPAutosaving.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAutosaving.h; sourceTree = ""; }; + 1F847BC31DCC9DA800A47385 /* MPGlobals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPGlobals.h; sourceTree = ""; }; + 1F847BC41DCC9DB600A47385 /* NSUserDefaults+Suite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSUserDefaults+Suite.h"; sourceTree = ""; }; + 1F847BC51DCC9DB600A47385 /* NSUserDefaults+Suite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSUserDefaults+Suite.m"; sourceTree = ""; }; 1F8858BA1A2D8D82008DC543 /* MPArgumentProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPArgumentProcessor.h; path = "macdown-cmd/MPArgumentProcessor.h"; sourceTree = SOURCE_ROOT; }; 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPArgumentProcessor.m; path = "macdown-cmd/MPArgumentProcessor.m"; sourceTree = SOURCE_ROOT; }; - 1F8858BD1A2D8ED4008DC543 /* MPGlobals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPGlobals.h; path = "macdown-cmd/MPGlobals.h"; sourceTree = SOURCE_ROOT; }; 1F8A82D819533E9300B6BF69 /* Prism */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Prism; path = Resources/Prism; sourceTree = ""; }; 1F8A83571953454F00B6BF69 /* HGMarkdownHighlighter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HGMarkdownHighlighter.h; path = "Dependency/peg-markdown-highlight/HGMarkdownHighlighter.h"; sourceTree = SOURCE_ROOT; }; 1F8A83581953454F00B6BF69 /* HGMarkdownHighlighter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HGMarkdownHighlighter.m; path = "Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m"; sourceTree = SOURCE_ROOT; }; @@ -325,6 +325,8 @@ 1F0D9D5F194AC7CF008E1856 /* NSString+Lookup.m */, 1F0D9D60194AC7CF008E1856 /* NSTextView+Autocomplete.h */, 1F0D9D61194AC7CF008E1856 /* NSTextView+Autocomplete.m */, + 1F847BC41DCC9DB600A47385 /* NSUserDefaults+Suite.h */, + 1F847BC51DCC9DB600A47385 /* NSUserDefaults+Suite.m */, 3D175F0F1974282400A5EFE8 /* WebView+WebViewPrivateHeaders.h */, 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */, 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */, @@ -336,6 +338,7 @@ 1F0D9D62194AC7CF008E1856 /* Utility */ = { isa = PBXGroup; children = ( + 1F847BC31DCC9DA800A47385 /* MPGlobals.h */, 1F23A91F19928E650052DB78 /* MPMathJaxListener.h */, 1F23A92019928E650052DB78 /* MPMathJaxListener.m */, 1F5A370E1C868EC0006E63E7 /* MPPlugIn.h */, @@ -611,10 +614,7 @@ 905EF1AA196164CA00FC3CE9 /* macdown-cmd */ = { isa = PBXGroup; children = ( - 1F2A17261A1BB3E30055A107 /* NSUserDefaults+Suite.h */, - 1F2A17271A1BB3E30055A107 /* NSUserDefaults+Suite.m */, 1FCD711A1A20BE2F00C028B5 /* version.h */, - 1F8858BD1A2D8ED4008DC543 /* MPGlobals.h */, 1F8858BA1A2D8D82008DC543 /* MPArgumentProcessor.h */, 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */, 1FBE8E0E1A11DB1E003E1EF4 /* main.m */, @@ -966,6 +966,7 @@ 1F0D9D76194AC7F7008E1856 /* MPEditorPreferencesViewController.m in Sources */, 1F8A83621953461800B6BF69 /* pmh_parser.c in Sources */, 1F8A835D1953454F00B6BF69 /* HGMarkdownHighlighter.m in Sources */, + 1F847BC61DCC9DB600A47385 /* NSUserDefaults+Suite.m in Sources */, 1F3386E61A6B999600FC88C4 /* DOMNode+Text.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -988,8 +989,8 @@ buildActionMask = 2147483647; files = ( 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */, + 1F847BC71DCC9DB600A47385 /* NSUserDefaults+Suite.m in Sources */, 1FBE8E0F1A11DB1E003E1EF4 /* main.m in Sources */, - 1F2A17281A1BB3E30055A107 /* NSUserDefaults+Suite.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 085afe81..da9bb887 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -9,8 +9,10 @@ #import "MPMainController.h" #import #import +#import "MPGlobals.h" #import "MPUtilities.h" #import "NSDocumentController+Document.h" +#import "NSUserDefaults+Suite.h" #import "MPPreferences.h" #import "MPGeneralPreferencesViewController.h" #import "MPMarkdownPreferencesViewController.h" @@ -210,7 +212,12 @@ - (void)copyFiles - (void)openPendingFiles { NSDocumentController *c = [NSDocumentController sharedDocumentController]; - for (NSString *path in self.prefereces.filesToOpenOnNextLaunch) + + NSUserDefaults *defaults = [[NSUserDefaults alloc] init]; + NSArray *paths = [defaults objectForKey:@"filesToOpenOnNextLaunch" + inSuiteNamed:kMPApplicationSuiteName]; + + for (NSString *path in paths) { NSURL *url = [NSURL fileURLWithPath:path]; if ([url checkResourceIsReachableAndReturnError:NULL]) @@ -223,7 +230,10 @@ - (void)openPendingFiles [c openUntitledDocumentForURL:url display:YES error:NULL]; } } - self.prefereces.filesToOpenOnNextLaunch = nil; + + [defaults setObject:@[] forKey:@"filesToOpenOnNextLaunch" + inSuiteNamed:kMPApplicationSuiteName]; + [defaults synchronize]; treat(); } diff --git a/macdown-cmd/NSUserDefaults+Suite.h b/MacDown/Code/Extension/NSUserDefaults+Suite.h similarity index 84% rename from macdown-cmd/NSUserDefaults+Suite.h rename to MacDown/Code/Extension/NSUserDefaults+Suite.h index bf84aa29..8666f255 100644 --- a/macdown-cmd/NSUserDefaults+Suite.h +++ b/MacDown/Code/Extension/NSUserDefaults+Suite.h @@ -11,6 +11,7 @@ @interface NSUserDefaults (Suite) - (instancetype)initWithSuiteNamed:(NSString *)suiteName; +- (id)objectForKey:(NSString *)key inSuiteNamed:(NSString *)suiteName; - (void)setObject:(id)value forKey:(NSString *)key inSuiteNamed:(NSString *)suiteName; diff --git a/macdown-cmd/NSUserDefaults+Suite.m b/MacDown/Code/Extension/NSUserDefaults+Suite.m similarity index 68% rename from macdown-cmd/NSUserDefaults+Suite.m rename to MacDown/Code/Extension/NSUserDefaults+Suite.m index e4d0b37e..b2f1d9c0 100644 --- a/macdown-cmd/NSUserDefaults+Suite.m +++ b/MacDown/Code/Extension/NSUserDefaults+Suite.m @@ -19,6 +19,15 @@ - (instancetype)initWithSuiteNamed:(NSString *)suiteName return self; } +- (id)objectForKey:(NSString *)key inSuiteNamed:(NSString *)suiteName +{ + id value = (__bridge id)CFPreferencesCopyValue( + (__bridge CFStringRef)key, + (__bridge CFStringRef)suiteName, + kCFPreferencesCurrentUser, kCFPreferencesAnyHost); + return value; +} + - (void)setObject:(id)value forKey:(NSString *)key inSuiteNamed:(NSString *)suiteName { diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 971847ca..9261ef88 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -17,7 +17,6 @@ extern NSString * const MPDidDetectFreshInstallationNotification; @property (assign) NSString *firstVersionInstalled; @property (assign) NSString *latestVersionInstalled; @property (assign) BOOL updateIncludesPreReleases; -@property (assign) NSArray *filesToOpenOnNextLaunch; @property (assign) BOOL supressesUntitledDocumentOnLaunch; @property (assign) BOOL createFileForLinkTarget; diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index f360fa77..bf722e99 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -71,7 +71,6 @@ - (instancetype)init @dynamic firstVersionInstalled; @dynamic latestVersionInstalled; @dynamic updateIncludesPreReleases; -@dynamic filesToOpenOnNextLaunch; @dynamic supressesUntitledDocumentOnLaunch; @dynamic createFileForLinkTarget; diff --git a/macdown-cmd/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h similarity index 100% rename from macdown-cmd/MPGlobals.h rename to MacDown/Code/Utility/MPGlobals.h From 6568d04a3e3534a82d44a19a54e8c260f487a2d8 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 4 Nov 2016 18:45:59 +0800 Subject: [PATCH 194/439] Dynamically replace content instead of reloading This works around the WebView caching problem. By reusing the same DOM as much as possible, we can avoid reloading external resources again and again every time we render. This should improve performance on large documents. Note that the current implementation is quite crude. We always get the whole HTML document, and extract the part we need after putting the whole thing together (using regex). Ideally, since the style and script section never updates during document editing, and the main content never updates on pref changes, we should be able to only notify changes for needed parts seperately. But we lack that kind of renderer notification. This would be a target for refactoring in the future. --- MacDown/Code/Document/MPDocument.m | 36 +++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index ed9026b4..31bd627c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -939,8 +939,42 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html NSURL *baseUrl = self.fileURL; if (!baseUrl) // Unsaved doument; just use the default URL. baseUrl = self.preferences.htmlDefaultDirectoryUrl; - [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl]; + self.manualRender = self.preferences.markdownManualRender; + + // If we're working on the same document, try not to reload. + if (self.isPreviewReady && [self.currentBaseUrl isEqualTo:baseUrl]) + { + // HACK: Ideally we should only inject the parts that changed, and only + // get the parts we need. For now we only get a complete HTML codument, + // and rely on regex to get the parts we want in the DOM. + + // Use the existing tree if available, and replace the content. + DOMDocument *doc = self.preview.mainFrame.DOMDocument; + DOMNodeList *htmlNodes = [doc getElementsByTagName:@"html"]; + if (htmlNodes.length >= 1) + { + static NSString *pattern = @"(.*)"; + static int opts = NSRegularExpressionDotMatchesLineSeparators; + + // Find things inside the tag. + NSRegularExpression *regex = + [[NSRegularExpression alloc] initWithPattern:pattern + options:opts error:NULL]; + NSTextCheckingResult *result = + [regex firstMatchInString:html options:0 + range:NSMakeRange(0, html.length)]; + html = [html substringWithRange:[result rangeAtIndex:1]]; + + // Replace everything in the old tag. + DOMElement *htmlNode = (DOMElement *)[htmlNodes item:0]; + htmlNode.innerHTML = html; + return; + } + } + + // Reload the page if there's not valid tree to work with. + [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl]; self.currentBaseUrl = baseUrl; } From 8212a5ddb4b8856000429e4a23d601af6857a550 Mon Sep 17 00:00:00 2001 From: "Matt C. Wilson" Date: Wed, 2 Nov 2016 00:14:09 -0400 Subject: [PATCH 195/439] Fix #548 --- MacDown/Resources/help.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index 96ef8e8c..36af8481 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -30,12 +30,21 @@ Before I tell you about all the extra syntaxes and capabilities I have, I'll int ### Line Breaks To force a line break, put two spaces and a newline (return) at the end of the line. - These lines - won't break +* This two-line bullet +won't break - These lines - will break +* This two-line bullet +will break +Here is the code: + +``` +* This two-line bullet +won't break + +* This two-line bullet +will break +``` ### Strong and Emphasize From 3beb1a6077f8f9514abd6f23b4adfe055f8ca898 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Nov 2016 04:05:06 +0800 Subject: [PATCH 196/439] Prevent save dialog on an unnamed, empty document Fix #671. --- MacDown/Code/Document/MPDocument.m | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 31bd627c..40a24792 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -487,6 +487,16 @@ + (NSArray *)writableTypes return @[@"net.daringfireball.markdown"]; } +- (BOOL)isDocumentEdited +{ + // Prevent save dialog on an unnamed, empty document. The file will still + // show as modified (because it is), but no save dialog will be presented + // when the user closes it. + if (!self.presentedItemURL && !self.editor.string.length) + return NO; + return [super isDocumentEdited]; +} + - (BOOL)writeToURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError *__autoreleasing *)outError { From 3aacb43aaa3ed50932f6c3194ab65acc030add1e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Nov 2016 04:19:49 +0800 Subject: [PATCH 197/439] Fix build dependency on command line util The extension method signature is not included in the build after we moved it to the main MacDown target. Add it back to prevent unrecognized selector error. --- MacDown.xcodeproj/project.pbxproj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 27307081..f142fb0d 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -68,6 +68,7 @@ 1FC29F5C1944FC2600D616C7 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FC29F5B1944FC2600D616C7 /* XCTest.framework */; }; 1FC29F5E1944FC4F00D616C7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */; }; 1FCE066419633D6C00DC83B4 /* Data in Resources */ = {isa = PBXBuildFile; fileRef = 1FCE066319633D6B00DC83B4 /* Data */; }; + 1FEAFEA21DCE762C008C4E8C /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F847BC51DCC9DB600A47385 /* NSUserDefaults+Suite.m */; }; 1FF1420219A8987500CF8A6A /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF1420119A8987500CF8A6A /* JavaScriptCore.framework */; }; 1FF1420419A8A24800CF8A6A /* MPUtilityTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF1420319A8A24800CF8A6A /* MPUtilityTests.m */; }; 1FF207631941CF22005B5654 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF207621941CF22005B5654 /* WebKit.framework */; }; @@ -988,9 +989,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */, - 1F847BC71DCC9DB600A47385 /* NSUserDefaults+Suite.m in Sources */, 1FBE8E0F1A11DB1E003E1EF4 /* main.m in Sources */, + 1F8858BC1A2D8D82008DC543 /* MPArgumentProcessor.m in Sources */, + 1FEAFEA21DCE762C008C4E8C /* NSUserDefaults+Suite.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From eb79defa9a4604dc6eebf533172db9f21cadb693 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Nov 2016 04:50:16 +0800 Subject: [PATCH 198/439] Refactor file-launching method in cmd Previously the cmd util uses different strategies to open files based on whether MacDown is currently running. This results in various problems, the most prominent being that NSWorkspace cannot be used to pass a path for files that do not exist. This change unifies the opening strategy to always be based on cross-application NSUserDefaults instead, and moves the open file check from during application launch to application activation. This makes the implementation simpler, and also solves the problem aforementioned. Fix #672. --- MacDown/Code/Application/MPMainController.m | 10 ++++++--- MacDown/Code/Utility/MPGlobals.h | 2 ++ macdown-cmd/main.m | 23 +++------------------ 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index da9bb887..0d67201b 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -147,7 +147,6 @@ - (instancetype)init name:MPDidDetectFreshInstallationNotification object:self.prefereces]; [self copyFiles]; - [self openPendingFiles]; return self; } @@ -159,6 +158,11 @@ - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender return !self.prefereces.supressesUntitledDocumentOnLaunch; } +- (void)applicationDidBecomeActive:(NSNotification *)notification +{ + [self openPendingFiles]; +} + #pragma mark - SUUpdaterDelegate @@ -214,7 +218,7 @@ - (void)openPendingFiles NSDocumentController *c = [NSDocumentController sharedDocumentController]; NSUserDefaults *defaults = [[NSUserDefaults alloc] init]; - NSArray *paths = [defaults objectForKey:@"filesToOpenOnNextLaunch" + NSArray *paths = [defaults objectForKey:kMPFilesToOpenKey inSuiteNamed:kMPApplicationSuiteName]; for (NSString *path in paths) @@ -231,7 +235,7 @@ - (void)openPendingFiles } } - [defaults setObject:@[] forKey:@"filesToOpenOnNextLaunch" + [defaults setObject:@[] forKey:kMPFilesToOpenKey inSuiteNamed:kMPApplicationSuiteName]; [defaults synchronize]; treat(); diff --git a/MacDown/Code/Utility/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h index 2457958e..9fb7e157 100644 --- a/MacDown/Code/Utility/MPGlobals.h +++ b/MacDown/Code/Utility/MPGlobals.h @@ -16,3 +16,5 @@ static NSString * const kMPCommandName = @"macdown"; static NSString * const kMPHelpKey = @"help"; static NSString * const kMPVersionKey = @"version"; + +static NSString * const kMPFilesToOpenKey = @"filesToOpenOnNextLaunch"; diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index abcf14e2..1140753f 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -23,16 +23,7 @@ return runningInstances.firstObject; } - -void MPCollectForRunningMacDown(NSOrderedSet *urls) -{ - NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; - for (NSURL *url in urls) - [workspace openFile:url.path withApplication:kMPApplicationName]; -} - - -void MPCollectForUnlaunchedMacDown(NSOrderedSet *urls) +void MPCollectForMacDown(NSOrderedSet *urls) { NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteNamed:kMPApplicationSuiteName]; @@ -40,7 +31,7 @@ void MPCollectForUnlaunchedMacDown(NSOrderedSet *urls) [[NSMutableArray alloc] initWithCapacity:urls.count]; for (NSURL *url in urls) [urlStrings addObject:url.path]; - [defaults setObject:urlStrings forKey:@"filesToOpenOnNextLaunch" + [defaults setObject:urlStrings forKey:kMPFilesToOpenKey inSuiteNamed:kMPApplicationSuiteName]; [defaults synchronize]; } @@ -70,15 +61,7 @@ int main(int argc, const char * argv[]) NSURL *url = [NSURL URLWithString:escaped relativeToURL:pwdUrl]; [urls addObject:url]; } - - // If the application is running, open all files with the first running - // instance. Otherwise save the file URLs, and start the app (saved URLs - // will be opened when the app launches). - NSRunningApplication *instance = MPRunningMacDownInstance(); - if (instance) - MPCollectForRunningMacDown(urls); - else - MPCollectForUnlaunchedMacDown(urls); + MPCollectForMacDown(urls); // Launch MacDown. [[NSWorkspace sharedWorkspace] launchApplication:kMPApplicationName]; From a7f63ffdc617c9bb2e18200ec450d473d30a0ce9 Mon Sep 17 00:00:00 2001 From: Ali Rantakari Date: Sun, 6 Nov 2016 05:10:22 +0800 Subject: [PATCH 199/439] Avoid passing NULL to strdup() Cherry-picked from ali-rantakari/peg-markdown-highlight@6d501919b30ca18980030df8 Fix #532. --- Dependency/peg-markdown-highlight/pmh_grammar.leg | 14 +++++++------- .../peg-markdown-highlight/pmh_parser_head.c | 13 +++++++++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Dependency/peg-markdown-highlight/pmh_grammar.leg b/Dependency/peg-markdown-highlight/pmh_grammar.leg index 13a3273a..a4731a50 100644 --- a/Dependency/peg-markdown-highlight/pmh_grammar.leg +++ b/Dependency/peg-markdown-highlight/pmh_grammar.leg @@ -483,8 +483,8 @@ ReferenceLinkDouble = < s:Label Spnl !"[]" l:Label > pmh_realelement *reference = GET_REF(l->label); if (reference) { $$ = elem_s(pmh_LINK); - $$->label = strdup(l->label); - $$->address = strdup(reference->address); + $$->label = strdup_or_null(l->label); + $$->address = strdup_or_null(reference->address); } else $$ = NULL; FREE_LABEL(s); @@ -496,8 +496,8 @@ ReferenceLinkSingle = < s:Label (Spnl "[]")? > pmh_realelement *reference = GET_REF(s->label); if (reference) { $$ = elem_s(pmh_LINK); - $$->label = strdup(s->label); - $$->address = strdup(reference->address); + $$->label = strdup_or_null(s->label); + $$->address = strdup_or_null(reference->address); } else $$ = NULL; FREE_LABEL(s); @@ -507,7 +507,7 @@ ExplicitLink = < s:Label Spnl '(' Sp l:Source Spnl Title Sp ')' > { $$ = elem_s(pmh_LINK); if (l->address != NULL) - $$->address = strdup(l->address); + $$->address = strdup_or_null(l->address); FREE_LABEL(s); FREE_ADDRESS(l); } @@ -550,8 +550,8 @@ Reference = < s:LocMarker NonindentSpace !"[]" l:Label ':' Spnl r:RefSrc RefTitle > BlankLine+ { pmh_realelement *el = elem_s(pmh_REFERENCE); - el->label = strdup(l->label); - el->address = strdup(r->address); + el->label = strdup_or_null(l->label); + el->address = strdup_or_null(r->address); ADD(el); FREE_LABEL(l); FREE_ADDRESS(r); diff --git a/Dependency/peg-markdown-highlight/pmh_parser_head.c b/Dependency/peg-markdown-highlight/pmh_parser_head.c index f5ee983b..fefc8212 100644 --- a/Dependency/peg-markdown-highlight/pmh_parser_head.c +++ b/Dependency/peg-markdown-highlight/pmh_parser_head.c @@ -25,6 +25,11 @@ #endif +char *strdup_or_null(char *s) +{ + return (s == NULL) ? NULL : strdup(s); +} + // Alias strdup to _strdup on MSVC: #ifdef _MSC_VER @@ -704,9 +709,9 @@ static pmh_realelement *mk_element(parser_data *p_data, pmh_element_type type, static pmh_realelement *copy_element(parser_data *p_data, pmh_realelement *elem) { pmh_realelement *result = mk_element(p_data, elem->type, elem->pos, elem->end); - result->label = (elem->label == NULL) ? NULL : strdup(elem->label); - result->text = (elem->text == NULL) ? NULL : strdup(elem->text); - result->address = (elem->address == NULL) ? NULL : strdup(elem->address); + result->label = strdup_or_null(elem->label); + result->text = strdup_or_null(elem->text); + result->address = strdup_or_null(elem->address); return result; } @@ -716,7 +721,7 @@ static pmh_realelement *mk_etext(parser_data *p_data, char *string) pmh_realelement *result; assert(string != NULL); result = mk_element(p_data, pmh_EXTRA_TEXT, 0,0); - result->text = strdup(string); + result->text = strdup_or_null(string); return result; } From d105ea622d8d59f0871413bbea0ee1b48e962a47 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 7 Nov 2016 01:20:45 +0800 Subject: [PATCH 200/439] Disable the new rendering strategy This has proven to be problematic because we lost many JavaScript hooks. Will need to think how we can test this more rigorously. Fix #693 for now. --- MacDown/Code/Document/MPDocument.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 40a24792..6e9d5238 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -952,6 +952,15 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html self.manualRender = self.preferences.markdownManualRender; +#if 0 + // Unfortunately this DOM-replacing causes a lot of problems... + // 1. MathJax needs to be triggered. + // 2. Prism rendering is lost. + // 3. Potentially more. + // Essentially all JavaScript needs to be run again after we replace + // the DOM. I have no idea how many more problems there are, so we'll have + // to back off from the path for now... :( + // If we're working on the same document, try not to reload. if (self.isPreviewReady && [self.currentBaseUrl isEqualTo:baseUrl]) { @@ -979,9 +988,11 @@ - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html // Replace everything in the old tag. DOMElement *htmlNode = (DOMElement *)[htmlNodes item:0]; htmlNode.innerHTML = html; + return; } } +#endif // Reload the page if there's not valid tree to work with. [self.preview.mainFrame loadHTMLString:html baseURL:baseUrl]; From 6b5441a396de8d52602444d0929376edbe47275f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 7 Nov 2016 02:52:25 +0800 Subject: [PATCH 201/439] Suggest filename only when doc have no fileURL set Fix #672 (follow up). --- MacDown/Code/Document/MPDocument.m | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 6e9d5238..6640f0ac 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -536,12 +536,6 @@ - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel { savePanel.extensionHidden = NO; - NSString *fileName = self.presumedFileName; - if (fileName && ![fileName hasExtension:@"md"]) - { - fileName = [fileName stringByAppendingPathExtension:@"md"]; - savePanel.nameFieldStringValue = fileName; - } if (self.fileURL && self.fileURL.isFileURL) { NSString *path = self.fileURL.path; @@ -555,6 +549,16 @@ - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel savePanel.directoryURL = [NSURL fileURLWithPath:path]; } + else + { + // Suggest a file name for new documents. + NSString *fileName = self.presumedFileName; + if (fileName && ![fileName hasExtension:@"md"]) + { + fileName = [fileName stringByAppendingPathExtension:@"md"]; + savePanel.nameFieldStringValue = fileName; + } + } savePanel.allowedFileTypes = nil; // Allow all extensions. return [super prepareSavePanel:savePanel]; } From fb20965bcd83c31991ba932145f8346cf7786744 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 10 Nov 2016 22:29:51 +0800 Subject: [PATCH 202/439] Refactor filesToOpen into MPPreferences --- MacDown/Code/Application/MPMainController.m | 11 +++-------- MacDown/Code/Preferences/MPPreferences.h | 3 +++ MacDown/Code/Preferences/MPPreferences.m | 18 ++++++++++++++++++ MacDown/Code/Utility/MPGlobals.h | 3 --- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 0d67201b..493ce2d3 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -217,11 +217,7 @@ - (void)openPendingFiles { NSDocumentController *c = [NSDocumentController sharedDocumentController]; - NSUserDefaults *defaults = [[NSUserDefaults alloc] init]; - NSArray *paths = [defaults objectForKey:kMPFilesToOpenKey - inSuiteNamed:kMPApplicationSuiteName]; - - for (NSString *path in paths) + for (NSString *path in self.prefereces.filesToOpen) { NSURL *url = [NSURL fileURLWithPath:path]; if ([url checkResourceIsReachableAndReturnError:NULL]) @@ -235,9 +231,8 @@ - (void)openPendingFiles } } - [defaults setObject:@[] forKey:kMPFilesToOpenKey - inSuiteNamed:kMPApplicationSuiteName]; - [defaults synchronize]; + self.prefereces.filesToOpen = nil; + [self.prefereces synchronize]; treat(); } diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 9261ef88..7d7e98ae 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -79,4 +79,7 @@ extern NSString * const MPDidDetectFreshInstallationNotification; - (instancetype)init; +// Convinience methods. +@property (nonatomic, assign) NSArray *filesToOpen; + @end diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index bf722e99..6944d4b5 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -7,6 +7,8 @@ // #import "MPPreferences.h" +#import "NSUserDefaults+Suite.h" +#import "MPGlobals.h" typedef NS_ENUM(NSUInteger, MPUnorderedListMarkerType) @@ -32,6 +34,9 @@ typedef NS_ENUM(NSUInteger, MPUnorderedListMarkerType) static NSString * const kMPDefaultEditorThemeName = @"Tomorrow+"; static NSString * const kMPDefaultHtmlStyleName = @"GitHub2"; +static NSString * const kMPApplicationSuiteName = @"com.uranusjr.macdown"; +static NSString * const kMPFilesToOpenKey = @"filesToOpenOnNextLaunch"; + @implementation MPPreferences @@ -167,6 +172,19 @@ - (NSString *)editorUnorderedListMarker } } +- (NSArray *)filesToOpen +{ + return [self.userDefaults objectForKey:kMPFilesToOpenKey + inSuiteNamed:kMPApplicationSuiteName]; +} + +- (void)setFilesToOpen:(NSArray *)filesToOpen +{ + [self.userDefaults setObject:filesToOpen + forKey:kMPFilesToOpenKey + inSuiteNamed:kMPApplicationSuiteName]; +} + #pragma mark - Private diff --git a/MacDown/Code/Utility/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h index 9fb7e157..00e2036c 100644 --- a/MacDown/Code/Utility/MPGlobals.h +++ b/MacDown/Code/Utility/MPGlobals.h @@ -10,11 +10,8 @@ // These should match the main bundle's values. static NSString * const kMPApplicationName = @"MacDown"; -static NSString * const kMPApplicationSuiteName = @"com.uranusjr.macdown"; static NSString * const kMPCommandName = @"macdown"; static NSString * const kMPHelpKey = @"help"; static NSString * const kMPVersionKey = @"version"; - -static NSString * const kMPFilesToOpenKey = @"filesToOpenOnNextLaunch"; From 27ec6bc3314bfe74516192cbcf5799e64776e5d9 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 10 Nov 2016 22:35:31 +0800 Subject: [PATCH 203/439] Supress new doc when launching with pending files Fix #697 --- MacDown/Code/Application/MPMainController.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 493ce2d3..dcaea3f4 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -155,6 +155,8 @@ - (instancetype)init - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender { + if (self.prefereces.filesToOpen.count) + return NO; return !self.prefereces.supressesUntitledDocumentOnLaunch; } From 8c8cb106e6c33e7f56f3ea637d5f0ad529489b92 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 11 Nov 2016 03:31:31 +0800 Subject: [PATCH 204/439] Make Travis wait for pod install --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ab7d4e9b..efa2c6a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,6 @@ osx_image: xcode7 language: objective-c install: - "bundle install" - - "bundle exec pod install" + - "travis_wait bundle exec pod install" xcode_workspace: MacDown.xcworkspace xcode_scheme: MacDown From 4f523c63c74863027434534d5e4fe5fd7dd29c49 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 11 Nov 2016 03:34:08 +0800 Subject: [PATCH 205/439] Enable Cocoapods caching for build speed-up --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index efa2c6a8..e1be5593 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ osx_image: xcode7 language: objective-c +cache: + - bundler + - cocoapods install: - "bundle install" - "travis_wait bundle exec pod install" From 89274eb68d6d42644fd3bf96d1b250808f287452 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 11 Nov 2016 12:57:06 +0800 Subject: [PATCH 206/439] Move shared constants to Global include --- MacDown/Code/Preferences/MPPreferences.m | 3 --- MacDown/Code/Utility/MPGlobals.h | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 6944d4b5..658c8aae 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -34,9 +34,6 @@ typedef NS_ENUM(NSUInteger, MPUnorderedListMarkerType) static NSString * const kMPDefaultEditorThemeName = @"Tomorrow+"; static NSString * const kMPDefaultHtmlStyleName = @"GitHub2"; -static NSString * const kMPApplicationSuiteName = @"com.uranusjr.macdown"; -static NSString * const kMPFilesToOpenKey = @"filesToOpenOnNextLaunch"; - @implementation MPPreferences diff --git a/MacDown/Code/Utility/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h index 00e2036c..9fb7e157 100644 --- a/MacDown/Code/Utility/MPGlobals.h +++ b/MacDown/Code/Utility/MPGlobals.h @@ -10,8 +10,11 @@ // These should match the main bundle's values. static NSString * const kMPApplicationName = @"MacDown"; +static NSString * const kMPApplicationSuiteName = @"com.uranusjr.macdown"; static NSString * const kMPCommandName = @"macdown"; static NSString * const kMPHelpKey = @"help"; static NSString * const kMPVersionKey = @"version"; + +static NSString * const kMPFilesToOpenKey = @"filesToOpenOnNextLaunch"; From f1af9f8f1f591171018451fb42654235ee4ba534 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 25 Dec 2016 15:06:48 +0800 Subject: [PATCH 207/439] Add link to SayThanks.io --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 16abdd23..d76ff733 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![](https://img.shields.io/github/release/MacDownApp/macdown.svg)](http://macdown.uranusjr.com/download/latest/) ![Total downloads](https://img.shields.io/github/downloads/MacDownApp/macdown/latest/total.svg) [![Build Status](https://travis-ci.org/MacDownApp/macdown.svg?branch=master)](https://travis-ci.org/MacDownApp/macdown) +[![Say Thanks!](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg)](https://saythanks.io/to/uranusjr) MacDown is an open source Markdown editor for OS X, released under the MIT License. The author stole the idea from [Chen Luo](https://twitter.com/chenluois)’s [Mou](http://mouapp.com) so that people can [make crappy clones](https://twitter.com/remaerd/status/484914820408279040). From c42668142c8cfb25e284cca80d01609bf4f69dd5 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 6 Jan 2017 13:25:01 +0800 Subject: [PATCH 208/439] Using MASPreferences version 1.1.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There’s a bug in 1.1.2 which has been fixed in 1.1.3. Caused build error “-fobjc-arc is not supported on versions of OS X prior to 10.6”. Fixes issue #633 --- Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile b/Podfile index 88558d6e..b42562c1 100644 --- a/Podfile +++ b/Podfile @@ -10,7 +10,7 @@ target "MacDown" do pod 'JJPluralForm', '~> 2.1' # Plural form localization. pod 'LibYAML', '~> 0.1', :inhibit_warnings => true pod 'M13OrderedDictionary', '~> 1.1' - pod 'MASPreferences', '~> 1.1' # Preference window. + pod 'MASPreferences', '~> 1.1.3' # Preference window. pod 'PAPreferences', '~> 0.4' # Preference singleton (Locked until we drop 10.8 support). pod 'Sparkle', '~> 1.13' # Updater. end From 3a69f5f7c965b646f340f706a8b0fd69340ab414 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 6 Jan 2017 13:27:01 +0800 Subject: [PATCH 209/439] Corrected indentation --- Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile b/Podfile index b42562c1..d308262b 100644 --- a/Podfile +++ b/Podfile @@ -10,7 +10,7 @@ target "MacDown" do pod 'JJPluralForm', '~> 2.1' # Plural form localization. pod 'LibYAML', '~> 0.1', :inhibit_warnings => true pod 'M13OrderedDictionary', '~> 1.1' - pod 'MASPreferences', '~> 1.1.3' # Preference window. + pod 'MASPreferences', '~> 1.1.3' # Preference window. pod 'PAPreferences', '~> 0.4' # Preference singleton (Locked until we drop 10.8 support). pod 'Sparkle', '~> 1.13' # Updater. end From 68e46ce7269ba845e9ab2c0fce476b3d17c1cd67 Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Fri, 6 Jan 2017 17:01:58 -0500 Subject: [PATCH 210/439] Bump CocoaPods version to latest --- .gitignore | 1 + Gemfile | 2 +- Gemfile.lock | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 Gemfile.lock diff --git a/.gitignore b/.gitignore index 5f8a14a3..b784729b 100644 --- a/.gitignore +++ b/.gitignore @@ -170,6 +170,7 @@ xcuserdata # This needs to be included explicitly because we excluded *.lock previously. !Podfile.lock +!Gemfile.lock Build/ Pods/ diff --git a/Gemfile b/Gemfile index b8952c89..4b989798 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,3 @@ source 'https://rubygems.org/' -gem 'cocoapods', '0.39.0' +gem 'cocoapods', '~> 1.1' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..fd0bdd75 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,73 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (2.3.4) + activesupport (4.2.7.1) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + claide (1.0.1) + cocoapods (1.1.1) + activesupport (>= 4.0.2, < 5) + claide (>= 1.0.1, < 2.0) + cocoapods-core (= 1.1.1) + cocoapods-deintegrate (>= 1.0.1, < 2.0) + cocoapods-downloader (>= 1.1.2, < 2.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-stats (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.1.1, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored (~> 1.2) + escape (~> 0.0.4) + fourflusher (~> 2.0.1) + gh_inspector (~> 1.0) + molinillo (~> 0.5.1) + nap (~> 1.0) + xcodeproj (>= 1.3.3, < 2.0) + cocoapods-core (1.1.1) + activesupport (>= 4.0.2, < 5) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + cocoapods-deintegrate (1.0.1) + cocoapods-downloader (1.1.3) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.0) + cocoapods-stats (1.0.0) + cocoapods-trunk (1.1.2) + nap (>= 0.8, < 2.0) + netrc (= 0.7.8) + cocoapods-try (1.1.0) + colored (1.2) + escape (0.0.4) + fourflusher (2.0.1) + fuzzy_match (2.0.4) + gh_inspector (1.0.2) + i18n (0.7.0) + json (1.8.3) + minitest (5.10.1) + molinillo (0.5.4) + nanaimo (0.2.3) + nap (1.1.0) + netrc (0.7.8) + thread_safe (0.3.5) + tzinfo (1.2.2) + thread_safe (~> 0.1) + xcodeproj (1.4.2) + CFPropertyList (~> 2.3.3) + activesupport (>= 3) + claide (>= 1.0.1, < 2.0) + colored (~> 1.2) + nanaimo (~> 0.2.3) + +PLATFORMS + ruby + +DEPENDENCIES + cocoapods (~> 1.1) + +BUNDLED WITH + 1.13.7 From f37e238ed2160508e9efe965d0ce68d1f4716354 Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Sat, 7 Jan 2017 02:00:31 -0500 Subject: [PATCH 211/439] Rename `xcodeproj` to `project` According to [documentation][1]: > `xcodeproj` is deprecated in 1.0 and has been renamed to `project`. > For pre-1.0 versions use `xcodeproj`. [1]: https://guides.cocoapods.org/syntax/podfile.html#xcodeproj --- Podfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile b/Podfile index d308262b..c5639ad6 100644 --- a/Podfile +++ b/Podfile @@ -2,7 +2,7 @@ # platform :ios, "6.0" source 'https://github.com/CocoaPods/Specs.git' -xcodeproj 'MacDown.xcodeproj' +project 'MacDown.xcodeproj' target "MacDown" do pod 'handlebars-objc', '~> 1.4' From 9d1e1ea844c96b0f839f8c2f195c386c91fed78d Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Sat, 7 Jan 2017 02:57:36 -0500 Subject: [PATCH 212/439] Use `xcodebuild` instead of `xctool` From [xctool][1]: > Support for building projects with xctool is deprecated and isn't > supported in Xcode 8 and later. [1]: https://github.com/facebook/xctool/tree/0.3.1#building-xcode-7-only --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e1be5593..4ba7377b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,5 +6,7 @@ cache: install: - "bundle install" - "travis_wait bundle exec pod install" -xcode_workspace: MacDown.xcworkspace -xcode_scheme: MacDown +before_script: + - set -o pipefail +script: + - xcodebuild -workspace MacDown.xcworkspace -scheme MacDown test | xcpretty From 9536e9a1f3da99f30e3fcd1c57d81aafda0b4954 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 7 Jan 2017 22:42:31 +0800 Subject: [PATCH 213/439] New podlock and porject files for CocoaPods 1.1 --- MacDown.xcodeproj/project.pbxproj | 136 +++++++++++++++++------------- Podfile.lock | 10 ++- 2 files changed, 82 insertions(+), 64 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index f142fb0d..ab473d06 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -80,11 +80,11 @@ 1FFEB3271972DAB400B2254F /* MPHTMLTabularizeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFEB3261972DAB400B2254F /* MPHTMLTabularizeTests.m */; }; 1FFEB32B19737D6E00B2254F /* YAMLSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -Wno-unused-variable"; }; }; 1FFF301D1948A5320009AF24 /* MPStringLookupTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */; }; - 5318159056384894AA42DB4F /* libPods-MacDownTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEAF42BBDCEC4012B5092BB3 /* libPods-MacDownTests.a */; }; - 5807564D5F35BA9758A64530 /* libPods-macdown-cmd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AFCF7AEBCE081BD528ABC3D /* libPods-macdown-cmd.a */; }; + 770BB49E962A302D0715A6A5 /* libPods-MacDown.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */; }; 905EF1A9196164CA00FC3CE9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 905EF1A8196164CA00FC3CE9 /* Foundation.framework */; }; 905EF1B7196164F300FC3CE9 /* macdown in Copy Command Line Utility */ = {isa = PBXBuildFile; fileRef = 905EF1A7196164CA00FC3CE9 /* macdown */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - B49728377A904875B2963C38 /* libPods-MacDown.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C5C1FBBB3ED456285901D31 /* libPods-MacDown.a */; }; + B5C5C1666A506FEA86435D25 /* libPods-macdown-cmd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */; }; + EBFE3157737058F5A63699C8 /* libPods-MacDownTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C949FDE45493AE77DAD9BF4 /* libPods-MacDownTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -143,6 +143,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0D0EC0DE9FEA22F962083921 /* Pods-MacDownTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.release.xcconfig"; sourceTree = ""; }; + 1A198D1BA59D710201DD3BC8 /* Pods-MacDown.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.debug.xcconfig"; sourceTree = ""; }; 1F002A21195B3DAE008B8D93 /* MPRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRenderer.h; sourceTree = ""; }; 1F002A22195B3DAE008B8D93 /* MPRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRenderer.m; sourceTree = ""; }; 1F0D9D5E194AC7CF008E1856 /* NSString+Lookup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Lookup.h"; sourceTree = ""; }; @@ -261,18 +263,16 @@ 1FFEB32919737D6E00B2254F /* YAMLSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YAMLSerialization.h; sourceTree = ""; }; 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YAMLSerialization.m; sourceTree = ""; }; 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLookupTests.m; sourceTree = ""; }; + 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-macdown-cmd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 39EFCAE04F60154F0C8C5469 /* Pods-MacDown.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.release.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.release.xcconfig"; sourceTree = ""; }; + 3C949FDE45493AE77DAD9BF4 /* libPods-MacDownTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDownTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 3D175F0F1974282400A5EFE8 /* WebView+WebViewPrivateHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WebView+WebViewPrivateHeaders.h"; sourceTree = ""; }; - 481332E4A369446F177A8DF0 /* Pods-MacDown.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.release.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.release.xcconfig"; sourceTree = ""; }; - 4AFCF7AEBCE081BD528ABC3D /* libPods-macdown-cmd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-macdown-cmd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 632F686FDE66C78EBA2ABB7B /* Pods-macdown-cmd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.debug.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.debug.xcconfig"; sourceTree = ""; }; - 7C5C1FBBB3ED456285901D31 /* libPods-MacDown.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDown.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDown.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4DBAA63927A60EB2150642B3 /* Pods-macdown-cmd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.debug.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.debug.xcconfig"; sourceTree = ""; }; + 7A8EA75FA95818275755F0B6 /* Pods-macdown-cmd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.release.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.release.xcconfig"; sourceTree = ""; }; + 8CDC5EA0050D2F722FB1AADD /* Pods-MacDownTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.debug.xcconfig"; sourceTree = ""; }; 905EF1A7196164CA00FC3CE9 /* macdown */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macdown; sourceTree = BUILT_PRODUCTS_DIR; }; 905EF1A8196164CA00FC3CE9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - A9105A2DE3384B0DB400BAD1 /* Pods-MacDown.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.debug.xcconfig"; sourceTree = ""; }; - AEAF42BBDCEC4012B5092BB3 /* libPods-MacDownTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDownTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - BDCDF2E157FE72C2ED7438DD /* Pods-MacDownTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.release.xcconfig"; sourceTree = ""; }; - E352E0A2562DCE60302D805E /* Pods-MacDownTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.debug.xcconfig"; sourceTree = ""; }; - E87590C145FF88E3F084D54C /* Pods-macdown-cmd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.release.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -283,7 +283,7 @@ 1FF1420219A8987500CF8A6A /* JavaScriptCore.framework in Frameworks */, 1FF207631941CF22005B5654 /* WebKit.framework in Frameworks */, 1FA6DE251941CC9E000409FB /* Cocoa.framework in Frameworks */, - B49728377A904875B2963C38 /* libPods-MacDown.a in Frameworks */, + 770BB49E962A302D0715A6A5 /* libPods-MacDown.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -293,7 +293,7 @@ files = ( 1FA6DE481941CC9E000409FB /* Cocoa.framework in Frameworks */, 1FC29F5C1944FC2600D616C7 /* XCTest.framework in Frameworks */, - 5318159056384894AA42DB4F /* libPods-MacDownTests.a in Frameworks */, + EBFE3157737058F5A63699C8 /* libPods-MacDownTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -302,7 +302,7 @@ buildActionMask = 2147483647; files = ( 905EF1A9196164CA00FC3CE9 /* Foundation.framework in Frameworks */, - 5807564D5F35BA9758A64530 /* libPods-macdown-cmd.a in Frameworks */, + B5C5C1666A506FEA86435D25 /* libPods-macdown-cmd.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -491,7 +491,7 @@ 905EF1AA196164CA00FC3CE9 /* macdown-cmd */, 1FA6DE231941CC9E000409FB /* Frameworks */, 1FA6DE221941CC9E000409FB /* Products */, - FF36D9424F9F1EFC35FA3D33 /* Pods */, + AC6D1A361B8B63012D598BC7 /* Pods */, ); sourceTree = ""; usesTabs = 0; @@ -516,9 +516,9 @@ 1FA6DE241941CC9E000409FB /* Cocoa.framework */, 905EF1A8196164CA00FC3CE9 /* Foundation.framework */, 1FA6DE261941CC9E000409FB /* Other Frameworks */, - 7C5C1FBBB3ED456285901D31 /* libPods-MacDown.a */, - AEAF42BBDCEC4012B5092BB3 /* libPods-MacDownTests.a */, - 4AFCF7AEBCE081BD528ABC3D /* libPods-macdown-cmd.a */, + 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */, + 3C949FDE45493AE77DAD9BF4 /* libPods-MacDownTests.a */, + 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */, ); name = Frameworks; sourceTree = ""; @@ -624,15 +624,15 @@ path = "MacDown-cmd"; sourceTree = ""; }; - FF36D9424F9F1EFC35FA3D33 /* Pods */ = { + AC6D1A361B8B63012D598BC7 /* Pods */ = { isa = PBXGroup; children = ( - A9105A2DE3384B0DB400BAD1 /* Pods-MacDown.debug.xcconfig */, - 481332E4A369446F177A8DF0 /* Pods-MacDown.release.xcconfig */, - E352E0A2562DCE60302D805E /* Pods-MacDownTests.debug.xcconfig */, - BDCDF2E157FE72C2ED7438DD /* Pods-MacDownTests.release.xcconfig */, - 632F686FDE66C78EBA2ABB7B /* Pods-macdown-cmd.debug.xcconfig */, - E87590C145FF88E3F084D54C /* Pods-macdown-cmd.release.xcconfig */, + 1A198D1BA59D710201DD3BC8 /* Pods-MacDown.debug.xcconfig */, + 39EFCAE04F60154F0C8C5469 /* Pods-MacDown.release.xcconfig */, + 8CDC5EA0050D2F722FB1AADD /* Pods-MacDownTests.debug.xcconfig */, + 0D0EC0DE9FEA22F962083921 /* Pods-MacDownTests.release.xcconfig */, + 4DBAA63927A60EB2150642B3 /* Pods-macdown-cmd.debug.xcconfig */, + 7A8EA75FA95818275755F0B6 /* Pods-macdown-cmd.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -644,15 +644,15 @@ isa = PBXNativeTarget; buildConfigurationList = 1FA6DE551941CC9E000409FB /* Build configuration list for PBXNativeTarget "MacDown" */; buildPhases = ( - A4C68C7905CF45C89A0CC47D /* Check Pods Manifest.lock */, + B4334ECDC0751C835C1600D7 /* [CP] Check Pods Manifest.lock */, 1FA6DE1D1941CC9E000409FB /* Sources */, 1FA6DE1E1941CC9E000409FB /* Frameworks */, 1FF16580199A6C950080D9A5 /* Fetch Prism Resources */, 1FA6DE1F1941CC9E000409FB /* Resources */, - 46C28C219A3C4CCD94797747 /* Copy Pods Resources */, 1F8A82A81952F19B00B6BF69 /* Update Build Number */, 905EF1B6196164E300FC3CE9 /* Copy Command Line Utility */, - 91FE3BB20F0F45435A80C717 /* Embed Pods Frameworks */, + C5B8C48273E72106885CA8C4 /* [CP] Embed Pods Frameworks */, + 1E02F0A95AAEBCEF65493F5F /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -669,12 +669,12 @@ isa = PBXNativeTarget; buildConfigurationList = 1FA6DE581941CC9E000409FB /* Build configuration list for PBXNativeTarget "MacDownTests" */; buildPhases = ( - 694A3D57598E431C90D512B9 /* Check Pods Manifest.lock */, + 655CCD821E310F9767572216 /* [CP] Check Pods Manifest.lock */, 1FA6DE411941CC9E000409FB /* Sources */, 1FA6DE421941CC9E000409FB /* Frameworks */, 1FA6DE431941CC9E000409FB /* Resources */, - 72CBA169CC684D3CB9F83627 /* Copy Pods Resources */, - E28FA180AF86F997B4FBB4BD /* Embed Pods Frameworks */, + 9041D3A827C49F34399D813E /* [CP] Embed Pods Frameworks */, + DF04CC0F24ACD058236B0705 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -690,10 +690,11 @@ isa = PBXNativeTarget; buildConfigurationList = 905EF1B3196164CA00FC3CE9 /* Build configuration list for PBXNativeTarget "macdown-cmd" */; buildPhases = ( - 8354BB1F574EFC071D91C89B /* Check Pods Manifest.lock */, + 6C852F8D7610992AEEA172AE /* [CP] Check Pods Manifest.lock */, 905EF1A3196164CA00FC3CE9 /* Sources */, 905EF1A4196164CA00FC3CE9 /* Frameworks */, 905EF1A5196164CA00FC3CE9 /* Copy Files */, + 2B0BC8078DAD9D2E3F7D6027 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -795,6 +796,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1E02F0A95AAEBCEF65493F5F /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 1F8A82A81952F19B00B6BF69 /* Update Build Number */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -825,109 +841,109 @@ shellScript = "SOURCE=\"$PWD/Dependency/prism\"\nTARGET=\"$PWD/MacDown/Resources/Prism\"\nrm -rf \"$TARGET\"\nmkdir -p \"$TARGET\"\ncp -r \"$SOURCE/components\" \"$TARGET\"\ncp -r \"$SOURCE/themes\" \"$TARGET\"\ncp -r \"$SOURCE/plugins\" \"$TARGET\"\ncp -r \"$SOURCE/components.js\" \"$TARGET\""; showEnvVarsInLog = 0; }; - 46C28C219A3C4CCD94797747 /* Copy Pods Resources */ = { + 2B0BC8078DAD9D2E3F7D6027 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy Pods Resources"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 694A3D57598E431C90D512B9 /* Check Pods Manifest.lock */ = { + 655CCD821E310F9767572216 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Check Pods Manifest.lock"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - 72CBA169CC684D3CB9F83627 /* Copy Pods Resources */ = { + 6C852F8D7610992AEEA172AE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy Pods Resources"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests-resources.sh\"\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - 8354BB1F574EFC071D91C89B /* Check Pods Manifest.lock */ = { + 9041D3A827C49F34399D813E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 91FE3BB20F0F45435A80C717 /* Embed Pods Frameworks */ = { + B4334ECDC0751C835C1600D7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - A4C68C7905CF45C89A0CC47D /* Check Pods Manifest.lock */ = { + C5B8C48273E72106885CA8C4 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - E28FA180AF86F997B4FBB4BD /* Embed Pods Frameworks */ = { + DF04CC0F24ACD058236B0705 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests-frameworks.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -1200,7 +1216,7 @@ }; 1FA6DE561941CC9E000409FB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A9105A2DE3384B0DB400BAD1 /* Pods-MacDown.debug.xcconfig */; + baseConfigurationReference = 1A198D1BA59D710201DD3BC8 /* Pods-MacDown.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; @@ -1217,7 +1233,7 @@ }; 1FA6DE571941CC9E000409FB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 481332E4A369446F177A8DF0 /* Pods-MacDown.release.xcconfig */; + baseConfigurationReference = 39EFCAE04F60154F0C8C5469 /* Pods-MacDown.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; @@ -1234,7 +1250,7 @@ }; 1FA6DE591941CC9E000409FB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E352E0A2562DCE60302D805E /* Pods-MacDownTests.debug.xcconfig */; + baseConfigurationReference = 8CDC5EA0050D2F722FB1AADD /* Pods-MacDownTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MacDown.app/Contents/MacOS/MacDown"; CLANG_ENABLE_MODULES = NO; @@ -1264,7 +1280,7 @@ }; 1FA6DE5A1941CC9E000409FB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BDCDF2E157FE72C2ED7438DD /* Pods-MacDownTests.release.xcconfig */; + baseConfigurationReference = 0D0EC0DE9FEA22F962083921 /* Pods-MacDownTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MacDown.app/Contents/MacOS/MacDown"; CLANG_ENABLE_MODULES = NO; @@ -1290,7 +1306,7 @@ }; 905EF1B1196164CA00FC3CE9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 632F686FDE66C78EBA2ABB7B /* Pods-macdown-cmd.debug.xcconfig */; + baseConfigurationReference = 4DBAA63927A60EB2150642B3 /* Pods-macdown-cmd.debug.xcconfig */; buildSettings = { GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ""; @@ -1305,7 +1321,7 @@ }; 905EF1B2196164CA00FC3CE9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E87590C145FF88E3F084D54C /* Pods-macdown-cmd.release.xcconfig */; + baseConfigurationReference = 7A8EA75FA95818275755F0B6 /* Pods-macdown-cmd.release.xcconfig */; buildSettings = { GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = ""; diff --git a/Podfile.lock b/Podfile.lock index a817d7f1..47b0e0cb 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -7,7 +7,7 @@ PODS: - JJPluralForm (2.1) - LibYAML (0.1.4) - M13OrderedDictionary (1.1.0) - - MASPreferences (1.1.2) + - MASPreferences (1.1.4) - PAPreferences (0.5) - Sparkle (1.13.1) @@ -18,7 +18,7 @@ DEPENDENCIES: - JJPluralForm (~> 2.1) - LibYAML (~> 0.1) - M13OrderedDictionary (~> 1.1) - - MASPreferences (~> 1.1) + - MASPreferences (~> 1.1.3) - PAPreferences (~> 0.4) - Sparkle (~> 1.13) @@ -29,8 +29,10 @@ SPEC CHECKSUMS: JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 M13OrderedDictionary: 6e157fe9c82aa6b3cd7198f5c5c30c7a6834c4a6 - MASPreferences: 32d8a2c5ef1d60b63240f5676b011ff72e194cb1 + MASPreferences: 7bdcfe891d7840453cf48f95fa866c3e152ace7a PAPreferences: 9f0ffb1e67174a0df001af9d3320166ceb9ee6f5 Sparkle: 2fbd47b869621d1e679c7554e3e19dda02104818 -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: 96c5c597eb1bc6ff129b3ca19cad3a7ca134972d + +COCOAPODS: 1.1.1 From 1a2cbcc47cdee54d4cece2c79f4633282ca5704e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 7 Jan 2017 22:51:38 +0800 Subject: [PATCH 214/439] Thanking the whole MacDown team! --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d76ff733..04214676 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![](https://img.shields.io/github/release/MacDownApp/macdown.svg)](http://macdown.uranusjr.com/download/latest/) ![Total downloads](https://img.shields.io/github/downloads/MacDownApp/macdown/latest/total.svg) [![Build Status](https://travis-ci.org/MacDownApp/macdown.svg?branch=master)](https://travis-ci.org/MacDownApp/macdown) -[![Say Thanks!](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg)](https://saythanks.io/to/uranusjr) +[![Say Thanks!](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg)](https://saythanks.io/to/macdown) MacDown is an open source Markdown editor for OS X, released under the MIT License. The author stole the idea from [Chen Luo](https://twitter.com/chenluois)’s [Mou](http://mouapp.com) so that people can [make crappy clones](https://twitter.com/remaerd/status/484914820408279040). From 42edd989a35414a62e4ed671ad3860d5d6686b90 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 7 Jan 2017 23:04:55 +0800 Subject: [PATCH 215/439] Fix typos in CONTRIBUTING.md Close #586. --- CONTRIBUTING.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ec202b50..1ed67965 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,13 +27,13 @@ Exception: If a URL in a comment is too long, it can go over the limit. This hap * Braces go in separate lines. ([Allman style](http://en.wikipedia.org/wiki/Indent_style#Allman_style).) * If only one statement is contained inside the block, omit braces unless... - * This is part of a if-(else if-)else structure. All brace styles in the same structure should match (i.e. either non or all of them omit braces). + * This is part of an if-(else if-)else structure. All brace styles in the same structure should match (i.e. either non or all of them omit braces). #### Stetements Inside `if`, `while`, etc. * Prefer implicit boolean conversion when it makes sense. * `if (str.length)` is better than `if (str.length != 0)` if you want to know whether a string is empty. - * The same applies when checking for object `nil`-ness. + * The same applies when checking for an object’s `nil`-ness. * If what you want to compare against is *zero as a number*, not emptiness, such as for `NSRange` position, `NSPoint` coordinates, etc., *do* use the `== 0`/`!= 0` expression. * If statements need to span multiple lines, prefer putting logical operators at the *beginning* of the line. @@ -88,7 +88,7 @@ Exception: If a URL in a comment is too long, it can go over the limit. This hap Always use *four spaces* instead of tabs for indentation. Trailing whitespaces should be removed. You can turn on the **Automatically trim trailing whitespace** option in Xcode to let it do the job for you. -Try to ensure that there’s a trailing newline in the end of a file. This is not strictly enforced since there are not easy ways to do that (except checking manually), but I’d appriciate the effort. +Try to ensure that there’s a trailing newline in the end of a file. This is not strictly enforced since there are no easy ways to do that (except checking manually), but I’d appriciate the effort. ## Version Control @@ -96,16 +96,16 @@ MacDown uses Git for source control, and is hosted on GitHub. ### Commit Messages -[General rules](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) apply. If you absolutely need to, the first line of the message *can* go as long as 72 (instead of 50), but it must not exceed it. +[General rules](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) apply. If you absolutely need to, the first line of the message *can* go as long as 72 (instead of 50) characters, but it must not exceed it. -Xcode’s commit window does not do a good job indicating whether your commit message is well-formed. I seldom use it personally, but if you do, you can check whether the commit message is good after you push to GitHub—If you see the first line of you commit message gets truncated, it is too long. +Xcode’s commit window does not do a good job indicating whether your commit message is well-formed. I seldom use it personally, but if you do, you can check whether the commit message is good after you push to GitHub—If you see the first line of your commit message getting truncated, it is too long. ### Pull Requests Please rebase your branch to `master` when you submit the pull request. There can be some nagging bugs when Git tries to merge files that are not code, particularly `.xib` and project files. When in doubt, always consider splitting changes into smaller commits so that you won’t need to re-apply your changes when things break. -Under certain circumstances I may wish you perform furthur rebasing and/or squashing *after* you submit your pull request, or even perform them myself instead of merging your commits as-is. Don’t worry—you will always get full credits for your contribution. +Under certain circumstances I may wish you to perform further rebasing and/or squashing *after* you submit your pull request, or even perform them myself instead of merging your commits as-is. Don’t worry—you will always get full credits for your contribution. ## More to Come -This style guide is a work in progress. Please feel free to ask is you have any questions about it. I’ll add more rules if there’s ambiguity. +This style guide is a work in progress. Please feel free to ask if you have any questions about it. I’ll add more rules if there’s ambiguity. From 698a3fc864509654f7e58f97e6b5c69e24216e79 Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Sun, 8 Jan 2017 03:35:34 -0500 Subject: [PATCH 216/439] Add installation guide to README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 04214676..819e4e25 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,12 @@ MacDown is an open source Markdown editor for OS X, released under the MIT Licen Visit the [project site](http://macdown.uranusjr.com/) for more information, or download [MacDown.app.zip](http://macdown.uranusjr.com/download/latest/) directly from the [latest releases](https://github.com/MacDownApp/macdown/releases/latest) page. +## Install + +[Download](http://macdown.uranusjr.com/download/latest/), unzip, and drag the app to Applications folder. MacDown is also available through [Homebrew Cask](https://caskroom.github.io/): + + brew cask install macdown + ## License MacDown is released under the terms of MIT License. You may find the content of the license [here](http://opensource.org/licenses/MIT), or inside the `LICENSE` directory. From 5138165bb732e6628b596d2fe518931047098089 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Wed, 25 Jan 2017 17:25:29 +0800 Subject: [PATCH 217/439] Modified macdown shell utility usage info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed “version” and “[option]” --- macdown-cmd/MPArgumentProcessor.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macdown-cmd/MPArgumentProcessor.m b/macdown-cmd/MPArgumentProcessor.m index 9cdf4465..30533128 100644 --- a/macdown-cmd/MPArgumentProcessor.m +++ b/macdown-cmd/MPArgumentProcessor.m @@ -39,7 +39,7 @@ - (instancetype)init options.applicationName = ^{ return kMPApplicationName; }; options.printHelpHeader = ^{ NSString *fmt = - @"usage: %@ version [option] ... file [file ...]\n\nOptions:"; + @"usage: %@ [file ...]\n\nOptions:"; return [NSString stringWithFormat:fmt, kMPCommandName]; }; [options registerOption:'v' long:kMPVersionKey From 1e4940b0af79c6045704ad978a65491ed41e44fa Mon Sep 17 00:00:00 2001 From: Peter Kaminski Date: Sun, 29 Jan 2017 16:04:55 -0500 Subject: [PATCH 218/439] Fix logo image URL The URL currently in help.md returns a 404. I guessed what the URL should be based on the image on the home page, with "-160" added, and it looks like it works. --- MacDown/Resources/help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Resources/help.md b/MacDown/Resources/help.md index 36af8481..1d92b49e 100644 --- a/MacDown/Resources/help.md +++ b/MacDown/Resources/help.md @@ -1,6 +1,6 @@ # MacDown -![MacDown logo](http://macdown.uranusjr.com/static/base/img/logo-160.png) +![MacDown logo](http://macdown.uranusjr.com/static/images/logo-160.png) Hello there! I’m **MacDown**, the open source Markdown editor for OS X. From f7635fda797780eb61095ae9280cb479b126faa8 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 3 Feb 2017 00:44:24 +0800 Subject: [PATCH 219/439] Support for piping text to macdown utility Text piped to the macdown shell utility is inserted into a new untitled document --- MacDown/Code/Application/MPMainController.m | 26 +++++++++++- MacDown/Code/Preferences/MPPreferences.h | 1 + MacDown/Code/Preferences/MPPreferences.m | 11 ++++++ MacDown/Code/Utility/MPGlobals.h | 1 + macdown-cmd/main.m | 44 +++++++++++++++++++++ 5 files changed, 81 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index dcaea3f4..2c4f3c1b 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -18,6 +18,7 @@ #import "MPMarkdownPreferencesViewController.h" #import "MPEditorPreferencesViewController.h" #import "MPHtmlPreferencesViewController.h" +#import "MPDocument.h" static NSString * const kMPTreatLastSeenStampKey = @"treatLastSeenStamp"; @@ -155,14 +156,16 @@ - (instancetype)init - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender { - if (self.prefereces.filesToOpen.count) + if (self.prefereces.filesToOpen.count || self.prefereces.pipedContentFileToOpen) return NO; return !self.prefereces.supressesUntitledDocumentOnLaunch; } - (void)applicationDidBecomeActive:(NSNotification *)notification { + [self openPendingPipedContent]; [self openPendingFiles]; + treat(); } @@ -235,7 +238,26 @@ - (void)openPendingFiles self.prefereces.filesToOpen = nil; [self.prefereces synchronize]; - treat(); +} + +- (void)openPendingPipedContent { + NSDocumentController *c = [NSDocumentController sharedDocumentController]; + + if (self.prefereces.pipedContentFileToOpen) { + NSURL *pipedContentFileToOpenURL = [NSURL fileURLWithPath:self.prefereces.pipedContentFileToOpen]; + NSError *readPipedContentError; + NSString *pipedContentString = [NSString stringWithContentsOfURL:pipedContentFileToOpenURL encoding:NSUTF8StringEncoding error:&readPipedContentError]; + + NSError *openDocumentError; + MPDocument *document = (MPDocument *)[c openUntitledDocumentAndDisplay:YES error:&openDocumentError]; + + if (document && openDocumentError == nil && readPipedContentError == nil) { + document.markdown = pipedContentString; + } + + self.prefereces.pipedContentFileToOpen = nil; + [self.prefereces synchronize]; + } } diff --git a/MacDown/Code/Preferences/MPPreferences.h b/MacDown/Code/Preferences/MPPreferences.h index 7d7e98ae..3d1b417d 100644 --- a/MacDown/Code/Preferences/MPPreferences.h +++ b/MacDown/Code/Preferences/MPPreferences.h @@ -81,5 +81,6 @@ extern NSString * const MPDidDetectFreshInstallationNotification; // Convinience methods. @property (nonatomic, assign) NSArray *filesToOpen; +@property (nonatomic, assign) NSString *pipedContentFileToOpen; @end diff --git a/MacDown/Code/Preferences/MPPreferences.m b/MacDown/Code/Preferences/MPPreferences.m index 658c8aae..63f82ed4 100644 --- a/MacDown/Code/Preferences/MPPreferences.m +++ b/MacDown/Code/Preferences/MPPreferences.m @@ -182,6 +182,17 @@ - (void)setFilesToOpen:(NSArray *)filesToOpen inSuiteNamed:kMPApplicationSuiteName]; } +- (NSString *)pipedContentFileToOpen { + return [self.userDefaults objectForKey:kMPPipedContentFileToOpen + inSuiteNamed:kMPApplicationSuiteName]; +} + +- (void)setPipedContentFileToOpen:(NSString *)pipedContentFileToOpenPath { + [self.userDefaults setObject:pipedContentFileToOpenPath + forKey:kMPPipedContentFileToOpen + inSuiteNamed:kMPApplicationSuiteName]; +} + #pragma mark - Private diff --git a/MacDown/Code/Utility/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h index 9fb7e157..623faadd 100644 --- a/MacDown/Code/Utility/MPGlobals.h +++ b/MacDown/Code/Utility/MPGlobals.h @@ -18,3 +18,4 @@ static NSString * const kMPHelpKey = @"help"; static NSString * const kMPVersionKey = @"version"; static NSString * const kMPFilesToOpenKey = @"filesToOpenOnNextLaunch"; +static NSString * const kMPPipedContentFileToOpen = @"pipedContentFileToOpenOnNextLaunch"; diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index 1140753f..ef837553 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -23,6 +23,14 @@ return runningInstances.firstObject; } +void MPCollectPipedContentURLForMacDown(NSURL *url) { + NSUserDefaults *defaults = + [[NSUserDefaults alloc] initWithSuiteNamed:kMPApplicationSuiteName]; + + [defaults setObject:url.path forKey:kMPPipedContentFileToOpen inSuiteNamed:kMPApplicationSuiteName]; + [defaults synchronize]; +} + void MPCollectForMacDown(NSOrderedSet *urls) { NSUserDefaults *defaults = @@ -36,6 +44,32 @@ void MPCollectForMacDown(NSOrderedSet *urls) [defaults synchronize]; } +/** + * Data piped to macdown through stdin. + * + * @return Piped data if any, otherwise nil. + */ +NSData* pipedData() { + NSFileHandle *stdInFileHandle = [NSFileHandle fileHandleWithStandardInput]; + // Check if stdin file handle have anything to read + // Modified solution from http://stackoverflow.com/questions/7505777/how-do-i-check-for-nsfilehandle-has-data-available + int fd = [stdInFileHandle fileDescriptor]; + fd_set fdset; + struct timeval tmout = { 0, 0 }; + FD_ZERO(&fdset); + FD_SET(fd, &fdset); + if (select(fd + 1, &fdset, NULL, NULL, &tmout) <= 0) { // Doesn't hold any data + return nil; + } + else if (FD_ISSET(fd, &fdset)) { // Holds data + NSData *stdInData = [NSData dataWithData:[stdInFileHandle readDataToEndOfFile]]; + return stdInData; + } + else { + return nil; + } +} + int main(int argc, const char * argv[]) { @@ -47,6 +81,16 @@ int main(int argc, const char * argv[]) [argproc printHelp:YES]; else if (argproc.printsVersion) [argproc printVersion:YES]; + + NSData *dataFromPipe = pipedData(); + + if (dataFromPipe) { + // Store piped content in a temporary file which will be read by MacDown on launch + NSString *fileName = [NSString stringWithFormat:@"%@_%@", [[NSProcessInfo processInfo] globallyUniqueString], @"pipedText.txt"]; + NSURL *fileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]]; + [[NSFileManager defaultManager] createFileAtPath:fileURL.path contents:dataFromPipe attributes:nil]; + MPCollectPipedContentURLForMacDown(fileURL); + } // Treat all arguments as file names to open. Convert them to absolute // paths and store them (as an array) in MacDown's user defaults to From b53d38ea8b9465607f5746b49969bf461da266e8 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 3 Feb 2017 00:54:21 +0800 Subject: [PATCH 220/439] Fix typo prefereces => preferences --- MacDown/Code/Application/MPMainController.h | 2 +- MacDown/Code/Application/MPMainController.m | 24 ++++++++++---------- MacDown/Localization/Base.lproj/MainMenu.xib | 6 ++--- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.h b/MacDown/Code/Application/MPMainController.h index 9c708da1..ee2be4c0 100644 --- a/MacDown/Code/Application/MPMainController.h +++ b/MacDown/Code/Application/MPMainController.h @@ -11,6 +11,6 @@ @interface MPMainController : NSObject -@property (nonatomic, readonly) MPPreferences *prefereces; +@property (nonatomic, readonly) MPPreferences *preferences; @end diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 2c4f3c1b..adb9b349 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -99,7 +99,7 @@ @implementation MPMainController @synthesize preferencesWindowController = _preferencesWindowController; -- (MPPreferences *)prefereces +- (MPPreferences *)preferences { return [MPPreferences sharedInstance]; } @@ -146,7 +146,7 @@ - (instancetype)init NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(showFirstLaunchTips) name:MPDidDetectFreshInstallationNotification - object:self.prefereces]; + object:self.preferences]; [self copyFiles]; return self; } @@ -156,9 +156,9 @@ - (instancetype)init - (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender { - if (self.prefereces.filesToOpen.count || self.prefereces.pipedContentFileToOpen) + if (self.preferences.filesToOpen.count || self.preferences.pipedContentFileToOpen) return NO; - return !self.prefereces.supressesUntitledDocumentOnLaunch; + return !self.preferences.supressesUntitledDocumentOnLaunch; } - (void)applicationDidBecomeActive:(NSNotification *)notification @@ -173,7 +173,7 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification - (NSString *)feedURLStringForUpdater:(SUUpdater *)updater { - if (self.prefereces.updateIncludesPreReleases) + if (self.preferences.updateIncludesPreReleases) return [NSBundle mainBundle].infoDictionary[@"SUBetaFeedURL"]; return [NSBundle mainBundle].infoDictionary[@"SUFeedURL"]; } @@ -222,7 +222,7 @@ - (void)openPendingFiles { NSDocumentController *c = [NSDocumentController sharedDocumentController]; - for (NSString *path in self.prefereces.filesToOpen) + for (NSString *path in self.preferences.filesToOpen) { NSURL *url = [NSURL fileURLWithPath:path]; if ([url checkResourceIsReachableAndReturnError:NULL]) @@ -236,15 +236,15 @@ - (void)openPendingFiles } } - self.prefereces.filesToOpen = nil; - [self.prefereces synchronize]; + self.preferences.filesToOpen = nil; + [self.preferences synchronize]; } - (void)openPendingPipedContent { NSDocumentController *c = [NSDocumentController sharedDocumentController]; - if (self.prefereces.pipedContentFileToOpen) { - NSURL *pipedContentFileToOpenURL = [NSURL fileURLWithPath:self.prefereces.pipedContentFileToOpen]; + if (self.preferences.pipedContentFileToOpen) { + NSURL *pipedContentFileToOpenURL = [NSURL fileURLWithPath:self.preferences.pipedContentFileToOpen]; NSError *readPipedContentError; NSString *pipedContentString = [NSString stringWithContentsOfURL:pipedContentFileToOpenURL encoding:NSUTF8StringEncoding error:&readPipedContentError]; @@ -255,8 +255,8 @@ - (void)openPendingPipedContent { document.markdown = pipedContentString; } - self.prefereces.pipedContentFileToOpen = nil; - [self.prefereces synchronize]; + self.preferences.pipedContentFileToOpen = nil; + [self.preferences synchronize]; } } diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index c3d66663..334ca0e6 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -433,7 +433,7 @@ - + NSNegateBoolean @@ -443,7 +443,7 @@ - + NSNegateBoolean @@ -453,7 +453,7 @@ - + NSNegateBoolean From db0359d01aab54332c5286e3bc005f7ebf8403e9 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 3 Feb 2017 01:00:28 +0800 Subject: [PATCH 221/439] MP prefix for function name --- macdown-cmd/main.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index ef837553..ac17fb7f 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -49,7 +49,7 @@ void MPCollectForMacDown(NSOrderedSet *urls) * * @return Piped data if any, otherwise nil. */ -NSData* pipedData() { +NSData* MPPipedData() { NSFileHandle *stdInFileHandle = [NSFileHandle fileHandleWithStandardInput]; // Check if stdin file handle have anything to read // Modified solution from http://stackoverflow.com/questions/7505777/how-do-i-check-for-nsfilehandle-has-data-available @@ -82,7 +82,7 @@ int main(int argc, const char * argv[]) else if (argproc.printsVersion) [argproc printVersion:YES]; - NSData *dataFromPipe = pipedData(); + NSData *dataFromPipe = MPPipedData(); if (dataFromPipe) { // Store piped content in a temporary file which will be read by MacDown on launch From 37f246065dd7a8ac59e5ea58aa7a24b10a8a77e3 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 3 Feb 2017 17:26:21 +0800 Subject: [PATCH 222/439] Writing with NSData's writeToFile:options:error: method So we can pass an NSError object --- macdown-cmd/main.m | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index ac17fb7f..13fdb3be 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -88,7 +88,10 @@ int main(int argc, const char * argv[]) // Store piped content in a temporary file which will be read by MacDown on launch NSString *fileName = [NSString stringWithFormat:@"%@_%@", [[NSProcessInfo processInfo] globallyUniqueString], @"pipedText.txt"]; NSURL *fileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]]; - [[NSFileManager defaultManager] createFileAtPath:fileURL.path contents:dataFromPipe attributes:nil]; + + NSError *writeError; + [dataFromPipe writeToFile:fileURL.path options:0 error:&writeError]; + MPCollectPipedContentURLForMacDown(fileURL); } From e0ad90f27306d14bf1e12b26948bd1076d1465b4 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 3 Feb 2017 17:27:16 +0800 Subject: [PATCH 223/439] Collect piped content error guard --- macdown-cmd/main.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index 13fdb3be..1eaaa538 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -92,7 +92,9 @@ int main(int argc, const char * argv[]) NSError *writeError; [dataFromPipe writeToFile:fileURL.path options:0 error:&writeError]; - MPCollectPipedContentURLForMacDown(fileURL); + if (writeError == nil) { + MPCollectPipedContentURLForMacDown(fileURL); + } } // Treat all arguments as file names to open. Convert them to absolute From 80aa43bd11411eeb7b6d468bb56abd88158e1cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Fri, 13 Jan 2017 12:38:37 +0100 Subject: [PATCH 224/439] added several custom Touch Bar icons only added the retina versions as the Touch Bar is retina only --- .../Blockquote.imageset/Blockquote@2x.png | Bin 0 -> 811 bytes .../Blockquote.imageset/Contents.json | 17 +++++++++++++++++ .../Comment.imageset/Comment@2x.png | Bin 0 -> 703 bytes .../Comment.imageset/Contents.json | 17 +++++++++++++++++ .../CopyHTML.imageset/Contents.json | 17 +++++++++++++++++ .../CopyHTML.imageset/CopyHTML@2x.png | Bin 0 -> 714 bytes .../Headings.imageset/Contents.json | 17 +++++++++++++++++ .../Headings.imageset/Headings@2x.png | Bin 0 -> 854 bytes .../HideEditor.imageset/Contents.json | 17 +++++++++++++++++ .../HideEditor.imageset/HideEditor@2x.png | Bin 0 -> 653 bytes .../HidePreview.imageset/Contents.json | 17 +++++++++++++++++ .../HidePreview.imageset/HidePreview@2x.png | Bin 0 -> 770 bytes .../Highlight.imageset/Contents.json | 17 +++++++++++++++++ .../Highlight.imageset/Highlight@2x.png | Bin 0 -> 950 bytes .../Image.imageset/Contents.json | 17 +++++++++++++++++ .../TouchBar Icons/Image.imageset/Image@2x.png | Bin 0 -> 1003 bytes .../InlineCode.imageset/Contents.json | 17 +++++++++++++++++ .../InlineCode.imageset/InlineCode@2x.png | Bin 0 -> 622 bytes .../TouchBar Icons/Link.imageset/Contents.json | 17 +++++++++++++++++ .../TouchBar Icons/Link.imageset/Link@2x.png | Bin 0 -> 1079 bytes .../OrderedList.imageset/Contents.json | 17 +++++++++++++++++ .../OrderedList.imageset/OrderedList@2x.png | Bin 0 -> 635 bytes .../ShiftLeft.imageset/Contents.json | 17 +++++++++++++++++ .../ShiftLeft.imageset/ShiftLeft@2x.png | Bin 0 -> 508 bytes .../ShiftRight.imageset/Contents.json | 17 +++++++++++++++++ .../ShiftRight.imageset/ShiftRight@2x.png | Bin 0 -> 491 bytes .../Strikethrough.imageset/Contents.json | 17 +++++++++++++++++ .../Strikethrough@2x.png | Bin 0 -> 779 bytes .../UnorderedList.imageset/Contents.json | 17 +++++++++++++++++ .../UnorderedList@2x.png | Bin 0 -> 253 bytes 30 files changed, 255 insertions(+) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Blockquote@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Comment@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/CopyHTML@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Headings@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/HideEditor@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/HidePreview@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Highlight@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Image@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/InlineCode@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Link@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/OrderedList@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/ShiftLeft@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/ShiftRight@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Strikethrough@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/UnorderedList@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Blockquote@2x.png b/MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Blockquote@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0a0bad44a4931e7e3e7ac584105371c543257c GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*J@RyM z49Q@9JNL7Jp7Z{D&Hd{ApYN5w zD=9hB#iG>cp&-WvF%0LcdoQUnfu6s#3aS`;;mzmDf?H{7cf(yo)z|J)ShX zb=Os|>HDYsOr6MmW>MY_Zd>oxg4!$US3NYUgU`C8r}e$s)82399_;l0jpto?!?X2{ zKI~U_{B*lfUYUH3dqv>YJ5x75?|wIP_c}Sbw%mEk?l|t;deda8;P>7u`Fl?toTGS$ z^=W*Aaq%oA+qCql9x62ns30haIblH&K|9kRGpPOWv%eB za5tInv$b!`mAbS#Fh8VN@9AyJ)z729?wRzt;r8M^4)K1M!}vGfK3CDR_sWEs8^3S= z%>UGN^Cgqii8r@SS^IWp<%vYmJ#5y+vo6{8EDMOga^tX_@#2^787|i(8(%d^ov<_W zN{5s!L-akKy>(An%cgyl5AVLomHuXXcFu%nuKq9n&HI=-;ilfJDW9`L`pdb?>o`wNir#5{HN+~} zLgm~^DZ}7jpM}o#S^ETwNN&kKS)34V<(|K9W^@0_c_GI4cD{J-{cqn~zn)j`bo}2= z5#Kde|Kq1fTbI~p^Bblo?0T}jvU8Ug?_x=B*1|rV2?;5Ysd+QiGlcrzntjFhh#)Za OGkCiCxvXp}?{zFrUwN zU{|oqb6rmtanT(N}!kZ`5^E2YUEb7(r%I5oM}jK9!TaSIdvOt=$9 zokQ5BY2?}XC0E6jat?n%_+-?XT4I(vRqoGJAWE>`LSmPh(huQP2RPQo#{ zU1QMrEVIRv{a6hujwR!=rP1^r8rU^Wu;*98nL1V1g)pkxpOw@Edwx}1m8fd~R`?c{ z#~U02ggKvZ|U*1jy=CBZp^3p-kY#Jhv_=_Snc3D zK*f>iox-rCUtoE(Tn8nbLZjOXgJrr79+)Pm?X2QVohG*%VN@Mo>nOs%z%>!=9*mWe zu5~J|JAu}OXnZNJgJT|Dwlv5}*E$t9CeiZVg)j=*pOsXfJ-;fhg=7C%tkexGkCyA8 zg!>JHUMu`znz)-xCZFcL$y#}Q%oO2K2POC*D@u+m{Sy% zbF{Is?s5b-Ok=Eucgr?9GG}h8v{4V0FL@U_gOmrGnMPS z&t^(i!nV54N&s#3sUIEyp}XaS29Uva#7*+?Qd~-y`)F6uri7zFI8aI(JK#`^*#4t? z58sCv`)_(}8OvNoH^Y{&oc>#sJK4iHA!((&pcdFm?~*9kUfuH^wv)7VDaW4DYD@y* z5^{unj=Ez%w4C6CWT7XYxq?%>a!Na*~sVM`b4;&U1TC8 z`yJUX^hY6ICNfwc&=UG@=>vJ~M}ThQ`B0x_jbG&^ZI#jq(nhjx$8)Ps(-K#L$w1IY zCBc2*?~`*P47O9N#FD1q48tk?@*yMf;GkPcJ>*YRTH0zMALomvDl6_(X&|sJN1L>V za|~!u%n<9)r!HxNj#|>a5)ew51_4{$zN|a6))EKuMTgeaB$>cTGvx&c*cM+UVi4~4$tm~k1I^Z)<=07*qoM6N<$g7a=o5&!@I literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json new file mode 100644 index 00000000..778d8319 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Headings@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Headings@2x.png b/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Headings@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eed0d18d8ef2890a9a59daa853fb79738cd61310 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*^Ln~C zhGek5onf63;waL#+0Ma5x2B0DQq<)Gqg3t{1*I(Ir1XUe%X^njy>T-;KYuAlS=U7; zohE((VaE=!B%MXA35r==U#*|bF*q~#u66aK0%8A#{#;-_(zcTkkUe7khN=_IEt?AEVFRWi1?KPwL z`?XDvZEpRXd(@2W+hv2ygYBh%M00eG82ws&L|m_>XGdDw`90p64=c~_JlD~up1dh* z``h`u_AXw@b+|ZU$+s;}<~%fDRF0|mzsbUA`kuv0MLt*-|E=E~F5$G=v%GuRoT!7j z3EHCToqq6bd@Oa}w^;6Z>`um;Ei*5K`9Jd$-1b(dLi7;7rCOQdDVfODR*R0u_l2)@ zzBx9veLc6)4n95c@Q7IlADHdno$v5u6Yr}$>$M*QCv84|#NzzL8v?zDcd!eFz1|@F z@My|6ixYk<6TW|BfA#x--rc1k!iin~+zqoTQ|2~i-kf(hL|gpv5k@zjB~$zR*EHqd z|Mw`cOtCe3$Ent-su!Frp6+Y!{h%*5>(|6HA0+iwylnMY6JA{69r5p|@TJ0yqVHZ` zow}r$v;5bgsB<>fA&m#s&m6tfa^@Ca%eRJ;y?Uu1IGqojOSg7P-EpL{5IqedCCnEy bnf5cXUtl#<=;S&K%qR?=u6{1-oD!MV2iUK*Jq6m{s;aul!X>H83Xtf8e6`5AO>q}~jplcy85gj< zh@5v~J=6PjpWsT8IJtM!lTU)V~+_YS}bkoRl0Pdi&#n>OozG~_mS zX!5XP9dp7Sb;_9ZZ3pAqxA$vl&suZ9EN5q@dF4#SXflD#txKoMc?hfdU(a<; z?#^6{hL!iwJVw%W{@Qoyo{WQ5vxp? zy|HtyoKvutcEYZ5CSpn}Sjt&`+c8!=NB@iaL44?hpO4g>&mtc)n#g7SQ_J}rY9I{; nf`MQl7zhS}fnXpQSe}7jhu-dJ-YxBy00000NkvXXu0mjfikUWD literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json new file mode 100644 index 00000000..4aee5eb8 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "HidePreview@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/HidePreview@2x.png b/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/HidePreview@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d072aef87d0dea029d407fa308eed1de81309d8c GIT binary patch literal 770 zcmV+d1O5DoP)`e zn@1o`(++e3T|#3Qs*!5#)JDc6h`rHbeG^y1iOY#hOZfY)mnH{$&MU8iXF+J$F8B50=_ixHJ^Q{i9IX1DvXP7X{ zyTJYQ?kZs0zO1m2^EQ*tgn*PL8CpbN=+^1%Q)}oIj+)K{Oz4K2OJ^UNnAn}s*{9Z! zD;zzY37A9rCy;p284tGs<~@a;K#!r>c96ESFVGqE5wEpZ9JeFVr?k)08L>m?4K#b2 z!?X&;Q0%a(W1gWZ*6NogL0skD88Hd;3i=846&gchtsgr)p|znZhcpS|<}7wp%nM%^ zddFh8`Gu1)v~QGbx>hE)xY#Y`r*j@$<`-R)Btc9Mn$eSvzxK{JZ$oELn~aOaAds52 z$rBvyk}-LF(I-C7Gr+J7g3C!~_@_KiiT&q$8!@!nE}0hV;lV{8KM(O*vVy@U^0ck@ zs%IX*a0zONkx-gwXp?49njl0cbJop%KeSB47p&pZpLF2gtJji~*8E07Ae+i}g`x*LSlx(_2KH7eY1hKh@29yQm8DNz8`89-8(wfJIwtZ@~&h3)~v0_?V zCtSlJtu@4ZcvYtPv2I~%ro8mI7@Y)b*mTB!gXW)$(KTLLkd!9b;9b&MT5Hf1ZUU`? zHf&b9APNM20Kzt$I$k&kQ~&?~07*qoM6N<$f+X-~ AS^xk5 literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json new file mode 100644 index 00000000..a075af3f --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Highlight@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Highlight@2x.png b/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Highlight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..503760f7f31239b2ac1ec75a88293887f5898da7 GIT binary patch literal 950 zcmV;n14;aeP)08uRj`hvQBo)p#1tvgNJQ+k6p4Zc47MqRRHjMk z-ylW^LQq7|BG?#$RXQ6%R77%Z?9_mucs}pmjG0VkFPq!lyUj8mygNU4=6k-~ot@o* zfoL%TF#<6HF#<6HF#<6Hb&5c%)oP$+v{WaqAd3S_HnI9bgJ-X-VNH_dU}TPZWg4vN zk2>2v|08UB!K&?*T~D6W-Gf%=`oZeH2JFEuXOgQN?6G|hV7`je-su;-a^H(Z1OM@e z&QShXrCYja;8Py3ij{*7_}E<)S905VhMP`a*-xlGix)5>qB8b_bPx&BwfaCqb=e`? z)ICC3Tgys87x@gIcOHcI$~PK~7Rg!kS!H9TJ<}$@z47Wm+GWCT+n=$vnsy^gHA$1Hs zhper28kA0jL7TC93oAG#er9P&7dio({<)$12|LW>I}Y&pLBM&T`vz+qpK)N5*HISW zZlU`MYn*=L054{Rwfzi0rp-weU?&{d-{enPki(=|p!*IhAe?xLtgRjf((lV4sSBBD z>-}o%I*Ak0meiz^ZhJR*0~Wfy`wn{?=RP>Vxvs7o9LCgFR?`{V&kDZ0O@-@>@|q02 zbiB~cYSizSrObIlXbR1vhiDV&(=yF^3u}O{dfv=tfwO%$cN{ICHKbr=wRJk?zOqBs zksRqFjyy4+g27>E*Xn&6-9YDpo%U9Kqxcmyk$lwW<^4``&|bVL!pL7hs0#nSp?(sr zBE7QGY>S2!bPwq#!btI+cQGQ4q`}gZ*#F-*ltz(2L#A!0_TKv780*57@=w9B5Uj3r z=oK!xmN_>%&C&6_hNCw* zIkb!VOZ^w5KakcQlX+nZuk9Dy?HAJ+ff#`pff#`pff#`pff#`pff`5P YAA<0T@+Us4UH||907*qoM6N<$g2a`}sQ>@~ literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json new file mode 100644 index 00000000..5b3fdffd --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Image@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Image@2x.png b/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Image@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..97c10c520994c233e1f362165bf511f53b490f34 GIT binary patch literal 1003 zcmVv@yKSv6mKUJ& z@Nam~BsH9i6<1-BQJm(6kZw*^98Id#9<{OD6f1=`r6 zxJJIVK*)RB=8p6)$jQ8dZG2u#V|yDQUS5 zi)XwBehn*KN124>>MF?_UFvC~PLVdJSG^7hb1s{CH*7)JXN>O?`l$GkQ?OiZrPLv& z4v{veSKSqa_&u;KTvD8j7PSTayBH!mZi~fsQ5}(t9b(pJ=Xup#K!{xr+x@81f1&J! zAE*I22ghDj84ts9J1fNwF*Sc&VsR{F#TC%~LeLk*^8}F`MAeCia?wV%rXXGrl+I z>(rkoiAfz|Cdc5eFh$6|du)n%i5^=J<3q6QW8wXIi%i;ywI@2mMM}nc8!tj+?;HGQ zO^oc#9a-SmC*aLlzC0W8$wLg&Kgyfa*scH~lgTh`gMWxGq6^8GrepFZ53#>cP4ni? z*OiF0K@3;J&&3|mQ{)O8<4Y%R@(>fq)SH+WJjtwN6JoofcBDKnC#>JMPJTJWEX7_~ zz2R8|O^R(FY~Q9%sIN_#Rf~7LBnabC*nWMu;~g|7VX~H-ux92Y2;*DE_5poEGlc51 z4Q}i_sh*)iqy<4gmKaxlrdEI|4YAmz!F2-wv46zN;iPo6Zq7RM0ImH;yb~Tkv${ef zU!bpbO4J}2tTEXBigNnY68lM3RtG>kiFpLK^V};dAnlirX}kII@FeZZwm20|V);rp z4GYkqNotsOS#0fsxzb&DP#?tQF}QRe#A|mcObi_e9S9u=9S9u=9S9u=9S9u=9r&+1 Z@CQ>qJFeF;C+PqH002ovPDHLkV1oT}&Cvh= literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json new file mode 100644 index 00000000..72385e47 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "InlineCode@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/InlineCode@2x.png b/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/InlineCode@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e44adab3c5b3dee54aa0b3b113729357696d76ed GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*sd~CN zhGek5onh#A*g?QmkvCLoNy{Xe2H__hmdxcI?-yieM2~0r_Tpo;?3dkIRK!x+4B~Kh+i*a4% zmVfhBlk(!ZuIloy)f#mVsB7qEOLMbCdOBs#>E0IewRG{X)@8{}l8x2Zat|(zu7CH- zcekD1<2$qXKVO}q@v??#MuT|3_HaF!T}yix=RM1wWYSrCvcQI2{%ePXeN%UBrPJr0 z#Sa#(obhu``?b;{*>>*_v7E~1_ed8$-=}89Th~}fHmASe`C|X&dvA0+ zN)GO5{JCQGQ6s-6%es_wqOfa7Vi>b?ZVgLTbQmP|jYH(42YEhzQ00q)kuyG58Fued3@kv!Wq?)~X>M1Pxvg zaSrr>Z@^o2MWbNctH2L>p`oX*9ZZ|t?1_f_E+at0c=5@Gf^|%PwnZbL(+GaPl*q6x zHqlif!7|5NO#h6Di-vrURhZ-8i%Zg|7^VNmUI4^vdTRJvYH)TUiYHl) z1Y|XVl@oo#t8)G=z6Df+o38C>xqC&^58+Bg_mVg3#L3NolM;dN2iu|%R0$CXS0cKL zJPGxt0`&Up6Q2Tiz-)Xx9s{PH0HIy}^tzG9ppSliU zKX*3g5eGZ`b)xZ*3Pp>wM2rFLsOrIX@C;bX&)_ud2Cr;~iFKX$wwRFG2gVIi8%m5s z)dGpMHp+pDvB^Psm%$I;Bkw#y<@NO%D^TOe+%}0K@YV)FtA$cEoyXFbf5YFI#3059C zq39uhezYFaJzgzdlU9c(ORO1O8;=69CdZyXPi~{{i_$|--`f%3O`o2EEoLe5zRnD|LJ)cdL0c(V4nK=Zss94H0jQ{DqjcP~-y0wgKq)jWXJwU@)v$2N!Q-<*Z xK3S?jsz9nhsz9nhsz9nhsz9nhs=$A$z;79(aMq^Ou(JRF002ovPDHLkV1kDE2KWE~ literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json new file mode 100644 index 00000000..88afe703 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "OrderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/OrderedList@2x.png b/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/OrderedList@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..668ebb7f61d205f4e1f6c623a21ef9d5721db4c2 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*8F{)m zhGek5opD~W3i%c@^rtS&#d^8B3N_vVy8uigLs?3qe^p^E|RR~SnjWRa-@ z`RqX}Lqyj!ADMFh^Z(;Dg_rpq6S%jsf5@ov5qO;>rhe7yEt`r?A7{R%_MClEC$1_y z{H7|~>vrE~n)e)om7iC)eeSw-Cbih}_8I9Lw-yQK{L#+cm9lO6jF)@ru8Q8}`kgxG z+~XeRKd+B0;Pjd!IMts+Nw|PnX!{0^r9WRe@0Cyd*mFX*h~1~*NXm-Vr`DA%R}UI} zsW9!4PdIqH%u2aLK&9=l%9U08Ut1J6bruS3%QQK*_wS^mjc?xWm%D9db*<@QaC3+9 zgx`^@jVhg@KdE{*C~>2OD^BT(7?Xc{;Fs~Z)qg4(s;)p!o_#55j}J@nnaoo}zw z4oAJ~@sBPj&eU=RhDS_EgZw%#jqpRSnD^@Te>5$V`e$(E)*1qvPMqihyI+0;nA`kPo6E8V-B|H}W#xiks zqWR{%PIf1I?)t7-WOMyh8+XCxtu7I|XPjnlpVIUEp={B<2C()X{ zgJMg4|(4z0b?M8m>E#a3Wr|r1{ POic`)u6{1-oD!M<7a|(X literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json new file mode 100644 index 00000000..e44affd8 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ShiftLeft@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/ShiftLeft@2x.png b/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/ShiftLeft@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bebfaea97626447f78595162be945332d019dc51 GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*ZuWF> z49Q@9JL9bHVF!WM#|2JJ(OwHUZ#gXD%V;W4Vaj@NOw?)tr;5}AHvtWg6E)5oQr61a zsQtURDSzq7{?BFU_qG=v`*XSW>&Vw$)22^@qN#) zzLNEk)81BJn^onaYkK{Kebl*|Zh1TPwnrYYoqqRDVRy1vQpxlkiu01bJzOO_+4xc8 z54m-o8@mcB9BkIDT_>OX^-_fSH@?p2nEGeMsH}xmA?g~}|FR2JRm+o;<(KW#EOgw)x-l?3_^jyhT`vxAYg>Eu|A7@- z=SD9o{1ShbL9(Fo`in2_1`d{Um#v8LetdYHXZ)VX9c^pZJe+IYwyr2IX#d}UJNU9hou&gE1?${NN&GKn4~$L*Pgg&ebxsLQ01iLkZ2$lO literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json new file mode 100644 index 00000000..061635c8 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ShiftRight@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/ShiftRight@2x.png b/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/ShiftRight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b6744db0c957bb4ed0f3d002ed0878e671b445bd GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*F7kA7 z49Q@9JHs*Wkb!_JXKZNGItwTLi`gNMWC}VD3At3az1yX0{y@khrXe*zdqTi3_NzjM zVjB-`eEKAMlg#bMGyk+t=6qKY;nBc?1vv<6bR~7|a_0?Ixi-7&{pzzhvWgXax96?h ztG+vST57HTKEJ$OeCNbA*jn7UpRKjg?p^7mKUHtGv_Em(!O`%5_m%pq#iw_ru3E&d=quARk_2j+UMa_S_jl^CBrp5ad@%g3nTLF1 z@nzY&7HT{9hphWynUoh|WL6UMX+z@9!WXiO?LKY&ArQaKb;}vWszL4^U$=8^{knZiW?_$^;7ft;ocA9s{q9iw?U!onQoV1NR2nCC<*r$F z*!FOTgfhSO!b_)STirS5x?x6TMa)*u*9wBl{QsR^2%LYj$E%>|^QQEzLf@lz+JuB*XCBVSYAG~`Ec>eUGV`Q&KJLAm>}7NB><(|AMl6Iy_+)mG;a+s_82@} L{an^LB{Ts5rl8vR literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json new file mode 100644 index 00000000..66c49911 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Strikethrough@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Strikethrough@2x.png b/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Strikethrough@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..160bfa6d63a7809c225c3d2194f1a60f5df82886 GIT binary patch literal 779 zcmV+m1N8ifP)fGJ=Km;$DNDPRhi0;WKz+z1USmC7#W=>gr~95@K}g74rn zcnOBf?Z*OV9$=M7~;FZ6A)_eNI0BV(YZa+kRF2cErl@eX8yFCGgjhZ9>ww%B#LD_Uw3*Wp zkn0tyiFqY>1i53bdgS~IVUt?Nse6%nemM}-+vE-j@x;0lr?6Mn-ke&CYxq|RTdWjD zf%jCw;{FAXz|le$PGQYp3b?jT#~8Q^P8YKH*oxA}xlG*T7G_G!n8Z$A6X!g3>5QdV zS}_%1MRbBeAZKoEa+c2RHF4Y3q_{J{-P!MNJFz?oP;fg~1&O`MbG|6XrqahrwOqf| zo0NOduX%h(-ei!b&4DKP7nu$m^plEjReqc<1<$BEG#tv3+=nWEAvC|?@sJ%-gn#3E zpPz|s1z%PE(}ouiIw53x6k&0vLGnVMIvg=gU<7Epk(vrE)J78Zmp7hJ7 zopGRTl18!@R7=a$SJSyPZAOU7XP#H!xD&HP`y-IGDSkUR1x^5MKWKEZ;eF7ZQTr5q z3`~Gfn8de002ov JPDHLkV1ko1Xx0D# literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json new file mode 100644 index 00000000..2f491c9c --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "UnorderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/UnorderedList@2x.png b/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/UnorderedList@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f418c3c2866237c85e9f9b3650a435a3e9694927 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvI6;AJY5_^ zGFac<@aAez5Ma3QMy7Ou-le0j<;)tn%>`Kx>C98O;Xb=^o5UQoUIs=c77hUghXx3v zLUhH}yo>$UwqNHw8K)8dc&Bi$rT6UeX+hWOdMo07zrOhR$G_z=&n_~iM*sIeRIO6D zt*+k`YQh1D#uYMGFWIh*+I8K-Ak16+28$xpWPYZs%;%T*_q$EHo%K>hT9F6EQU!yc a2TXA_z8iL5?7awdKZB>MpUXO@geCy)FIC(C literal 0 HcmV?d00001 From 2a65c763f49021d46882d0b7478928ad9dbfee35 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 4 Feb 2017 14:15:34 +0800 Subject: [PATCH 225/439] Foundation for toolbar images Created required image sets. Need proper images. --- MacDown/Images.xcassets/Contents.json | 6 ++++++ .../Blockquote.imageset/Blockquote@2x.png | Bin 0 -> 1572 bytes .../Blockquote.imageset/Contents.json | 17 +++++++++++++++ .../Toolbar icons/Bold.imageset/Contents.json | 20 ++++++++++++++++++ .../Comment.imageset/Comment@2x.png | Bin 0 -> 703 bytes .../Comment.imageset/Contents.json | 17 +++++++++++++++ .../Toolbar icons/Contents.json | 6 ++++++ .../CopyHTML.imageset/Contents.json | 17 +++++++++++++++ .../CopyHTML.imageset/CopyHTML@2x.png | Bin 0 -> 714 bytes .../Header1.imageset/Contents.json | 17 +++++++++++++++ .../Header1.imageset/Header1@2x.png | Bin 0 -> 854 bytes .../Header2.imageset/Contents.json | 17 +++++++++++++++ .../Header2.imageset/Header2@2x.png | Bin 0 -> 854 bytes .../Header3.imageset/Contents.json | 17 +++++++++++++++ .../Header3.imageset/Header3@2x.png | Bin 0 -> 854 bytes .../HideEditor.imageset/Contents.json | 17 +++++++++++++++ .../HideEditor.imageset/HideEditor@2x.png | Bin 0 -> 653 bytes .../HidePreview.imageset/Contents.json | 17 +++++++++++++++ .../HidePreview.imageset/HidePreview@2x.png | Bin 0 -> 770 bytes .../Highlight.imageset/Contents.json | 17 +++++++++++++++ .../Highlight.imageset/Highlight@2x.png | Bin 0 -> 950 bytes .../Image.imageset/Contents.json | 17 +++++++++++++++ .../Toolbar icons/Image.imageset/Image@2x.png | Bin 0 -> 1003 bytes .../InlineCode.imageset/Contents.json | 17 +++++++++++++++ .../InlineCode.imageset/InlineCode@2x.png | Bin 0 -> 622 bytes .../Italic.imageset/Contents.json | 20 ++++++++++++++++++ .../Toolbar icons/Link.imageset/Contents.json | 17 +++++++++++++++ .../Toolbar icons/Link.imageset/Link@2x.png | Bin 0 -> 1079 bytes .../OrderedList.imageset/Contents.json | 17 +++++++++++++++ .../OrderedList.imageset/OrderedList@2x.png | Bin 0 -> 635 bytes .../ShiftLeft.imageset/Contents.json | 17 +++++++++++++++ .../ShiftLeft.imageset/ShiftLeft@2x.png | Bin 0 -> 508 bytes .../ShiftRight.imageset/Contents.json | 17 +++++++++++++++ .../ShiftRight.imageset/ShiftRight@2x.png | Bin 0 -> 491 bytes .../Strikethrough.imageset/Contents.json | 17 +++++++++++++++ .../Strikethrough@2x.png | Bin 0 -> 779 bytes .../Underline.imageset/Contents.json | 20 ++++++++++++++++++ .../UnorderedList.imageset/Contents.json | 17 +++++++++++++++ .../UnorderedList@2x.png | Bin 0 -> 1085 bytes 39 files changed, 361 insertions(+) create mode 100644 MacDown/Images.xcassets/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Blockquote@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Comment@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/CopyHTML.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/CopyHTML.imageset/CopyHTML@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Header1@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Header2.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Header2.imageset/Header2@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Header3.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Header3.imageset/Header3@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/HideEditor.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/HideEditor.imageset/HideEditor@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/HidePreview@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Highlight@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Image.imageset/Image@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/InlineCode@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Italic.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Link.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Link.imageset/Link@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/OrderedList@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/ShiftLeft@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/ShiftRight@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Strikethrough@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/UnorderedList@2x.png diff --git a/MacDown/Images.xcassets/Contents.json b/MacDown/Images.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/MacDown/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Blockquote@2x.png b/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Blockquote@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3b87c1f5ba0198549403b5a3a44d6b94619583 GIT binary patch literal 1572 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|RWd^&N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@w*YQzUNJP7fB~jokyxN_sAmB35=^15FMg%Dxp39RB|)hO_hL1;IHa;5RX-@T zIKQ+g85nVC${?!>telHd6HD@oLh|!-V4)b0kzbNuoRMFk;2dnGpy8XCoS6p_&;;x7 z^|kWMD=taQOHTE4u~h<^p_iGNV&!CP>}X-`>gHYG!HbV(Dnt=vcFDNnO765H_NiE7OOHFYr%Fk5*d)g`!w_99rng`XJ zg3~Rot~mAT10ACeidv+oh6w@F4~Pj*xIhj(>8Iua(|ZvxVVfp2e`8=^n&#=^7*cWT z%`9J!DUK4y%eS&@T;S2#)OBbD$4Y0lwXT8fF9cj=oqKkPmhdpYy>ngBo)tfZ}kuM8}Mx2{cd-%!aw;RAJ3gT^ZVoN^m{WSP3E3| z9{gD|E9kS1icTV@cf=u~X&YKpk(m#7igB;9w48iW=kP;@3eGt3m)lt1u>2K`+b8#i z_liC1{K!1k)qB6K%rX0Iu*$$CH)Rg9?EcV0Z`o!(^sz_IE5R@;E@tTiQZ$G0gdE4;Fz zq_yccY`H73X*$!}+Xn)t{dUk>_(tl&6o(3t^IvVd3^whaY~p&DU-SQROcj@r{T#deN}GpQ z?)L8dXz^l-`h<@%5(TerStLfvB)j#T4ehwSA@ z`_%o^ZG+jQ0(En3Go!v@&635PU%$P1|F-vVanG@T9}~p)MJ4&h2xa(By>)q-=OM{; zERP$@q)$1|nfTs$+oG*@YyW?ofEM*A3F80pAL<7fyk<<$bJ#uG8dPq3y85}Sb4q9e E0JfN55C8xG literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json new file mode 100644 index 00000000..5b877cb3 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Blockquote@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json new file mode 100644 index 00000000..f8f827e4 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Comment@2x.png b/MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Comment@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..958e2fb1b938cfd93e675df8bdc3f251e54efcfd GIT binary patch literal 703 zcmV;w0zmzVP)p}?{zFrUwN zU{|oqb6rmtanT(N}!kZ`5^E2YUEb7(r%I5oM}jK9!TaSIdvOt=$9 zokQ5BY2?}XC0E6jat?n%_+-?XT4I(vRqoGJAWE>`LSmPh(huQP2RPQo#{ zU1QMrEVIRv{a6hujwR!=rP1^r8rU^Wu;*98nL1V1g)pkxpOw@Edwx}1m8fd~R`?c{ z#~U02ggKvZ|U*1jy=CBZp^3p-kY#Jhv_=_Snc3D zK*f>iox-rCUtoE(Tn8nbLZjOXgJrr79+)Pm?X2QVohG*%VN@Mo>nOs%z%>!=9*mWe zu5~J|JAu}OXnZNJgJT|Dwlv5}*E$t9CeiZVg)j=*pOsXfJ-;fhg=7C%tkexGkCyA8 zg!>JHUMu`znz)-xCZFcL$y#}Q%oO2K2POC*D@u+m{Sy% zbF{Is?s5b-Ok=Eucgr?9GG}h8v{4V0FL@U_gOmrGnMPS z&t^(i!nV54N&s#3sUIEyp}XaS29Uva#7*+?Qd~-y`)F6uri7zFI8aI(JK#`^*#4t? z58sCv`)_(}8OvNoH^Y{&oc>#sJK4iHA!((&pcdFm?~*9kUfuH^wv)7VDaW4DYD@y* z5^{unj=Ez%w4C6CWT7XYxq?%>a!Na*~sVM`b4;&U1TC8 z`yJUX^hY6ICNfwc&=UG@=>vJ~M}ThQ`B0x_jbG&^ZI#jq(nhjx$8)Ps(-K#L$w1IY zCBc2*?~`*P47O9N#FD1q48tk?@*yMf;GkPcJ>*YRTH0zMALomvDl6_(X&|sJN1L>V za|~!u%n<9)r!HxNj#|>a5)ew51_4{$zN|a6))EKuMTgeaB$>cTGvx&c*cM+UVi4~4$tm~k1I^Z)<=07*qoM6N<$g7a=o5&!@I literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json new file mode 100644 index 00000000..ff03f4e7 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Header1@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Header1@2x.png b/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Header1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eed0d18d8ef2890a9a59daa853fb79738cd61310 GIT binary patch literal 854 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 literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json new file mode 100644 index 00000000..4aee5eb8 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "HidePreview@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/HidePreview@2x.png b/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/HidePreview@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d072aef87d0dea029d407fa308eed1de81309d8c GIT binary patch literal 770 zcmV+d1O5DoP)`e zn@1o`(++e3T|#3Qs*!5#)JDc6h`rHbeG^y1iOY#hOZfY)mnH{$&MU8iXF+J$F8B50=_ixHJ^Q{i9IX1DvXP7X{ zyTJYQ?kZs0zO1m2^EQ*tgn*PL8CpbN=+^1%Q)}oIj+)K{Oz4K2OJ^UNnAn}s*{9Z! zD;zzY37A9rCy;p284tGs<~@a;K#!r>c96ESFVGqE5wEpZ9JeFVr?k)08L>m?4K#b2 z!?X&;Q0%a(W1gWZ*6NogL0skD88Hd;3i=846&gchtsgr)p|znZhcpS|<}7wp%nM%^ zddFh8`Gu1)v~QGbx>hE)xY#Y`r*j@$<`-R)Btc9Mn$eSvzxK{JZ$oELn~aOaAds52 z$rBvyk}-LF(I-C7Gr+J7g3C!~_@_KiiT&q$8!@!nE}0hV;lV{8KM(O*vVy@U^0ck@ zs%IX*a0zONkx-gwXp?49njl0cbJop%KeSB47p&pZpLF2gtJji~*8E07Ae+i}g`x*LSlx(_2KH7eY1hKh@29yQm8DNz8`89-8(wfJIwtZ@~&h3)~v0_?V zCtSlJtu@4ZcvYtPv2I~%ro8mI7@Y)b*mTB!gXW)$(KTLLkd!9b;9b&MT5Hf1ZUU`? zHf&b9APNM20Kzt$I$k&kQ~&?~07*qoM6N<$f+X-~ AS^xk5 literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json new file mode 100644 index 00000000..a075af3f --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Highlight@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Highlight@2x.png b/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Highlight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..503760f7f31239b2ac1ec75a88293887f5898da7 GIT binary patch literal 950 zcmV;n14;aeP)08uRj`hvQBo)p#1tvgNJQ+k6p4Zc47MqRRHjMk z-ylW^LQq7|BG?#$RXQ6%R77%Z?9_mucs}pmjG0VkFPq!lyUj8mygNU4=6k-~ot@o* zfoL%TF#<6HF#<6HF#<6Hb&5c%)oP$+v{WaqAd3S_HnI9bgJ-X-VNH_dU}TPZWg4vN zk2>2v|08UB!K&?*T~D6W-Gf%=`oZeH2JFEuXOgQN?6G|hV7`je-su;-a^H(Z1OM@e z&QShXrCYja;8Py3ij{*7_}E<)S905VhMP`a*-xlGix)5>qB8b_bPx&BwfaCqb=e`? z)ICC3Tgys87x@gIcOHcI$~PK~7Rg!kS!H9TJ<}$@z47Wm+GWCT+n=$vnsy^gHA$1Hs zhper28kA0jL7TC93oAG#er9P&7dio({<)$12|LW>I}Y&pLBM&T`vz+qpK)N5*HISW zZlU`MYn*=L054{Rwfzi0rp-weU?&{d-{enPki(=|p!*IhAe?xLtgRjf((lV4sSBBD z>-}o%I*Ak0meiz^ZhJR*0~Wfy`wn{?=RP>Vxvs7o9LCgFR?`{V&kDZ0O@-@>@|q02 zbiB~cYSizSrObIlXbR1vhiDV&(=yF^3u}O{dfv=tfwO%$cN{ICHKbr=wRJk?zOqBs zksRqFjyy4+g27>E*Xn&6-9YDpo%U9Kqxcmyk$lwW<^4``&|bVL!pL7hs0#nSp?(sr zBE7QGY>S2!bPwq#!btI+cQGQ4q`}gZ*#F-*ltz(2L#A!0_TKv780*57@=w9B5Uj3r z=oK!xmN_>%&C&6_hNCw* zIkb!VOZ^w5KakcQlX+nZuk9Dy?HAJ+ff#`pff#`pff#`pff#`pff`5P YAA<0T@+Us4UH||907*qoM6N<$g2a`}sQ>@~ literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json new file mode 100644 index 00000000..5b3fdffd --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Image@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Image@2x.png b/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Image@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..97c10c520994c233e1f362165bf511f53b490f34 GIT binary patch literal 1003 zcmVv@yKSv6mKUJ& z@Nam~BsH9i6<1-BQJm(6kZw*^98Id#9<{OD6f1=`r6 zxJJIVK*)RB=8p6)$jQ8dZG2u#V|yDQUS5 zi)XwBehn*KN124>>MF?_UFvC~PLVdJSG^7hb1s{CH*7)JXN>O?`l$GkQ?OiZrPLv& z4v{veSKSqa_&u;KTvD8j7PSTayBH!mZi~fsQ5}(t9b(pJ=Xup#K!{xr+x@81f1&J! zAE*I22ghDj84ts9J1fNwF*Sc&VsR{F#TC%~LeLk*^8}F`MAeCia?wV%rXXGrl+I z>(rkoiAfz|Cdc5eFh$6|du)n%i5^=J<3q6QW8wXIi%i;ywI@2mMM}nc8!tj+?;HGQ zO^oc#9a-SmC*aLlzC0W8$wLg&Kgyfa*scH~lgTh`gMWxGq6^8GrepFZ53#>cP4ni? z*OiF0K@3;J&&3|mQ{)O8<4Y%R@(>fq)SH+WJjtwN6JoofcBDKnC#>JMPJTJWEX7_~ zz2R8|O^R(FY~Q9%sIN_#Rf~7LBnabC*nWMu;~g|7VX~H-ux92Y2;*DE_5poEGlc51 z4Q}i_sh*)iqy<4gmKaxlrdEI|4YAmz!F2-wv46zN;iPo6Zq7RM0ImH;yb~Tkv${ef zU!bpbO4J}2tTEXBigNnY68lM3RtG>kiFpLK^V};dAnlirX}kII@FeZZwm20|V);rp z4GYkqNotsOS#0fsxzb&DP#?tQF}QRe#A|mcObi_e9S9u=9S9u=9S9u=9S9u=9r&+1 Z@CQ>qJFeF;C+PqH002ovPDHLkV1oT}&Cvh= literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json new file mode 100644 index 00000000..72385e47 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "InlineCode@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/InlineCode@2x.png b/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/InlineCode@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e44adab3c5b3dee54aa0b3b113729357696d76ed GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*sd~CN zhGek5onh#A*g?QmkvCLoNy{Xe2H__hmdxcI?-yieM2~0r_Tpo;?3dkIRK!x+4B~Kh+i*a4% zmVfhBlk(!ZuIloy)f#mVsB7qEOLMbCdOBs#>E0IewRG{X)@8{}l8x2Zat|(zu7CH- zcekD1<2$qXKVO}q@v??#MuT|3_HaF!T}yix=RM1wWYSrCvcQI2{%ePXeN%UBrPJr0 z#Sa#(obhu``?b;{*>>*_v7E~1_ed8$-=}89Th~}fHmASe`C|X&dvA0+ zN)GO5{JCQGQ6s-6%es_wqOfa7Vi>b?ZVgLTbQmP|jYH(42YEhzQ00q)kuyG58Fued3@kv!Wq?)~X>M1Pxvg zaSrr>Z@^o2MWbNctH2L>p`oX*9ZZ|t?1_f_E+at0c=5@Gf^|%PwnZbL(+GaPl*q6x zHqlif!7|5NO#h6Di-vrURhZ-8i%Zg|7^VNmUI4^vdTRJvYH)TUiYHl) z1Y|XVl@oo#t8)G=z6Df+o38C>xqC&^58+Bg_mVg3#L3NolM;dN2iu|%R0$CXS0cKL zJPGxt0`&Up6Q2Tiz-)Xx9s{PH0HIy}^tzG9ppSliU zKX*3g5eGZ`b)xZ*3Pp>wM2rFLsOrIX@C;bX&)_ud2Cr;~iFKX$wwRFG2gVIi8%m5s z)dGpMHp+pDvB^Psm%$I;Bkw#y<@NO%D^TOe+%}0K@YV)FtA$cEoyXFbf5YFI#3059C zq39uhezYFaJzgzdlU9c(ORO1O8;=69CdZyXPi~{{i_$|--`f%3O`o2EEoLe5zRnD|LJ)cdL0c(V4nK=Zss94H0jQ{DqjcP~-y0wgKq)jWXJwU@)v$2N!Q-<*Z xK3S?jsz9nhsz9nhsz9nhsz9nhs=$A$z;79(aMq^Ou(JRF002ovPDHLkV1kDE2KWE~ literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json new file mode 100644 index 00000000..88afe703 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "OrderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/OrderedList@2x.png b/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/OrderedList@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..668ebb7f61d205f4e1f6c623a21ef9d5721db4c2 GIT binary patch literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*8F{)m zhGek5opD~W3i%c@^rtS&#d^8B3N_vVy8uigLs?3qe^p^E|RR~SnjWRa-@ z`RqX}Lqyj!ADMFh^Z(;Dg_rpq6S%jsf5@ov5qO;>rhe7yEt`r?A7{R%_MClEC$1_y z{H7|~>vrE~n)e)om7iC)eeSw-Cbih}_8I9Lw-yQK{L#+cm9lO6jF)@ru8Q8}`kgxG z+~XeRKd+B0;Pjd!IMts+Nw|PnX!{0^r9WRe@0Cyd*mFX*h~1~*NXm-Vr`DA%R}UI} zsW9!4PdIqH%u2aLK&9=l%9U08Ut1J6bruS3%QQK*_wS^mjc?xWm%D9db*<@QaC3+9 zgx`^@jVhg@KdE{*C~>2OD^BT(7?Xc{;Fs~Z)qg4(s;)p!o_#55j}J@nnaoo}zw z4oAJ~@sBPj&eU=RhDS_EgZw%#jqpRSnD^@Te>5$V`e$(E)*1qvPMqihyI+0;nA`kPo6E8V-B|H}W#xiks zqWR{%PIf1I?)t7-WOMyh8+XCxtu7I|XPjnlpVIUEp={B<2C()X{ zgJMg4|(4z0b?M8m>E#a3Wr|r1{ POic`)u6{1-oD!M<7a|(X literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json new file mode 100644 index 00000000..e44affd8 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ShiftLeft@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/ShiftLeft@2x.png b/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/ShiftLeft@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bebfaea97626447f78595162be945332d019dc51 GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*ZuWF> z49Q@9JL9bHVF!WM#|2JJ(OwHUZ#gXD%V;W4Vaj@NOw?)tr;5}AHvtWg6E)5oQr61a zsQtURDSzq7{?BFU_qG=v`*XSW>&Vw$)22^@qN#) zzLNEk)81BJn^onaYkK{Kebl*|Zh1TPwnrYYoqqRDVRy1vQpxlkiu01bJzOO_+4xc8 z54m-o8@mcB9BkIDT_>OX^-_fSH@?p2nEGeMsH}xmA?g~}|FR2JRm+o;<(KW#EOgw)x-l?3_^jyhT`vxAYg>Eu|A7@- z=SD9o{1ShbL9(Fo`in2_1`d{Um#v8LetdYHXZ)VX9c^pZJe+IYwyr2IX#d}UJNU9hou&gE1?${NN&GKn4~$L*Pgg&ebxsLQ01iLkZ2$lO literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json new file mode 100644 index 00000000..061635c8 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ShiftRight@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/ShiftRight@2x.png b/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/ShiftRight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b6744db0c957bb4ed0f3d002ed0878e671b445bd GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*F7kA7 z49Q@9JHs*Wkb!_JXKZNGItwTLi`gNMWC}VD3At3az1yX0{y@khrXe*zdqTi3_NzjM zVjB-`eEKAMlg#bMGyk+t=6qKY;nBc?1vv<6bR~7|a_0?Ixi-7&{pzzhvWgXax96?h ztG+vST57HTKEJ$OeCNbA*jn7UpRKjg?p^7mKUHtGv_Em(!O`%5_m%pq#iw_ru3E&d=quARk_2j+UMa_S_jl^CBrp5ad@%g3nTLF1 z@nzY&7HT{9hphWynUoh|WL6UMX+z@9!WXiO?LKY&ArQaKb;}vWszL4^U$=8^{knZiW?_$^;7ft;ocA9s{q9iw?U!onQoV1NR2nCC<*r$F z*!FOTgfhSO!b_)STirS5x?x6TMa)*u*9wBl{QsR^2%LYj$E%>|^QQEzLf@lz+JuB*XCBVSYAG~`Ec>eUGV`Q&KJLAm>}7NB><(|AMl6Iy_+)mG;a+s_82@} L{an^LB{Ts5rl8vR literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json new file mode 100644 index 00000000..66c49911 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "Strikethrough@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Strikethrough@2x.png b/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Strikethrough@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..160bfa6d63a7809c225c3d2194f1a60f5df82886 GIT binary patch literal 779 zcmV+m1N8ifP)fGJ=Km;$DNDPRhi0;WKz+z1USmC7#W=>gr~95@K}g74rn zcnOBf?Z*OV9$=M7~;FZ6A)_eNI0BV(YZa+kRF2cErl@eX8yFCGgjhZ9>ww%B#LD_Uw3*Wp zkn0tyiFqY>1i53bdgS~IVUt?Nse6%nemM}-+vE-j@x;0lr?6Mn-ke&CYxq|RTdWjD zf%jCw;{FAXz|le$PGQYp3b?jT#~8Q^P8YKH*oxA}xlG*T7G_G!n8Z$A6X!g3>5QdV zS}_%1MRbBeAZKoEa+c2RHF4Y3q_{J{-P!MNJFz?oP;fg~1&O`MbG|6XrqahrwOqf| zo0NOduX%h(-ei!b&4DKP7nu$m^plEjReqc<1<$BEG#tv3+=nWEAvC|?@sJ%-gn#3E zpPz|s1z%PE(}ouiIw53x6k&0vLGnVMIvg=gU<7Epk(vrE)J78Zmp7hJ7 zopGRTl18!@R7=a$SJSyPZAOU7XP#H!xD&HP`y-IGDSkUR1x^5MKWKEZ;eF7ZQTr5q z3`~Gfn8de002ov JPDHLkV1ko1Xx0D# literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json new file mode 100644 index 00000000..f8f827e4 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json new file mode 100644 index 00000000..2f491c9c --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "UnorderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/UnorderedList@2x.png b/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/UnorderedList@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac61a95deac7d969d288f6c4797ca70e86d8226 GIT binary patch literal 1085 zcmaJ=O=#0l94`(<2NMP!rd}SI2Zw9Z^dnt^-DsQE)|olmqGd9+EO~3gmb{p}uIUcK zCQL=<4uU&+@MD5HK?KqHF~!Rm_{9!W5C@(df(Oxq4)kSfw;im1lK1iF|NH$v-}%mt zLv^)#Y8?(oT{6L^$bQiNw{IgWxANW~+io1o;xy{VMbUtcu#Ea3NUCBErl2U7PR&7r zsM)7vvN$Uo;UuKGMBBz?sX9RuvNlT>r2&XRAIvFQi2643i~@=rqE7e)x1dL1UP%la zFg@Ink%kAPpiH&3f`b-E2vmqgV5x(e$yp(4m6s!DTTN47)dUZOsI{Q7LMMnK0|LLx z>y+FK16bC@`1~x(Gy{*D@z8Gau};Rv`B}~r0A-0+_y zDtcYW$k9wN7_>P&9w)JInk5a3mQynuD-1j|B}37%f;3<=ihZbnLllX0Ed^Cyr`61I znMlECOVnw`<+f9*7z)DwO;vT>+Qcci5$`{V%}hy$bPAfNU`V8K{f)LOor@Y!#K_1X zG+3!(XC7f>=8+DfX%_4kL`l(XMbj!m5V)jfVo{S|k`GaY!=)%P7x8+-ErGZ<=841@ zCdLN+d@vjgGahds;EM+Q6)caWf(kWU!O9z0UsbF<4605%^UzR+pd2@l3RaWml>+ptNj zTVutZMAP^W13gH0PxNdtUi}{3`}5J_r{k|DT92LU`Zd4waQuoYJQ?{smFp_ph#vLc zzCL0L{Bm*j-u-50`~17p?X$L!n>q%S9;J7aEd9AT>8NpB2p?EDIX$#&Kj>tvgP)G{ Gj{XG%o@hh> literal 0 HcmV?d00001 From 500ee8d03d31360b20b3297186165a0ea49f6daa Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 4 Feb 2017 14:24:00 +0800 Subject: [PATCH 226/439] Formatting icons added to toolbar --- .../Localization/Base.lproj/MPDocument.xib | 70 ++++++++++++++++--- 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 1f05ed82..a0215775 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -1,9 +1,10 @@ - - + + - - + + + @@ -24,7 +25,7 @@ - + @@ -43,15 +44,13 @@ - + - - @@ -125,10 +124,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 73a572bfbc6fd42451a185d9e550c176bd0b4d8f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 4 Feb 2017 16:42:08 +0800 Subject: [PATCH 227/439] Upgrade Travis to use Xcode 8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4ba7377b..0450baa1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -osx_image: xcode7 +osx_image: xcode8 language: objective-c cache: - bundler From f0776b96f8f486e742177bef3de89d0eb19ea32a Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 4 Feb 2017 17:22:32 +0800 Subject: [PATCH 228/439] Connected toolbar icons to their actions --- .../Localization/Base.lproj/MPDocument.xib | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index a0215775..d418ba22 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -133,27 +133,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + From d37e124ede7c1edbb9b13766b0d8b183fc7b3957 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 4 Feb 2017 21:40:45 +0800 Subject: [PATCH 229/439] Menu item for toggling hide/show toolbar --- MacDown/Code/Document/MPDocument.m | 21 +++++++++++++++++++- MacDown/Localization/Base.lproj/MainMenu.xib | 12 ++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 6640f0ac..15232c67 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -267,6 +267,11 @@ - (NSString *)html return self.renderer.currentHtml; } +- (BOOL)toolbarVisible +{ + return self.windowForSheet.toolbar.visible; +} + - (BOOL)previewVisible { return (self.preview.frame.size.width != 0.0); @@ -614,7 +619,16 @@ - (BOOL)validateUserInterfaceItem:(id)item { BOOL result = [super validateUserInterfaceItem:item]; SEL action = item.action; - if (action == @selector(togglePreviewPane:)) + if (action == @selector(toggleToolbar:)) + { + NSMenuItem *it = ((NSMenuItem *)item); + it.title = self.toolbarVisible ? + NSLocalizedString(@"Hide toolbar", + @"Toggle reveal toolbar") : + NSLocalizedString(@"Show toolbar", + @"Toggle reveal toolbar"); + } + else if (action == @selector(togglePreviewPane:)) { NSMenuItem *it = ((NSMenuItem *)item); it.hidden = (!self.previewVisible && self.previousSplitRatio < 0.0); @@ -1323,6 +1337,11 @@ - (IBAction)setEqualSplit:(id)sender [self setSplitViewDividerLocation:0.5]; } +- (IBAction)toggleToolbar:(id)sender +{ + [self.windowForSheet toggleToolbarShown:sender]; +} + - (IBAction)togglePreviewPane:(id)sender { if (self.previewVisible) diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index c3d66663..c21e0986 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - - + + - + @@ -389,6 +389,12 @@ + + + + + + From 5394aeb3aa55befdb6b41386018ce3684b98fd07 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Mon, 6 Feb 2017 21:32:46 +0800 Subject: [PATCH 230/439] Disable WebView's cache Fix #746 image cache issue --- MacDown/Code/Application/MPMainController.m | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index adb9b349..248e91c3 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -99,6 +99,25 @@ @implementation MPMainController @synthesize preferencesWindowController = _preferencesWindowController; +- (void)applicationDidFinishLaunching:(NSNotification *)notification +{ + // Using private API [WebCache setDisabled:YES] to disable WebView's cache + id webCacheClass = (id)NSClassFromString(@"WebCache"); + if (webCacheClass) { +// Ignoring "undeclared selector" warning +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + BOOL setDisabledValue = YES; + NSMethodSignature *signature = [webCacheClass methodSignatureForSelector:@selector(setDisabled:)]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + invocation.selector = @selector(setDisabled:); + invocation.target = [webCacheClass class]; + [invocation setArgument:&setDisabledValue atIndex:2]; + [invocation invoke]; +#pragma clang diagnostic pop + } +} + - (MPPreferences *)preferences { return [MPPreferences sharedInstance]; From 63c439e12de59ff4b351bd3dce28e7a11d960b8d Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 10 Feb 2017 15:21:46 +0800 Subject: [PATCH 231/439] Programatically creating toolbar items Using dummy icons until we have custom ones --- MacDown/Code/Document/MPDocument.m | 302 +++++++++++++++++- .../Localization/Base.lproj/MPDocument.xib | 71 +--- 2 files changed, 305 insertions(+), 68 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 15232c67..21b98865 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -32,6 +32,13 @@ static NSString * const kMPDefaultAutosaveName = @"Untitled"; +static NSString *const kMPToolbarDictKeyOrder = @"kMPToolbarDictKeyOrder"; +static NSString *const kMPToolbarDictKeyIcon = @"kMPToolbarDictKeyIcon"; +static NSString *const kMPToolbarDictKeyTitle = @"kMPToolbarDictKeyTitle"; +static NSString *const kMPToolbarDictKeySubItems = @"kMPToolbarDictKeySubItems"; +static NSString *const kMPToolbarDictKeySegmentStyleSeparated = @"kMPToolbarDictKeySegmentStyleSeparated"; +static NSString *const kMPToolbarDictKeyAction = @"kMPToolbarDictKeyAction"; + NS_INLINE NSString *MPEditorPreferenceKeyWithValueKey(NSString *key) { @@ -169,7 +176,7 @@ - (int)rendererFlags @interface MPDocument () - = 101100 WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate, #endif @@ -244,6 +251,11 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() @implementation MPDocument +{ + NSDictionary *toolbarItems; + NSArray *toolbarItemKeysOrder; + NSMutableDictionary *toolbarGroupItemsDictionary; +} #pragma mark - Accessor @@ -338,6 +350,10 @@ - (instancetype)init self.isPreviewReady = NO; self.shouldHandleBoundsChange = YES; self.previousSplitRatio = -1.0; + + [self setupToolbarItems]; + self->toolbarGroupItemsDictionary = [NSMutableDictionary new]; + return self; } @@ -651,6 +667,290 @@ - (BOOL)validateUserInterfaceItem:(id)item return result; } +- (void)setupToolbarItems +{ + // NSToolbarItem identifier as key + self->toolbarItems = @{ + @"indent-group": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Indent", + kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeySubItems: @{ + @"shift-left": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Shift left", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(unindent:)], + }, + @"shift-right": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Shift right", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(indent:)], + }, + } + }, + @"text-formatting-group": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Bold", + kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySubItems: @{ + @"bold": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Bold", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrong:)], + }, + @"italic": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Italic", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEmphasis:)], + }, + @"underline": @{ + kMPToolbarDictKeyOrder: @2, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Underline", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnderline:)], + }, + } + }, + @"header-group": @{ + kMPToolbarDictKeyOrder: @2, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Header", + kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySubItems: @{ + @"bold": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Header 1", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH1:)], + }, + @"italic": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Header 2", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH2:)], + }, + @"underline": @{ + kMPToolbarDictKeyOrder: @2, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Header 3", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH3:)], + }, + } + }, + @"list-group": @{ + kMPToolbarDictKeyOrder: @3, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"List", + kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySubItems: @{ + @"unordered-list": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Unordered list", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnorderedList:)], + }, + @"ordered-list": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Ordered list", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleOrderedList:)], + } + } + }, + @"blockquote": @{ + kMPToolbarDictKeyOrder: @4, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Blockquote", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], + }, + @"code": @{ + kMPToolbarDictKeyOrder: @5, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Inline code", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], + }, + @"link": @{ + kMPToolbarDictKeyOrder: @6, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Link", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], + }, + @"image": @{ + kMPToolbarDictKeyOrder: @7, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Inline code", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], + }, + @"copy-html": @{ + kMPToolbarDictKeyOrder: @8, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Copy HTML", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], + }, + @"toggle-editor-pane": @{ + kMPToolbarDictKeyOrder: @9, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Toggle editor pane", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], + }, + @"toggle-preview-pane": @{ + kMPToolbarDictKeyOrder: @10, + kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyTitle: @"Toggle preview pane", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], + }, + }; +} + +/** + * Creates an array with ordered keys from the passed argument dictionary which should be from the hierarchical dictionary produced by setupToolbarItems. + * + * @returns Ordered keys(identifiers) + */ +- (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary +{ + NSMutableArray *orderedKeys = [NSMutableArray new]; + + // Fill with required capacity + for (int i = 0; i < dictionary.count; i++) + { + orderedKeys[i] = [NSNull null]; + } + + for (NSDictionary *itemKey in dictionary) + { + NSDictionary *itemDictionary = dictionary[itemKey]; + NSInteger index = [itemDictionary[kMPToolbarDictKeyOrder] integerValue]; + orderedKeys[index] = itemKey; + } + + return [orderedKeys copy]; +} + + +#pragma mark - NSToolbarDelegate +- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar +{ + NSArray *orderedToolbarItemKeys = [self orderedToolbarItemKeysForDictionary:self->toolbarItems]; + return orderedToolbarItemKeys; +} + +- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar +{ + return [self toolbarDefaultItemIdentifiers:toolbar]; +} + +- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar +{ + return [self toolbarDefaultItemIdentifiers:toolbar]; +} + +- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag +{ + static CGFloat itemWidth = 42.5; + + NSDictionary *itemDict = self->toolbarItems[itemIdentifier]; + + if (itemDict) + { + NSDictionary *subItemDicts = itemDict[kMPToolbarDictKeySubItems]; + + NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; + + if (subItemDicts == nil) // It's a regular toolbar item + { + NSString *title = itemDict[kMPToolbarDictKeyTitle]; + NSString *iconName = itemDict[kMPToolbarDictKeyIcon]; + SEL itemSelector = [itemDict[kMPToolbarDictKeyAction] pointerValue]; + + item.label = title; + + NSImage *itemImage = [NSImage imageNamed:iconName]; + NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; + itemButton.image = itemImage; + itemButton.bezelStyle = NSBezelStyleTexturedRounded; + itemButton.target = self; + itemButton.action = itemSelector; + item.view = itemButton; + } + else // It's a segment control + { + NSToolbarItemGroup *itemGroup = [[NSToolbarItemGroup alloc] initWithItemIdentifier:itemIdentifier]; + + BOOL segmentStyleSeparated = [itemDict[kMPToolbarDictKeySegmentStyleSeparated] boolValue]; + + NSSegmentedControl *segmentedControl = [[NSSegmentedControl alloc] init]; + segmentedControl.identifier = itemIdentifier; + segmentedControl.target = self; + segmentedControl.segmentStyle = segmentStyleSeparated ? NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; + segmentedControl.trackingMode = NSSegmentSwitchTrackingMomentary; + segmentedControl.segmentCount = subItemDicts.count; + + NSMutableArray *itemGroupItems = [NSMutableArray new]; + + int segmentIndex = 0; + + for (NSString *subItemIdentifier in subItemDicts) + { + NSDictionary *subItemDict = subItemDicts[subItemIdentifier]; + NSString *subItemTitle = subItemDict[kMPToolbarDictKeyTitle]; + NSString *subItemIcon = subItemDict[kMPToolbarDictKeyIcon]; + SEL subItemSelector = [subItemDicts[kMPToolbarDictKeyAction] pointerValue]; + + NSToolbarItem *subItem = [[NSToolbarItem alloc] initWithItemIdentifier:subItemIdentifier]; + subItem.label = subItemTitle; + subItem.target = self; + subItem.action = subItemSelector; + + [segmentedControl setImage:[NSImage imageNamed:subItemIcon] forSegment:segmentIndex]; + [segmentedControl setWidth:40.0 forSegment:segmentIndex]; + + + [itemGroupItems addObject:subItem]; + segmentIndex++; + } + + CGFloat itemGroupWidth = itemWidth * itemGroupItems.count; + + itemGroup.subitems = [itemGroupItems copy]; + itemGroup.view = segmentedControl; + itemGroup.maxSize = NSMakeSize(itemGroupWidth, 25); + itemGroup.target = self; + itemGroup.action = @selector(selectedToolbarItemGroupItem:); + + [self->toolbarGroupItemsDictionary setObject:itemGroup forKey:itemIdentifier]; + + return itemGroup; + } + + return item; + } + + return nil; +} + +- (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender +{ + NSInteger selectedIndex = sender.selectedSegment; + + NSDictionary *groupDictionary = self->toolbarItems[sender.identifier]; + NSDictionary *groupSubItemsDictionary = groupDictionary[kMPToolbarDictKeySubItems]; + NSDictionary *selectedItemDictionary = [groupSubItemsDictionary allValues][selectedIndex]; + + // Invoke the toolbar item's action + // Must convert to IMP to let the compiler know about the method definition + SEL selectedItemAction = [selectedItemDictionary[kMPToolbarDictKeyAction] pointerValue]; + IMP imp = [self methodForSelector:selectedItemAction]; + void (*impFunc)(id) = (void *)imp; + impFunc(self); +} + #pragma mark - NSSplitViewDelegate diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index d418ba22..860c0646 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -25,7 +25,7 @@ - + @@ -131,67 +131,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -199,14 +146,4 @@ - - - - - - - - - - From ed1b8febfd836538437bf05faf57bedc415299b7 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 10 Feb 2017 21:09:20 +0800 Subject: [PATCH 232/439] Removed temporary toolbar icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Used these for development. Now going to use @alexkaessner’s icons --- .../Blockquote.imageset/Blockquote@2x.png | Bin 1572 -> 0 bytes .../Blockquote.imageset/Contents.json | 17 --------------- .../Toolbar icons/Bold.imageset/Contents.json | 20 ------------------ .../Comment.imageset/Comment@2x.png | Bin 703 -> 0 bytes .../Comment.imageset/Contents.json | 17 --------------- .../Toolbar icons/Contents.json | 6 ------ .../CopyHTML.imageset/Contents.json | 17 --------------- .../CopyHTML.imageset/CopyHTML@2x.png | Bin 714 -> 0 bytes .../Header1.imageset/Contents.json | 17 --------------- .../Header1.imageset/Header1@2x.png | Bin 854 -> 0 bytes .../Header2.imageset/Contents.json | 17 --------------- .../Header2.imageset/Header2@2x.png | Bin 854 -> 0 bytes .../Header3.imageset/Contents.json | 17 --------------- .../Header3.imageset/Header3@2x.png | Bin 854 -> 0 bytes .../HideEditor.imageset/Contents.json | 17 --------------- .../HideEditor.imageset/HideEditor@2x.png | Bin 653 -> 0 bytes .../HidePreview.imageset/Contents.json | 17 --------------- .../HidePreview.imageset/HidePreview@2x.png | Bin 770 -> 0 bytes .../Highlight.imageset/Contents.json | 17 --------------- .../Highlight.imageset/Highlight@2x.png | Bin 950 -> 0 bytes .../Image.imageset/Contents.json | 17 --------------- .../Toolbar icons/Image.imageset/Image@2x.png | Bin 1003 -> 0 bytes .../InlineCode.imageset/Contents.json | 17 --------------- .../InlineCode.imageset/InlineCode@2x.png | Bin 622 -> 0 bytes .../Italic.imageset/Contents.json | 20 ------------------ .../Toolbar icons/Link.imageset/Contents.json | 17 --------------- .../Toolbar icons/Link.imageset/Link@2x.png | Bin 1079 -> 0 bytes .../OrderedList.imageset/Contents.json | 17 --------------- .../OrderedList.imageset/OrderedList@2x.png | Bin 635 -> 0 bytes .../ShiftLeft.imageset/Contents.json | 17 --------------- .../ShiftLeft.imageset/ShiftLeft@2x.png | Bin 508 -> 0 bytes .../ShiftRight.imageset/Contents.json | 17 --------------- .../ShiftRight.imageset/ShiftRight@2x.png | Bin 491 -> 0 bytes .../Strikethrough.imageset/Contents.json | 17 --------------- .../Strikethrough@2x.png | Bin 779 -> 0 bytes .../Underline.imageset/Contents.json | 20 ------------------ .../UnorderedList.imageset/Contents.json | 17 --------------- .../UnorderedList@2x.png | Bin 1085 -> 0 bytes 38 files changed, 355 deletions(-) delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Blockquote@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Comment@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/CopyHTML.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/CopyHTML.imageset/CopyHTML@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Header1@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Header2.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Header2.imageset/Header2@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Header3.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Header3.imageset/Header3@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/HideEditor.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/HideEditor.imageset/HideEditor@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/HidePreview@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Highlight@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Image.imageset/Image@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/InlineCode@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Italic.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Link.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Link.imageset/Link@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/OrderedList@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/ShiftLeft@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/ShiftRight@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Strikethrough@2x.png delete mode 100644 MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/UnorderedList@2x.png diff --git a/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Blockquote@2x.png b/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Blockquote@2x.png deleted file mode 100644 index 5a3b87c1f5ba0198549403b5a3a44d6b94619583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1572 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|RWd^&N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@w*YQzUNJP7fB~jokyxN_sAmB35=^15FMg%Dxp39RB|)hO_hL1;IHa;5RX-@T zIKQ+g85nVC${?!>telHd6HD@oLh|!-V4)b0kzbNuoRMFk;2dnGpy8XCoS6p_&;;x7 z^|kWMD=taQOHTE4u~h<^p_iGNV&!CP>}X-`>gHYG!HbV(Dnt=vcFDNnO765H_NiE7OOHFYr%Fk5*d)g`!w_99rng`XJ zg3~Rot~mAT10ACeidv+oh6w@F4~Pj*xIhj(>8Iua(|ZvxVVfp2e`8=^n&#=^7*cWT z%`9J!DUK4y%eS&@T;S2#)OBbD$4Y0lwXT8fF9cj=oqKkPmhdpYy>ngBo)tfZ}kuM8}Mx2{cd-%!aw;RAJ3gT^ZVoN^m{WSP3E3| z9{gD|E9kS1icTV@cf=u~X&YKpk(m#7igB;9w48iW=kP;@3eGt3m)lt1u>2K`+b8#i z_liC1{K!1k)qB6K%rX0Iu*$$CH)Rg9?EcV0Z`o!(^sz_IE5R@;E@tTiQZ$G0gdE4;Fz zq_yccY`H73X*$!}+Xn)t{dUk>_(tl&6o(3t^IvVd3^whaY~p&DU-SQROcj@r{T#deN}GpQ z?)L8dXz^l-`h<@%5(TerStLfvB)j#T4ehwSA@ z`_%o^ZG+jQ0(En3Go!v@&635PU%$P1|F-vVanG@T9}~p)MJ4&h2xa(By>)q-=OM{; zERP$@q)$1|nfTs$+oG*@YyW?ofEM*A3F80pAL<7fyk<<$bJ#uG8dPq3y85}Sb4q9e E0JfN55C8xG diff --git a/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json deleted file mode 100644 index 5b877cb3..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Blockquote.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Blockquote@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json deleted file mode 100644 index f8f827e4..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Bold.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Comment@2x.png b/MacDown/Images.xcassets/Toolbar icons/Comment.imageset/Comment@2x.png deleted file mode 100644 index 958e2fb1b938cfd93e675df8bdc3f251e54efcfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)p}?{zFrUwN zU{|oqb6rmtanT(N}!kZ`5^E2YUEb7(r%I5oM}jK9!TaSIdvOt=$9 zokQ5BY2?}XC0E6jat?n%_+-?XT4I(vRqoGJAWE>`LSmPh(huQP2RPQo#{ zU1QMrEVIRv{a6hujwR!=rP1^r8rU^Wu;*98nL1V1g)pkxpOw@Edwx}1m8fd~R`?c{ z#~U02ggKvZ|U*1jy=CBZp^3p-kY#Jhv_=_Snc3D zK*f>iox-rCUtoE(Tn8nbLZjOXgJrr79+)Pm?X2QVohG*%VN@Mo>nOs%z%>!=9*mWe zu5~J|JAu}OXnZNJgJT|Dwlv5}*E$t9CeiZVg)j=*pOsXfJ-;fhg=7C%tkexGkCyA8 zg!>JHUMu`znz)-xCZFcL$y#}Q%oO2K2POC*D@u+m{Sy% zbF{Is?s5b-Ok=Eucgr?9GG}h8v{4V0FL@U_gOmrGnMPS z&t^(i!nV54N&s#3sUIEyp}XaS29Uva#7*+?Qd~-y`)F6uri7zFI8aI(JK#`^*#4t? z58sCv`)_(}8OvNoH^Y{&oc>#sJK4iHA!((&pcdFm?~*9kUfuH^wv)7VDaW4DYD@y* z5^{unj=Ez%w4C6CWT7XYxq?%>a!Na*~sVM`b4;&U1TC8 z`yJUX^hY6ICNfwc&=UG@=>vJ~M}ThQ`B0x_jbG&^ZI#jq(nhjx$8)Ps(-K#L$w1IY zCBc2*?~`*P47O9N#FD1q48tk?@*yMf;GkPcJ>*YRTH0zMALomvDl6_(X&|sJN1L>V za|~!u%n<9)r!HxNj#|>a5)ew51_4{$zN|a6))EKuMTgeaB$>cTGvx&c*cM+UVi4~4$tm~k1I^Z)<=07*qoM6N<$g7a=o5&!@I diff --git a/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json deleted file mode 100644 index ff03f4e7..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Header1@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Header1@2x.png b/MacDown/Images.xcassets/Toolbar icons/Header1.imageset/Header1@2x.png deleted file mode 100644 index eed0d18d8ef2890a9a59daa853fb79738cd61310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 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 diff --git a/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json deleted file mode 100644 index 4aee5eb8..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "HidePreview@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/HidePreview@2x.png b/MacDown/Images.xcassets/Toolbar icons/HidePreview.imageset/HidePreview@2x.png deleted file mode 100644 index d072aef87d0dea029d407fa308eed1de81309d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)`e zn@1o`(++e3T|#3Qs*!5#)JDc6h`rHbeG^y1iOY#hOZfY)mnH{$&MU8iXF+J$F8B50=_ixHJ^Q{i9IX1DvXP7X{ zyTJYQ?kZs0zO1m2^EQ*tgn*PL8CpbN=+^1%Q)}oIj+)K{Oz4K2OJ^UNnAn}s*{9Z! zD;zzY37A9rCy;p284tGs<~@a;K#!r>c96ESFVGqE5wEpZ9JeFVr?k)08L>m?4K#b2 z!?X&;Q0%a(W1gWZ*6NogL0skD88Hd;3i=846&gchtsgr)p|znZhcpS|<}7wp%nM%^ zddFh8`Gu1)v~QGbx>hE)xY#Y`r*j@$<`-R)Btc9Mn$eSvzxK{JZ$oELn~aOaAds52 z$rBvyk}-LF(I-C7Gr+J7g3C!~_@_KiiT&q$8!@!nE}0hV;lV{8KM(O*vVy@U^0ck@ zs%IX*a0zONkx-gwXp?49njl0cbJop%KeSB47p&pZpLF2gtJji~*8E07Ae+i}g`x*LSlx(_2KH7eY1hKh@29yQm8DNz8`89-8(wfJIwtZ@~&h3)~v0_?V zCtSlJtu@4ZcvYtPv2I~%ro8mI7@Y)b*mTB!gXW)$(KTLLkd!9b;9b&MT5Hf1ZUU`? zHf&b9APNM20Kzt$I$k&kQ~&?~07*qoM6N<$f+X-~ AS^xk5 diff --git a/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json deleted file mode 100644 index a075af3f..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Highlight@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Highlight@2x.png b/MacDown/Images.xcassets/Toolbar icons/Highlight.imageset/Highlight@2x.png deleted file mode 100644 index 503760f7f31239b2ac1ec75a88293887f5898da7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmV;n14;aeP)08uRj`hvQBo)p#1tvgNJQ+k6p4Zc47MqRRHjMk z-ylW^LQq7|BG?#$RXQ6%R77%Z?9_mucs}pmjG0VkFPq!lyUj8mygNU4=6k-~ot@o* zfoL%TF#<6HF#<6HF#<6Hb&5c%)oP$+v{WaqAd3S_HnI9bgJ-X-VNH_dU}TPZWg4vN zk2>2v|08UB!K&?*T~D6W-Gf%=`oZeH2JFEuXOgQN?6G|hV7`je-su;-a^H(Z1OM@e z&QShXrCYja;8Py3ij{*7_}E<)S905VhMP`a*-xlGix)5>qB8b_bPx&BwfaCqb=e`? z)ICC3Tgys87x@gIcOHcI$~PK~7Rg!kS!H9TJ<}$@z47Wm+GWCT+n=$vnsy^gHA$1Hs zhper28kA0jL7TC93oAG#er9P&7dio({<)$12|LW>I}Y&pLBM&T`vz+qpK)N5*HISW zZlU`MYn*=L054{Rwfzi0rp-weU?&{d-{enPki(=|p!*IhAe?xLtgRjf((lV4sSBBD z>-}o%I*Ak0meiz^ZhJR*0~Wfy`wn{?=RP>Vxvs7o9LCgFR?`{V&kDZ0O@-@>@|q02 zbiB~cYSizSrObIlXbR1vhiDV&(=yF^3u}O{dfv=tfwO%$cN{ICHKbr=wRJk?zOqBs zksRqFjyy4+g27>E*Xn&6-9YDpo%U9Kqxcmyk$lwW<^4``&|bVL!pL7hs0#nSp?(sr zBE7QGY>S2!bPwq#!btI+cQGQ4q`}gZ*#F-*ltz(2L#A!0_TKv780*57@=w9B5Uj3r z=oK!xmN_>%&C&6_hNCw* zIkb!VOZ^w5KakcQlX+nZuk9Dy?HAJ+ff#`pff#`pff#`pff#`pff`5P YAA<0T@+Us4UH||907*qoM6N<$g2a`}sQ>@~ diff --git a/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json deleted file mode 100644 index 5b3fdffd..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Image@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Image@2x.png b/MacDown/Images.xcassets/Toolbar icons/Image.imageset/Image@2x.png deleted file mode 100644 index 97c10c520994c233e1f362165bf511f53b490f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmVv@yKSv6mKUJ& z@Nam~BsH9i6<1-BQJm(6kZw*^98Id#9<{OD6f1=`r6 zxJJIVK*)RB=8p6)$jQ8dZG2u#V|yDQUS5 zi)XwBehn*KN124>>MF?_UFvC~PLVdJSG^7hb1s{CH*7)JXN>O?`l$GkQ?OiZrPLv& z4v{veSKSqa_&u;KTvD8j7PSTayBH!mZi~fsQ5}(t9b(pJ=Xup#K!{xr+x@81f1&J! zAE*I22ghDj84ts9J1fNwF*Sc&VsR{F#TC%~LeLk*^8}F`MAeCia?wV%rXXGrl+I z>(rkoiAfz|Cdc5eFh$6|du)n%i5^=J<3q6QW8wXIi%i;ywI@2mMM}nc8!tj+?;HGQ zO^oc#9a-SmC*aLlzC0W8$wLg&Kgyfa*scH~lgTh`gMWxGq6^8GrepFZ53#>cP4ni? z*OiF0K@3;J&&3|mQ{)O8<4Y%R@(>fq)SH+WJjtwN6JoofcBDKnC#>JMPJTJWEX7_~ zz2R8|O^R(FY~Q9%sIN_#Rf~7LBnabC*nWMu;~g|7VX~H-ux92Y2;*DE_5poEGlc51 z4Q}i_sh*)iqy<4gmKaxlrdEI|4YAmz!F2-wv46zN;iPo6Zq7RM0ImH;yb~Tkv${ef zU!bpbO4J}2tTEXBigNnY68lM3RtG>kiFpLK^V};dAnlirX}kII@FeZZwm20|V);rp z4GYkqNotsOS#0fsxzb&DP#?tQF}QRe#A|mcObi_e9S9u=9S9u=9S9u=9S9u=9r&+1 Z@CQ>qJFeF;C+PqH002ovPDHLkV1oT}&Cvh= diff --git a/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json deleted file mode 100644 index 72385e47..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "InlineCode@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/InlineCode@2x.png b/MacDown/Images.xcassets/Toolbar icons/InlineCode.imageset/InlineCode@2x.png deleted file mode 100644 index e44adab3c5b3dee54aa0b3b113729357696d76ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*sd~CN zhGek5onh#A*g?QmkvCLoNy{Xe2H__hmdxcI?-yieM2~0r_Tpo;?3dkIRK!x+4B~Kh+i*a4% zmVfhBlk(!ZuIloy)f#mVsB7qEOLMbCdOBs#>E0IewRG{X)@8{}l8x2Zat|(zu7CH- zcekD1<2$qXKVO}q@v??#MuT|3_HaF!T}yix=RM1wWYSrCvcQI2{%ePXeN%UBrPJr0 z#Sa#(obhu``?b;{*>>*_v7E~1_ed8$-=}89Th~}fHmASe`C|X&dvA0+ zN)GO5{JCQGQ6s-6%es_wqOfa7Vi>b?ZVgLTbQmP|jYH(42YEhzQ00q)kuyG58Fued3@kv!Wq?)~X>M1Pxvg zaSrr>Z@^o2MWbNctH2L>p`oX*9ZZ|t?1_f_E+at0c=5@Gf^|%PwnZbL(+GaPl*q6x zHqlif!7|5NO#h6Di-vrURhZ-8i%Zg|7^VNmUI4^vdTRJvYH)TUiYHl) z1Y|XVl@oo#t8)G=z6Df+o38C>xqC&^58+Bg_mVg3#L3NolM;dN2iu|%R0$CXS0cKL zJPGxt0`&Up6Q2Tiz-)Xx9s{PH0HIy}^tzG9ppSliU zKX*3g5eGZ`b)xZ*3Pp>wM2rFLsOrIX@C;bX&)_ud2Cr;~iFKX$wwRFG2gVIi8%m5s z)dGpMHp+pDvB^Psm%$I;Bkw#y<@NO%D^TOe+%}0K@YV)FtA$cEoyXFbf5YFI#3059C zq39uhezYFaJzgzdlU9c(ORO1O8;=69CdZyXPi~{{i_$|--`f%3O`o2EEoLe5zRnD|LJ)cdL0c(V4nK=Zss94H0jQ{DqjcP~-y0wgKq)jWXJwU@)v$2N!Q-<*Z xK3S?jsz9nhsz9nhsz9nhsz9nhs=$A$z;79(aMq^Ou(JRF002ovPDHLkV1kDE2KWE~ diff --git a/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json deleted file mode 100644 index 88afe703..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "OrderedList@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/OrderedList@2x.png b/MacDown/Images.xcassets/Toolbar icons/OrderedList.imageset/OrderedList@2x.png deleted file mode 100644 index 668ebb7f61d205f4e1f6c623a21ef9d5721db4c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*8F{)m zhGek5opD~W3i%c@^rtS&#d^8B3N_vVy8uigLs?3qe^p^E|RR~SnjWRa-@ z`RqX}Lqyj!ADMFh^Z(;Dg_rpq6S%jsf5@ov5qO;>rhe7yEt`r?A7{R%_MClEC$1_y z{H7|~>vrE~n)e)om7iC)eeSw-Cbih}_8I9Lw-yQK{L#+cm9lO6jF)@ru8Q8}`kgxG z+~XeRKd+B0;Pjd!IMts+Nw|PnX!{0^r9WRe@0Cyd*mFX*h~1~*NXm-Vr`DA%R}UI} zsW9!4PdIqH%u2aLK&9=l%9U08Ut1J6bruS3%QQK*_wS^mjc?xWm%D9db*<@QaC3+9 zgx`^@jVhg@KdE{*C~>2OD^BT(7?Xc{;Fs~Z)qg4(s;)p!o_#55j}J@nnaoo}zw z4oAJ~@sBPj&eU=RhDS_EgZw%#jqpRSnD^@Te>5$V`e$(E)*1qvPMqihyI+0;nA`kPo6E8V-B|H}W#xiks zqWR{%PIf1I?)t7-WOMyh8+XCxtu7I|XPjnlpVIUEp={B<2C()X{ zgJMg4|(4z0b?M8m>E#a3Wr|r1{ POic`)u6{1-oD!M<7a|(X diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json deleted file mode 100644 index e44affd8..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "ShiftLeft@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/ShiftLeft@2x.png b/MacDown/Images.xcassets/Toolbar icons/ShiftLeft.imageset/ShiftLeft@2x.png deleted file mode 100644 index bebfaea97626447f78595162be945332d019dc51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*ZuWF> z49Q@9JL9bHVF!WM#|2JJ(OwHUZ#gXD%V;W4Vaj@NOw?)tr;5}AHvtWg6E)5oQr61a zsQtURDSzq7{?BFU_qG=v`*XSW>&Vw$)22^@qN#) zzLNEk)81BJn^onaYkK{Kebl*|Zh1TPwnrYYoqqRDVRy1vQpxlkiu01bJzOO_+4xc8 z54m-o8@mcB9BkIDT_>OX^-_fSH@?p2nEGeMsH}xmA?g~}|FR2JRm+o;<(KW#EOgw)x-l?3_^jyhT`vxAYg>Eu|A7@- z=SD9o{1ShbL9(Fo`in2_1`d{Um#v8LetdYHXZ)VX9c^pZJe+IYwyr2IX#d}UJNU9hou&gE1?${NN&GKn4~$L*Pgg&ebxsLQ01iLkZ2$lO diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json deleted file mode 100644 index 061635c8..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "ShiftRight@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/ShiftRight@2x.png b/MacDown/Images.xcassets/Toolbar icons/ShiftRight.imageset/ShiftRight@2x.png deleted file mode 100644 index b6744db0c957bb4ed0f3d002ed0878e671b445bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvNA9*F7kA7 z49Q@9JHs*Wkb!_JXKZNGItwTLi`gNMWC}VD3At3az1yX0{y@khrXe*zdqTi3_NzjM zVjB-`eEKAMlg#bMGyk+t=6qKY;nBc?1vv<6bR~7|a_0?Ixi-7&{pzzhvWgXax96?h ztG+vST57HTKEJ$OeCNbA*jn7UpRKjg?p^7mKUHtGv_Em(!O`%5_m%pq#iw_ru3E&d=quARk_2j+UMa_S_jl^CBrp5ad@%g3nTLF1 z@nzY&7HT{9hphWynUoh|WL6UMX+z@9!WXiO?LKY&ArQaKb;}vWszL4^U$=8^{knZiW?_$^;7ft;ocA9s{q9iw?U!onQoV1NR2nCC<*r$F z*!FOTgfhSO!b_)STirS5x?x6TMa)*u*9wBl{QsR^2%LYj$E%>|^QQEzLf@lz+JuB*XCBVSYAG~`Ec>eUGV`Q&KJLAm>}7NB><(|AMl6Iy_+)mG;a+s_82@} L{an^LB{Ts5rl8vR diff --git a/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json deleted file mode 100644 index 66c49911..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Strikethrough@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Strikethrough@2x.png b/MacDown/Images.xcassets/Toolbar icons/Strikethrough.imageset/Strikethrough@2x.png deleted file mode 100644 index 160bfa6d63a7809c225c3d2194f1a60f5df82886..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)fGJ=Km;$DNDPRhi0;WKz+z1USmC7#W=>gr~95@K}g74rn zcnOBf?Z*OV9$=M7~;FZ6A)_eNI0BV(YZa+kRF2cErl@eX8yFCGgjhZ9>ww%B#LD_Uw3*Wp zkn0tyiFqY>1i53bdgS~IVUt?Nse6%nemM}-+vE-j@x;0lr?6Mn-ke&CYxq|RTdWjD zf%jCw;{FAXz|le$PGQYp3b?jT#~8Q^P8YKH*oxA}xlG*T7G_G!n8Z$A6X!g3>5QdV zS}_%1MRbBeAZKoEa+c2RHF4Y3q_{J{-P!MNJFz?oP;fg~1&O`MbG|6XrqahrwOqf| zo0NOduX%h(-ei!b&4DKP7nu$m^plEjReqc<1<$BEG#tv3+=nWEAvC|?@sJ%-gn#3E zpPz|s1z%PE(}ouiIw53x6k&0vLGnVMIvg=gU<7Epk(vrE)J78Zmp7hJ7 zopGRTl18!@R7=a$SJSyPZAOU7XP#H!xD&HP`y-IGDSkUR1x^5MKWKEZ;eF7ZQTr5q z3`~Gfn8de002ov JPDHLkV1ko1Xx0D# diff --git a/MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json deleted file mode 100644 index f8f827e4..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/Underline.imageset/Contents.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json deleted file mode 100644 index 2f491c9c..00000000 --- a/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "UnorderedList@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/UnorderedList@2x.png b/MacDown/Images.xcassets/Toolbar icons/UnorderedList.imageset/UnorderedList@2x.png deleted file mode 100644 index 3ac61a95deac7d969d288f6c4797ca70e86d8226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1085 zcmaJ=O=#0l94`(<2NMP!rd}SI2Zw9Z^dnt^-DsQE)|olmqGd9+EO~3gmb{p}uIUcK zCQL=<4uU&+@MD5HK?KqHF~!Rm_{9!W5C@(df(Oxq4)kSfw;im1lK1iF|NH$v-}%mt zLv^)#Y8?(oT{6L^$bQiNw{IgWxANW~+io1o;xy{VMbUtcu#Ea3NUCBErl2U7PR&7r zsM)7vvN$Uo;UuKGMBBz?sX9RuvNlT>r2&XRAIvFQi2643i~@=rqE7e)x1dL1UP%la zFg@Ink%kAPpiH&3f`b-E2vmqgV5x(e$yp(4m6s!DTTN47)dUZOsI{Q7LMMnK0|LLx z>y+FK16bC@`1~x(Gy{*D@z8Gau};Rv`B}~r0A-0+_y zDtcYW$k9wN7_>P&9w)JInk5a3mQynuD-1j|B}37%f;3<=ihZbnLllX0Ed^Cyr`61I znMlECOVnw`<+f9*7z)DwO;vT>+Qcci5$`{V%}hy$bPAfNU`V8K{f)LOor@Y!#K_1X zG+3!(XC7f>=8+DfX%_4kL`l(XMbj!m5V)jfVo{S|k`GaY!=)%P7x8+-ErGZ<=841@ zCdLN+d@vjgGahds;EM+Q6)caWf(kWU!O9z0UsbF<4605%^UzR+pd2@l3RaWml>+ptNj zTVutZMAP^W13gH0PxNdtUi}{3`}5J_r{k|DT92LU`Zd4waQuoYJQ?{smFp_ph#vLc zzCL0L{Bm*j-u-50`~17p?X$L!n>q%S9;J7aEd9AT>8NpB2p?EDIX$#&Kj>tvgP)G{ Gj{XG%o@hh> From 74745bb4b7c4b0a0411df1b8882a19174d7d568c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Fri, 10 Feb 2017 13:39:09 +0100 Subject: [PATCH 233/439] added toolbar icons #282 --- .../Toolbar Icons/Contents.json | 6 +++++ .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconBlockquote.png | Bin 0 -> 282 bytes .../ToolbarIconBlockquote@2x.png | Bin 0 -> 567 bytes .../ToolbarIconBold.imageset/Contents.json | 21 ++++++++++++++++++ .../ToolbarIconBold.png | Bin 0 -> 285 bytes .../ToolbarIconBold@2x.png | Bin 0 -> 537 bytes .../ToolbarIconComment.imageset/Contents.json | 21 ++++++++++++++++++ .../ToolbarIconComment.png | Bin 0 -> 230 bytes .../ToolbarIconComment@2x.png | Bin 0 -> 382 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconCopyHTML.png | Bin 0 -> 256 bytes .../ToolbarIconCopyHTML@2x.png | Bin 0 -> 423 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconHeading1.png | Bin 0 -> 220 bytes .../ToolbarIconHeading1@2x.png | Bin 0 -> 359 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconHeading2.png | Bin 0 -> 315 bytes .../ToolbarIconHeading2@2x.png | Bin 0 -> 538 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconHeading3.png | Bin 0 -> 337 bytes .../ToolbarIconHeading3@2x.png | Bin 0 -> 619 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconHideEditor.png | Bin 0 -> 331 bytes .../ToolbarIconHideEditor@2x.png | Bin 0 -> 664 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconHidePreview.png | Bin 0 -> 317 bytes .../ToolbarIconHidePreview@2x.png | Bin 0 -> 601 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconHighlight.png | Bin 0 -> 320 bytes .../ToolbarIconHighlight@2x.png | Bin 0 -> 610 bytes .../ToolbarIconImage.imageset/Contents.json | 21 ++++++++++++++++++ .../ToolbarIconImage.png | Bin 0 -> 343 bytes .../ToolbarIconImage@2x.png | Bin 0 -> 698 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconInlineCode.png | Bin 0 -> 248 bytes .../ToolbarIconInlineCode@2x.png | Bin 0 -> 394 bytes .../ToolbarIconItalic.imageset/Contents.json | 21 ++++++++++++++++++ .../ToolbarIconItalic.png | Bin 0 -> 185 bytes .../ToolbarIconItalic@2x.png | Bin 0 -> 306 bytes .../ToolbarIconLink.imageset/Contents.json | 21 ++++++++++++++++++ .../ToolbarIconLink.png | Bin 0 -> 286 bytes .../ToolbarIconLink@2x.png | Bin 0 -> 579 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconOrderedList.png | Bin 0 -> 212 bytes .../ToolbarIconOrderedList@2x.png | Bin 0 -> 413 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconShiftLeft.png | Bin 0 -> 210 bytes .../ToolbarIconShiftLeft@2x.png | Bin 0 -> 372 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconShiftRight.png | Bin 0 -> 207 bytes .../ToolbarIconShiftRight@2x.png | Bin 0 -> 357 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconStrikethrough.png | Bin 0 -> 279 bytes .../ToolbarIconStrikethrough@2x.png | Bin 0 -> 548 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconUnderlined.png | Bin 0 -> 195 bytes .../ToolbarIconUnderlined@2x.png | Bin 0 -> 322 bytes .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconUnorderedList.png | Bin 0 -> 118 bytes .../ToolbarIconUnorderedList@2x.png | Bin 0 -> 168 bytes 61 files changed, 426 insertions(+) create mode 100644 MacDown/Images.xcassets/Toolbar Icons/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/ToolbarIconBlockquote.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/ToolbarIconBlockquote@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBold.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBold.imageset/ToolbarIconBold.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBold.imageset/ToolbarIconBold@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/ToolbarIconComment.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/ToolbarIconComment@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/ToolbarIconCopyHTML.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/ToolbarIconCopyHTML@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/ToolbarIconHeading1.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/ToolbarIconHeading1@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading2.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading2.imageset/ToolbarIconHeading2.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading2.imageset/ToolbarIconHeading2@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading3.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading3.imageset/ToolbarIconHeading3.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading3.imageset/ToolbarIconHeading3@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHidePreview.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHidePreview.imageset/ToolbarIconHidePreview.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHidePreview.imageset/ToolbarIconHidePreview@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHighlight.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHighlight.imageset/ToolbarIconHighlight.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHighlight.imageset/ToolbarIconHighlight@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconImage.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconImage.imageset/ToolbarIconImage.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconImage.imageset/ToolbarIconImage@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/ToolbarIconInlineCode.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/ToolbarIconInlineCode@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconItalic.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconItalic.imageset/ToolbarIconItalic.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconItalic.imageset/ToolbarIconItalic@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/ToolbarIconLink.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/ToolbarIconLink@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/ToolbarIconOrderedList.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/ToolbarIconOrderedList@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/ToolbarIconShiftLeft.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/ToolbarIconShiftLeft@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftRight.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftRight.imageset/ToolbarIconShiftRight.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftRight.imageset/ToolbarIconShiftRight@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/ToolbarIconStrikethrough.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/ToolbarIconStrikethrough@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnderlined.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnderlined.imageset/ToolbarIconUnderlined.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnderlined.imageset/ToolbarIconUnderlined@2x.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/ToolbarIconUnorderedList.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/ToolbarIconUnorderedList@2x.png diff --git a/MacDown/Images.xcassets/Toolbar Icons/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/Contents.json new file mode 100644 index 00000000..abb8573e --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconBlockquote.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconBlockquote@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/ToolbarIconBlockquote.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBlockquote.imageset/ToolbarIconBlockquote.png new file mode 100644 index 0000000000000000000000000000000000000000..4203404b40e1d49619c6d2b39c8e3e4bf4fc1b48 GIT binary patch literal 282 zcmV+#0pCw#s{5-?_ngzcz1J}eonJTL`SKvhEQ%{!Na74DMT#tLh@b*L z4zQ&}w?Q0oagG|)>}a0IU})AY&W|jZ#LQ`zv+lSNpkG1$%8L>1D8rUK-5yQ&a6u2w zRaBV`APHd&w=`-xH1hj>fI zaL`$CaT0NGXc3_{2P4Qq)Cz)dP=_e7hSK~!axNUM|M&g7I0*N^!})m5J@4hY_q|z` zEGdu_ND3qcZbgB6H<;Q$&lsoyFQWdZ9X}{hA?I1gQza9XpSw*vU;Ku@EZ&OukK574SEaIS7Zl} zVN>#b*4z`-zgxYmTd{@y7_>-7`x6|4`=H2bA^oNlH`)T7falh%Ug)I4Irsv+Qd%?t zG*I`UoIRpp9;^bb*$2T!2*l|d;zmJPdrpU%XF)Zn1i^L*#I*x)@y01#GyObTGZQgd z8}4vx#Fb3fscKNbE9-jbYU2KZD&z881;huS6L=gob(3q(`>39q9>Ii7$#+@jv#7pf z^&-hCN1k?NX4d^@JO(QI} zL1@3RPp*9{;&d1DEX>)YL4T(=&G`eu74h6vTNS%Lg3o-U3d z7J|tM5*HuXU-T8DW@Ip2zR|M8ng7H- zwj&BVcY8c4P}4lOm*vV<=2epg^O%I1Svz}sIVYtzCowC?a)n;uUfQ`R;hxL#{S2kc zg;JR&Da}w^U=YQ7B)j2(&S)d;N-G>{zxxc2k1WrPgg&ebxsLQ01qT!*Z=?k literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBold.imageset/ToolbarIconBold@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconBold.imageset/ToolbarIconBold@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c7f2c2052941e1fc0f09601a7071bee1a9688f GIT binary patch literal 537 zcmV+!0_OdRP);&5~eV|K4m z(O)liw^5-Nz760NkT}t&Mtp6TEUvXhObV?V#2#g`Nv#Qq?ISj75W6l*=(n>_Hs2RF zXiQ!jzS=J7lGeVC?V_TN{lIv(HVb0`T}12=#0}*bhMofEfg?a-L~p|vMWjGgeGWED zQ5fZmRwcyvD_|KI&)0~eLWoHY&({v%JCi?1*S-1K4gMF3^uSSkR6p zZ25YveI1xYQC_Gzp7u%;Wb_(t0gipdn7atLd1stxQrrS%h;dupychTik5J5;pG_I# zk0bm?=yQB+!`Q^u+A3z*GkkA`KiK7NiEk^XQDq;na!NfI3-?-m28+1jJ`}qUz;ne1 zqa~kk&H)$JWT?;j`l`OI(Bi(lsw8wg&(*4L@j7$5P?60m;Q=@XHUYjslB5o#4x|qJ bs}6hvfzt763_zVL00000NkvXXu0mjf`q$&f literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/Contents.json new file mode 100644 index 00000000..3a5ef088 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconComment.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconComment@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/ToolbarIconComment.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconComment.imageset/ToolbarIconComment.png new file mode 100644 index 0000000000000000000000000000000000000000..fdde5339adc91e5c849204162a183c946a5358bb GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%Lhyo-U3d z7J_dlZ{%$-;9*ggvig?DX{9BWsBWc}pgN<0zbT8i*&;i|kr>v2|dg~rV{CW(Q0Ws^)ku6Y|dN%YbA zyUUcckMyrinY>0opRap=oss%pm5;A~XRB%-xy*20EmAQ~#x1O4dE&f|e8YWvZ91OU b#;-4LXp>#ut{HFy=uievS3j3^P6Ix0pj<_K4yqF3W{|8PYZ(L0#ZWB;j`u}S02_7D+`nbvY|CX8g z#+EXbGW|DgZ2dcD^V`WkHf!il)7{wXsek+XC#}$wx|w$Cx^MH@cJ&9u=|~&)FWvf9 zIQsbNFD^f~bSUkTH2=Egt?zQNNBcXAu3K8(SS~#$YRddo)9+o5(3o!)>LSuDx}?U~ z+)Il4>C}fJJiV=-T%AJ~Yz+AKIN5KCiP)*t%v>@+!G)5R7a}z5D;5S`0#Xvn@fkW( z)Z>`ElNZ)xxGh?;F~CkDm>;Cvj%yvz1=9IeTQ%aZ1TTJb-{yOmW989>HHkigKt16$ zOF(vH2CIT>3{LL)Vc_xi@WZbf^Q$73W{IpX+jDcDOC`|l7oEN?@>}5dV7l4|w%1ab V(vow`mIDKn!PC{xWt~$(69Dpcou2>z literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/Contents.json new file mode 100644 index 00000000..15568ad7 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconCopyHTML.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconCopyHTML@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/ToolbarIconCopyHTML.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconCopyHTML.imageset/ToolbarIconCopyHTML.png new file mode 100644 index 0000000000000000000000000000000000000000..3825f7b9e9f87761a3648394cbd435424835b69b GIT binary patch literal 256 zcmV+b0ssDqP)yf3!+Q|_;WdcE*kL>muu&|nUAv?^w33xJapE)? zhK^@8t*>Ln>(`n(@)V;yuTDH3RgCiD%3^XGtnQ(aI^ap_5;+;VHsfZ8JK|4?l3E#zM0!(mJGgtJCJwFw_+*+SN)LG(pkL{B2whc zIH!xTb=RWAvvApjNJ!n}NwF-^=+&^_o~qSNw$`ZCM*jh#STzD7$4KV@0000|-3`NyD=$-VudIOK(4fGz$k8ASjT2^FH5+Na5p?&>y zor{~z7~iYFDW$qox@Wq_lu>Jg1!nUAs6~h+oDbS8Z~&qe(2pV-=lNy4o#!>y|EU65 zPpok8j5m60g^KovI3`K*nUUw+as>;_=#X49|20KPlA3Ry#LR@b8#B+?LKCmsx3VW; zS%rHNmNiI3*gi#E)4XJnZv$)CgHP+&CIIGaWTl*Tk?@u#_8>qHtYHs6TAanx@gZA- zSd^6*(2|elMQroug#$|o^(j4H<{@UuhA8vT2nUuPkroD<#mOUQo)uGEi!^@`@QqDA zAy>fbFVW=rGEaOzx@wS@kl`gC&EvSLdke&grFR%w>P3skvEh3UbVvjUI2)wPw1)%e z;qkQJqP-eu%GAW`_N^Sk78^-9aK#>~H>5{Cy#gmpmA20O^`DVCwZmIg;03Pz)wJJ# Rz*PVM002ovPDHLkV1jCZz2X1> literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/Contents.json new file mode 100644 index 00000000..7e78c1c2 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconHeading1.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconHeading1@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/ToolbarIconHeading1.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading1.imageset/ToolbarIconHeading1.png new file mode 100644 index 0000000000000000000000000000000000000000..df3c467a5e0c14db4382b90ed87d3d793646d6c7 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%Lh?o-U3d z7J|tM60B3&4zMp^{Fu>J!SwTg;|x))a~w-PH~wH3@Ne#F)D%nMoA`#;p_I+xk3_7k z@Gb_yKl%=)Z4Nd3vASl{GnqwqDrmCoWRi4IF8;95F_Dc+K1V_<&ET(fBhM6r!_Ur& zEKuT8dBcC%x8vBev-S?Y_7hG1xg|YLO)8d*My)8so^b?N7m~PE50(Ey6Y5ly2D$STaR;rg}Oku zWgiaaoCuraL#cuv*jE6SrRk4&nMovGFdr|;mQ_~j;#x3)iY;? zX-KQHe$v!sG{5j+vI9@im2d?==0~ayJ^~kRB`%O)RBgWOki&6gbEAais|hz9G+7pG zJ^YVxZ5C^iw!*&N4bu#|uVub5zQAdkan9jfr-=GLONYbz7eqFkNp*V`(CnMju`=MW zQP3HMYl+egZFWbK4OYzYI;QNuNn|76YzC8`3UZfQ8;U|oCDs#--m-! vWO)tG7#!3$%5dh{zu7(2-8sR8#SKm{XsweC_&6yN6qF2}u6{1-oD!MNS%Lgdo-U3d z7J|tM608Ba>5` zA!F%YhDR$M&afXj=)kk-1b4^52G(N=P0v_YMRFanb@;>Cah>U-x56~GBm)O?A8CzO zOjDTy**xC#JCqp;-IqHd#`tKjM^b^>iP;M2$%i)>G;2;{F`CC%sOrNomrZgS&yhDC zH~3GmN%rMP@K2~0>$uKr=+(2R`ZIsPL4Sp|#`^|rQ`lCS7HID zOwUb+!eWI!#w6zzQUNM=S~oouS-3=zEu>S|=J^3%iBz7&0t^hBcN)rB{#yDA=z9iF LS3j3^P6W)$vrMe-h49$u=8McIzw^PZrQq<@&u}^hK#8`$+ zo->g+M3djY7t#b`ceS9HUfIVs1n^ zh|N~9EqpHHHe;99d@|3vxipGl4dhm4K$0w2^ope|yKD_s-!A_E@;4-vI)-|P6_@Qo zKeU(0CP-hCW;*~65G$oftdrBXLAw4a$U`r0VqS5bm~`}AsDm@;gIlnQ?cuiu$m5V= zO}-%H3q)iU2D4i3&gT?9t>~<}_ zf!GAmXRv57iABL?vMg(`h=Th+cW2;o??n`i9{73Ad>w~TrJix&1>&p)FRZH_i#5lF zGUGD>dOlAc;{e&;Ll{>0O>t%ZX5SXCNMnj6T2Qw(8*pXM=E(26Xdb9DcQO8HEo z^NB3KlyS7J$Ecfl(Q|9^2qissH8b;GdC%k*I!NISRV-kI^JZq=E6Xh_$Y6sRe$c>O jA^)@FT^*i>AO8Y>Z6Yoz3>5Y`00000NkvXXu0mjffhdd) literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading3.imageset/ToolbarIconHeading3@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHeading3.imageset/ToolbarIconHeading3@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bce7ee3c6c132bd967354a40a2a64ce713ebeda0 GIT binary patch literal 619 zcmV-x0+juUP)i3r!xt{yH?-}o=!5sL#nRDjM%z6Ji zGet$gf&xK-puqpFK*>KU|0Mfdh88#jKVTCMWuM4igjadY8g#kJKb_~(s(kgG!Of!A8~Zi^wo3$_L&ZzH6?4I1$b=-jei6Gs*CB5=)7dJCW3nP zrPw*R1+5@^2kr1nPLioGUGq#*k{e5UU~^6HBf&qmJvRBM4!`Qq*;;l5-FEF>lU8B6 zIHQgWd%MLuzOZULlyvxQ?qU4zB;R)vmS`VkncP6E-o+>Fcv^~mVI%+4Jf!~=ZbB)X zf;;dQ{QeX4b6TMee=R%dt?~z4?FMX{*kk;d`HEu$1qgg)4V|^;;NK~!<@cPW-wC}C zv*K7Joj?`K*1;u^iYjUje8F^s1qFfvL4lw^P~cc9@CST1ZA^_T<-Py_002ovPDHLk FV1fx%9B}{u literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/Contents.json new file mode 100644 index 00000000..57054edb --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconHideEditor.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconHideEditor@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor.png new file mode 100644 index 0000000000000000000000000000000000000000..48c1556f1e921c7571daa50843cfd2d073380d68 GIT binary patch literal 331 zcmV-R0kr;!P)n$fqA dYT*!84*(fiQl7(GPF?^2002ovPDHLkV1j@zagYE2 literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf4749896855b863598159d467f076b9898ee23 GIT binary patch literal 664 zcmV;J0%!e+P)Mhn40Fr9^k5KuuI1)CK5 z4+ODD5fniLi75I5G-53&qD5k15p2{(#1I=nMbPJL=H$-(*xVh++_l&P=f3Z}A2a99 z%oW=BqpTbYsRk1)7VSA`M6U5xEAZmh|TW|$_50tN%a>?*Z?g*VR?=n_y zq0fx^lh@%d=(#$ro@CYZ+7Q>0Zif@GsAH6@LFG=im$!}fF?tO>M?b4t^~7*b94mY$ zVqrJQD8AHH-3pB2E<^X*z94omP`=}~>QS%ZxW}8;2@BI(-rvu&n^oP;GeYi-twb5} z`P*%l4{7v16w0>RFifprI#ojSlALW}Z)*ARxN?2`|zu!^*Mx5@D zpvSxn-$XXg0gxUB78nmo2cq$@ zaqj^IuLE&B5YNJ<0Om4~E6`mA<0HE;1*q;05W|8Aqz1!fK_EdQzq!g zNf0VgFQpPVr11^LK(iWcI_gtt=3b*S2)2P=bz?o1Cb0vzGlOn09bs*~<|;a0G>2o4YmX@jt=b%hS~dFVIQN+57jms&7VN4KEfo`q<>t?(%Kg-; zEn*H_u|P*|tVnuVA>ZIh5SwzDY@mO9Sz)x@{BqxP2TgSCwj1AXsyxhPe?5VH5Gb~a zSxfCkG!IW;62qa@+QIf|*gZ`%uo5Zd`EcDU+bn zw(YS^M)Z1S*bQ>yFZc{;#MTewK`wDa#kR*nCl@hbg0WHrS;~h(=Ebqc>LGFt>OecV z2YwR!9vgv$kh%atq&!5UUdkFWj=EXbJ=raWsEG}cTi(5H!KHgNkH7f zw;~<<3GxA=6txnp!8S)+uf+>$h-?8i@btAetrU3aWhoH S7jEDH00008DI^9tt?x1Ggbmnk{(KV9r!WD#i8zKPdr)KBWbz6gDpk11lBWMgVrFl86-!H!3Gd zY$X_Usd8ERlB&|JG|+856#!APOb<+7A}2qw*40zMR^6yP;kf0tXy+onI;+P(eM=Le zp^Iu~jhs)~so?5z4p=J$Wz8&+^H8ZjZzlm*!$=~^ULuzXYFrR60oYOmknc(pxlB+v zwQaoj1Tpm_k;@E){~L+(wMQeN#YHX`sBM7&)s?CVp=?+bTrN;Gd9bs!W8PAhVYrUo zXQ8QYpZ9weOw#n73F_oIk}&z`SmN6Xj42b8=Bc!U$v#xF@;KwRHYD;KN!TF5CI545 zXV1pV7Ir2lvxniT>f=IiTf+d)>f_sbDDhXqFBAWBnG7hxjWghY3d3>cxD7StS?n5ZVNT zD5SE{%1%4+0x2x~_xqO2GP@AniH+a~KlaTx^WMI1NjwDM{9V3 zDty5JOu-=E$B?uzae;UOQ`kTQwor#9NNMQ64qia}zA0deGOK4Ar>5TQ4Ocp>=*c!OX>8FpuS`wz6V;UG1nPZH@YgQ2!vr49qxV|H=E pjo0j*|La=B5P5bR{fa$i3IJ87LjB>`nNy=fHEnZ_YV$&U??? znYlqwS~-E@Ca{fGL+}Nb3PwGzfixscqKXz2?riDaGL&8jbB2bVc z(!Zvlrd78og;hJUO*yfhOlb<9LSwZPbMqs2g&SDIekb`!}q+!Drt7-atyFPJCS{ez`7zYW;+B&<*cEzG>J4Y3A+k4aBPSaQp}U z!j)L;1joNYwFaRhQo0=&gbAA6j zL7;+npcW=!6l6zX80vL^y@HFNFW@ufPQXF<2&(-VBK=(vkpPKiU2N{b4$x%ce@*t| zyAHa<7hoQ;Oto&nA<(2HZVqG>Oh3@fu2?R z{p4wN6n_#ns0h>VB5sdxNYo4HgSMaeW gl@ll@upuX~3|NN;(2Cx6F8}}l07*qoM6N<$f+VIs;{X5v literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/Contents.json new file mode 100644 index 00000000..ab9d5136 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconInlineCode.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconInlineCode@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/ToolbarIconInlineCode.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconInlineCode.imageset/ToolbarIconInlineCode.png new file mode 100644 index 0000000000000000000000000000000000000000..59eff3ad8b0b3844916337f793cfb529a00c4e9c GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%LiZo-U3d z7J|tM60BFa81oi5{&mE$jmUxo~!N(?tc0;b$&OR7(CR5A1TBPJm1BV}M4 sg(C>&U7i;H+_u?@BK&>ICCsXoQGn2El~ zR7elKXavJtN=FfKco1izFQ}y_??(&GUP#q_7ZH7kYq2ZnMFTA~(Qb{YI(FhqMCdFo z#J)fSEi}<)2D7}-tJz~hr$etK+}m!CNS%LflPZ!4! z3&G?B3Dye&KlqnSEVNy!_*o?5fQ?g|fnX5Bl;eMbi2^4(B09=FyZuyB#9G7tXYz3%qAVZ5r-RI6)**Cb3Es! f@J(Yu5eEZ!a`A{IhX%6K4%s8ZT8?xKPr{Y5#pG%ke#v!(oPFjE27@GP^-uAI7*z{xWMb)s~M z=EwU>7e|93XIKp|WJgk9_!&llRp~K>^TtsG%26@*ic$0RdQ+hE+S5|P-d$;03kOeJ-Jh}umAu607*qoM6N<$ Ef^a~AKL7v# literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/Contents.json new file mode 100644 index 00000000..205fbc8b --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconLink.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconLink@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/ToolbarIconLink.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconLink.imageset/ToolbarIconLink.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff28e7904d301edf6229bb753135be7bcdb09eb GIT binary patch literal 286 zcmV+(0pb3MP)hsM>vIhc!OJ*#)66mRH&jbQE**1GNaCP z6tQD*hLgD2GB=~x+KKfNddLi>QK(Q*N9J{h2PhOwJ2WF((~&||(6#&N40TXjtAaY! zag2gxI~3HB*_ojzP(d?JL5H@cqX@schooUf->rEcy_eq4Gzt|8>PR79%1_Ryd&7+4 k+x0DXW0b#2w~JEnb@+t-U^WU7G4Ty(|0GV3+Z+uj}U;+f%8uLQDE#rNF|4+z67G}D2lqY>w?)Sr46$iE5*Y4lc{0kxViQprL z(2sgZFKT>G*b%}t2RTXt=|kx60_h`CRx&Kz=jvk~_z>8wt3sIZ<2b>YIfg`6S|JU2 z7QtK=WgA7!7$ZHTiFA=RtWC~Hkanwc7SZMl86OB9;diAK|25K#g&HM-bdf$!f|6q9 z`_m#vQH2;q7GtA8>XI90es@#6DdM4q=6D<-bRJLB401f?SO|~3aAUXP456FwYfd@i zu?Wt592i24BahX&AsXVW$3i$_h1*{Qo=S|Bdx6&?mzqkS4o?oD`}YRgyx^pX-xH$^ zIXllGbjSeOkh&4V%Y}S&8jdLm?H6YHrXG*Nw`!q_pSk*rq3{|nV+7_e0>8@2q0v@n RU@QOt002ovPDHLkV1n%N2T1?` literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/Contents.json new file mode 100644 index 00000000..b9b40746 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconOrderedList.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconOrderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/ToolbarIconOrderedList.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/ToolbarIconOrderedList.png new file mode 100644 index 0000000000000000000000000000000000000000..6f1bde6b8085b3fbd36822a8b0d2a724a4419a40 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%Lg+PZ!4! z3&G?B3Bv~I7nda+{`5-OO=FWv;yS{Ak>@x6lgUkiTNX>VDS7g=cS^V(S(SKjvA`48 zAO>a4uFf!Sqp95)S1UwTF+MG0{%ED3=NRPf<#VXnML45DN#HcYM@5yxC(<@CmcC<1 zs@~+=kj0|f|I|UIJ53<+-WfKjPm&$|OdtJBnB8}p@G&xk?KN2Z{D9{RptBe}UHx3v IIVCg!0Jo$@3IG5A literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/ToolbarIconOrderedList@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconOrderedList.imageset/ToolbarIconOrderedList@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..addab558b2aab6fbbf3ac2bb62e5d99c811d5e63 GIT binary patch literal 413 zcmV;O0b>4%P)jgR01B#>7~8}KPo*jWp~ zM!_Oj3igp8d4MEEh)EFr=Dd-+3kjUCcT1Ro&)M1A+xeYc-7OT%tO8a6e=AT#+BLkv z3eF&RJ4C@4zTgRR7baB_JAx{lLm&P!5$%#7_kO708DED*80YR(*n0{kdnv~5JXDu* z=LuZBXu{G~R`*z%_v9Dp(t`Xfn$V>K+nJ>?K?Pt zr0Ez}K9+Al^bMCF2YCl1@eL%+l^~sWn@|2SdT_h#+1xf{U^mj|MYDwp5q9N;noz_k z{uO3W3Hx$)a$$Ug7x3b0EftaL^%Uf8)_~tkH>oQh%UdRTfKRxHJ^2~95~TA68TB@L zPt=4741*_|4_VT7B+k6~K}J;^_4CY?SVF6SRlq9nPb#nmz#^sY&DiZ@00000NkvXX Hu0mjfyH~Iw literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/Contents.json new file mode 100644 index 00000000..3175d09f --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconShiftLeft.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconShiftLeft@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/ToolbarIconShiftLeft.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/ToolbarIconShiftLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..27ca83f7e2fb458eb7ddf51bf1c52cc8250e3b3c GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%LgcPZ!4! z3&G?B3DzqdjAaWH6+PJQvTXVVTy;y1jbeSxsC{XTxnkz!>;j3 zqNCd&MM5Hv@#uz1;nmk2emQm>cI5G55T2Aap)rI}A>WQMX;p>r6Qu~2FO3#g7#1uk z6zG_ES@PmDrFKb=%kBzg%t>wn>|7`OwiqzGWm>f|Fr<3uJfE;uYdg?U44$rjF6*2U FngFnbK@k7| literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/ToolbarIconShiftLeft@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconShiftLeft.imageset/ToolbarIconShiftLeft@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bda3349df90795f78cdc1d98f21d2d4e260b0ed5 GIT binary patch literal 372 zcmV-)0gL{LP)(S{mTK z;!z+_e&k>m@1&C>#c?k8Ue3-khdba7xC8FMP8K`^acg$=?V@5F>;6gHf0>7*Wx!3Q3r7(M#o$V?joW#;!uo^r4&3wM6JX|wb%UMKmbAzgs?)a zLYu#mXKI5|twlsp!i87|oeHC=OA%2tdoD)DL<-I#qKF0JAv)>?Y&4;ilAKDal;#G_ zPhMH`lVf$zY4e+a&$uAZs_++KCZfsRJ)E!H)z| SOQFU90000NS%LgEPZ!4! z3&G?B3DzfV2Vxf-`_E$F!ON4uDEY>KZ)u6fg$8B^9fy^U27muL91~TT*2tN#IG>Sq zW93gZv7@dI8`T}wG`sfcEHqf4H{mIdPfDiy)gv9JT%S&Sb@sT!TaoI`{23=g6^=;9;r2=o@!oPn#zf1_je~(fkxT2?2LAaTKo>E1y85}Sb4q9e E07n!?!Tg3Iq*LY?6s9gM`W#5=(no=T+9Z2?DXLzj{P5E zkB<_7;EOnkE$03IM;aVN#9c)vCWE1rY(&J}#F>~3dQ!3y5qB3CVk2x-#Ugb`%{MGH z0b#6*Pz2XPC}D`0i?kGRYmrtb11BY12E-L2mn0bwAH)da&SD-aV72z|!)Xg;E6KUa ztqghi$+7bAlW(;Se<)$(SF5;CeW&mPmOP6NT18%Q`)DCK79AYwLPQjY-HAz{@v|rN z3$}bH=2dJORGHLZ4(;+W^*`9y954sW0dv3{cscL{iTRFHuz#4M00000NkvXXu0mjf DrwNZy literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/Contents.json new file mode 100644 index 00000000..f60ed71a --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconStrikethrough.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconStrikethrough@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/ToolbarIconStrikethrough.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconStrikethrough.imageset/ToolbarIconStrikethrough.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a0a0dfca3645fdc5a9e7c5b546b9cc0f2f24b9 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%Lg>o-U3d z7J|tM5+5BnC78Gyf7l7svp&*xh~YZ&#=%Eu0_&I^1NB2-(1JbW7t5{%#q+g(3@hPOug?L%PJrn*5hbkR-KJDYyoMz1=n#`>|p|QSUN0-RqK4wvQ=A9Kr&$Lsq2{Zwlxcz61DTZW$WDyOiT$1MGlqxn74jtilP{^H*Fq zgIAfxx^b#)8--Gb$3Dgm!02w%FLLN*WT*@)k058-rU3|&dM3}n1UD3<{GYjQ%gJs? zLu1yOxsYoTYQWU-Ab# zp_ZicrsxA&13gL0U9`hc0O#-m`7gTLRH7}*hB#x$nFlx<8OUiLO+>c><_%Umo=XwW zTEU&>Qef2t^O+1zZRkqld?Qla*(BpC_pD&%404kaBbB^B_N=woWPnHbY{T!RTtgb8c4Ez9Mc7ZBOBUm8-0000NS%Lg2PZ!4! z3&G?BiH{HL4OpZ$v@m(_sI)WAFmTZjkTC7}a$s@v3|sbHzCzu<9g-9*Cmk?a@QUAI zP0JGQBW#_GPYf88+c=yY*iP)>IC92ekC2uO-;)1K8|?(_8@mL38+llEK9Uq^zM)`v ri@E0Bky-yI%xUr0pR_6QI17VjrNDX9&J|CAu3+$V^>bP0l+XkKwQ@gl literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnderlined.imageset/ToolbarIconUnderlined@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnderlined.imageset/ToolbarIconUnderlined@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..636ccaac57fdb263793f3611627b26a95a95d7f4 GIT binary patch literal 322 zcmV-I0lof-P)iuOEZS?XaA?mi~SYt2Y;J~dKr#L+c^2C*WB=ba4t5aa$RF8EioFlclt{N;M1&07*qoM6N<$f{_7@sQ>@~ literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/Contents.json new file mode 100644 index 00000000..4bc5c8ee --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconUnorderedList.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconUnorderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/ToolbarIconUnorderedList.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/ToolbarIconUnorderedList.png new file mode 100644 index 0000000000000000000000000000000000000000..856b5eb16a9859b001eb9f75a26247d1a980658f GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQmUKs7M+SzC{oH>NS%G|APZ!4! z3&G?B3Dzks2f|Fw{%@=aGMM%4;3?U!YJnTAA{O(Xja61LyI5m8X9q*eW22>ya;9Yi PH8Oa*`njxgN@xNAn4}|r literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/ToolbarIconUnorderedList@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconUnorderedList.imageset/ToolbarIconUnorderedList@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c43c6d426ee482e8f29da0f88e85c631199a2260 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^Y9P$P1|(P5zFY^SSkfJR9T^xl_H+M9WCil$JzX3_ zA~@e(cH}ysz{BG3_IpkK{q(>plLrfVIUW~^n)56XX=h+$O6R_E^vCzvTaVuDsG3kO zdVc1*2iy0bZjLf+v|)^%nZCC3z`TaFcZxrCIRNQ1o3FVvfHZO0=w0XGT&eQ?JkTlz MPgg&ebxsLQ03FOczW@LL literal 0 HcmV?d00001 From 88673d1b0a71c4bd62ac856446fc7de62e68a7ca Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 10 Feb 2017 21:17:35 +0800 Subject: [PATCH 234/439] Using the new toolbar icons --- MacDown/Code/Document/MPDocument.m | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 21b98865..ac035d4c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -679,13 +679,13 @@ - (void)setupToolbarItems kMPToolbarDictKeySubItems: @{ @"shift-left": @{ kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconShiftLeft", kMPToolbarDictKeyTitle: @"Shift left", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(unindent:)], }, @"shift-right": @{ kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconShiftRight", kMPToolbarDictKeyTitle: @"Shift right", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(indent:)], }, @@ -699,46 +699,46 @@ - (void)setupToolbarItems kMPToolbarDictKeySubItems: @{ @"bold": @{ kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconBold", kMPToolbarDictKeyTitle: @"Bold", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrong:)], }, @"italic": @{ kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconItalic", kMPToolbarDictKeyTitle: @"Italic", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEmphasis:)], }, @"underline": @{ kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconUnderlined", kMPToolbarDictKeyTitle: @"Underline", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnderline:)], }, } }, - @"header-group": @{ + @"heading-group": @{ kMPToolbarDictKeyOrder: @2, kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, kMPToolbarDictKeyTitle: @"Header", kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ - @"bold": @{ + @"heading1": @{ kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Header 1", + kMPToolbarDictKeyIcon: @"ToolbarIconHeading1", + kMPToolbarDictKeyTitle: @"Heading 1", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH1:)], }, - @"italic": @{ + @"heading2": @{ kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Header 2", + kMPToolbarDictKeyIcon: @"ToolbarIconHeading2", + kMPToolbarDictKeyTitle: @"Heading 2", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH2:)], }, - @"underline": @{ + @"heading3": @{ kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Header 3", + kMPToolbarDictKeyIcon: @"ToolbarIconHeading3", + kMPToolbarDictKeyTitle: @"Heading 3", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH3:)], }, } @@ -751,13 +751,13 @@ - (void)setupToolbarItems kMPToolbarDictKeySubItems: @{ @"unordered-list": @{ kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconUnorderedList", kMPToolbarDictKeyTitle: @"Unordered list", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnorderedList:)], }, @"ordered-list": @{ kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconOrderedList", kMPToolbarDictKeyTitle: @"Ordered list", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleOrderedList:)], } @@ -765,43 +765,43 @@ - (void)setupToolbarItems }, @"blockquote": @{ kMPToolbarDictKeyOrder: @4, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconBlockquote", kMPToolbarDictKeyTitle: @"Blockquote", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], }, @"code": @{ kMPToolbarDictKeyOrder: @5, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconInlineCode", kMPToolbarDictKeyTitle: @"Inline code", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], }, @"link": @{ kMPToolbarDictKeyOrder: @6, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconLink", kMPToolbarDictKeyTitle: @"Link", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], }, @"image": @{ kMPToolbarDictKeyOrder: @7, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconImage", kMPToolbarDictKeyTitle: @"Inline code", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], }, @"copy-html": @{ kMPToolbarDictKeyOrder: @8, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconCopyHTML", kMPToolbarDictKeyTitle: @"Copy HTML", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], }, @"toggle-editor-pane": @{ kMPToolbarDictKeyOrder: @9, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", kMPToolbarDictKeyTitle: @"Toggle editor pane", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], }, @"toggle-preview-pane": @{ kMPToolbarDictKeyOrder: @10, - kMPToolbarDictKeyIcon: NSImageNameBluetoothTemplate, + kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", kMPToolbarDictKeyTitle: @"Toggle preview pane", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], }, From 09221ff9f366afbe4748102b50803dc6ea7a1dd9 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 10 Feb 2017 21:31:00 +0800 Subject: [PATCH 235/439] Turned toggle editor & preview into segmented control --- MacDown/Code/Document/MPDocument.m | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index ac035d4c..ae82a1ac 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -793,17 +793,25 @@ - (void)setupToolbarItems kMPToolbarDictKeyTitle: @"Copy HTML", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], }, - @"toggle-editor-pane": @{ + @"toggle-panes-group": @{ kMPToolbarDictKeyOrder: @9, - kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", - kMPToolbarDictKeyTitle: @"Toggle editor pane", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], - }, - @"toggle-preview-pane": @{ - kMPToolbarDictKeyOrder: @10, - kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", - kMPToolbarDictKeyTitle: @"Toggle preview pane", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], + kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, + kMPToolbarDictKeyTitle: @"Toggle panes", + kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySubItems: @{ + @"toggle-editor-pane": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", + kMPToolbarDictKeyTitle: @"Toggle editor pane", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], + }, + @"toggle-preview-pane": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", + kMPToolbarDictKeyTitle: @"Toggle preview pane", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], + }, + } }, }; } From dfa8c6ffd5af0f773777b28954a041d7460315f9 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 10 Feb 2017 21:32:56 +0800 Subject: [PATCH 236/439] Remove unused attributes for groups --- MacDown/Code/Document/MPDocument.m | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index ae82a1ac..0c42448c 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -673,8 +673,6 @@ - (void)setupToolbarItems self->toolbarItems = @{ @"indent-group": @{ kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Indent", kMPToolbarDictKeySegmentStyleSeparated: @YES, kMPToolbarDictKeySubItems: @{ @"shift-left": @{ @@ -693,8 +691,6 @@ - (void)setupToolbarItems }, @"text-formatting-group": @{ kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Bold", kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ @"bold": @{ @@ -719,8 +715,6 @@ - (void)setupToolbarItems }, @"heading-group": @{ kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Header", kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ @"heading1": @{ @@ -745,8 +739,6 @@ - (void)setupToolbarItems }, @"list-group": @{ kMPToolbarDictKeyOrder: @3, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"List", kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ @"unordered-list": @{ @@ -795,8 +787,6 @@ - (void)setupToolbarItems }, @"toggle-panes-group": @{ kMPToolbarDictKeyOrder: @9, - kMPToolbarDictKeyIcon: NSImageNameHomeTemplate, - kMPToolbarDictKeyTitle: @"Toggle panes", kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ @"toggle-editor-pane": @{ From 973668d2dd40d09647dad260ac8e60e433b59c14 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 10 Feb 2017 23:47:35 +0800 Subject: [PATCH 237/439] Do not select ext in save dialog if possible Trigger extension detection by setting allowedFileTypes to non-nil, but still allow all extensions by setting allowOtherFileTypes to YES. The allowed extensions are fetched at runtime via the application plist's CFBundleDocumentTypes. This also makes the "hide extension" checkbox work. Fix #585. --- MacDown/Code/Document/MPDocument.m | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 6640f0ac..b1d6f0dc 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -559,7 +559,26 @@ - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel savePanel.nameFieldStringValue = fileName; } } - savePanel.allowedFileTypes = nil; // Allow all extensions. + + // Get supported extensions from plist + static NSMutableArray *supportedExtensions = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + supportedExtensions = [NSMutableArray array]; + NSDictionary *infoDict = [NSBundle mainBundle].infoDictionary; + for (NSDictionary *docType in infoDict[@"CFBundleDocumentTypes"]) + { + NSArray *exts = docType[@"CFBundleTypeExtensions"]; + if (exts.count) + { + [supportedExtensions addObjectsFromArray:exts]; + } + } + }); + + savePanel.allowedFileTypes = supportedExtensions; + savePanel.allowsOtherFileTypes = YES; // Allow all extensions. + return [super prepareSavePanel:savePanel]; } From c7c94822736d88ebddb244f7377766de68aa2b08 Mon Sep 17 00:00:00 2001 From: Bruno Philipe Date: Sat, 14 Jan 2017 01:21:59 +0100 Subject: [PATCH 238/439] Fixes unhideable panes on new window MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a panel is hidden and the window is closed, when a new window opens, the position of the divider will be saved, but the ratio will not. In this case we just set the ratio to 0.5, otherwise clicking “restore preview/editor” will do nothing. --- MacDown/Code/Document/MPDocument.m | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index b1d6f0dc..b9cf1823 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1352,8 +1352,12 @@ - (IBAction)togglePreviewPane:(id)sender } else { - if (self.previousSplitRatio >= 0.0) - [self setSplitViewDividerLocation:self.previousSplitRatio]; + // We have an inconsistency here, let's just go back to 0.5, + // otherwise nothing will happen + if (self.previousSplitRatio < 0.0) + self.previousSplitRatio = 0.5; + + [self setSplitViewDividerLocation:self.previousSplitRatio]; } } @@ -1369,8 +1373,12 @@ - (IBAction)toggleEditorPane:(id)sender } else { - if (self.previousSplitRatio >= 0.0) - [self setSplitViewDividerLocation:self.previousSplitRatio]; + // We have an inconsistency here, let's just go back to 0.5, + // otherwise nothing will happen + if (self.previousSplitRatio < 0.0) + self.previousSplitRatio = 0.5; + + [self setSplitViewDividerLocation:self.previousSplitRatio]; } } From 1f9f869a51d56cae7c40fa587e0a20eaa0a7c2a2 Mon Sep 17 00:00:00 2001 From: Bruno Philipe Date: Sat, 14 Jan 2017 03:01:41 +0100 Subject: [PATCH 239/439] Addresses bad corner case of panel collapse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also refactors both the “collapse” actions into a single method which is called by both with different parameters, so we can reuse the code. --- MacDown/Code/Document/MPDocument.m | 58 +++++++++++++++--------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index b9cf1823..4ca0b339 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1344,32 +1344,40 @@ - (IBAction)setEqualSplit:(id)sender - (IBAction)togglePreviewPane:(id)sender { - if (self.previewVisible) - { - self.previousSplitRatio = self.splitView.dividerLocation; - BOOL editorOnRight = self.preferences.editorOnRight; - [self setSplitViewDividerLocation:(editorOnRight ? 0.0 : 1.0)]; - } - else - { - // We have an inconsistency here, let's just go back to 0.5, - // otherwise nothing will happen - if (self.previousSplitRatio < 0.0) - self.previousSplitRatio = 0.5; - - [self setSplitViewDividerLocation:self.previousSplitRatio]; - } + BOOL editorOnRight = self.preferences.editorOnRight; + [self toggleSplitterCollapseWithVisibility:self.previewVisible + targetRatio:(editorOnRight ? 0.0 : 1.0)]; } - (IBAction)toggleEditorPane:(id)sender { - if (self.editorVisible) + BOOL editorOnRight = self.preferences.editorOnRight; + [self toggleSplitterCollapseWithVisibility:self.editorVisible + targetRatio:(editorOnRight ? 1.0 : 0.0)]; +} + +- (IBAction)render:(id)sender +{ + [self.renderer parseAndRenderLater]; +} + + +#pragma mark - Private + +- (void)toggleSplitterCollapseWithVisibility:(BOOL)isVisible + targetRatio:(CGFloat)targetRatio +{ + if (isVisible) { - self.previousSplitRatio = self.splitView.dividerLocation; - if (self.preferences.editorOnRight) - [self setSplitViewDividerLocation:1.0]; - else - [self setSplitViewDividerLocation:0.0]; + CGFloat oldRatio = self.splitView.dividerLocation; + if (oldRatio != 0.0 && oldRatio != 1.0) + { + // We don't want to save these values, since they are meaningless. + // The user should be able to switch between 100% editor and 100% + // preview without losing the old ratio. + self.previousSplitRatio = oldRatio; + } + [self setSplitViewDividerLocation:targetRatio]; } else { @@ -1382,14 +1390,6 @@ - (IBAction)toggleEditorPane:(id)sender } } -- (IBAction)render:(id)sender -{ - [self.renderer parseAndRenderLater]; -} - - -#pragma mark - Private - - (void)setupEditor:(NSString *)changedKey { [self.highlighter deactivate]; From b42585d5b2632104952d9d89724783cb94edc3e8 Mon Sep 17 00:00:00 2001 From: Bruno Philipe Date: Wed, 8 Feb 2017 02:23:30 +0100 Subject: [PATCH 240/439] Improves collapse method signature --- MacDown/Code/Document/MPDocument.m | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4ca0b339..da489163 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1344,16 +1344,12 @@ - (IBAction)setEqualSplit:(id)sender - (IBAction)togglePreviewPane:(id)sender { - BOOL editorOnRight = self.preferences.editorOnRight; - [self toggleSplitterCollapseWithVisibility:self.previewVisible - targetRatio:(editorOnRight ? 0.0 : 1.0)]; + [self toggleSplitterCollapsingEditorPane:NO]; } - (IBAction)toggleEditorPane:(id)sender { - BOOL editorOnRight = self.preferences.editorOnRight; - [self toggleSplitterCollapseWithVisibility:self.editorVisible - targetRatio:(editorOnRight ? 1.0 : 0.0)]; + [self toggleSplitterCollapsingEditorPane:YES]; } - (IBAction)render:(id)sender @@ -1364,9 +1360,13 @@ - (IBAction)render:(id)sender #pragma mark - Private -- (void)toggleSplitterCollapseWithVisibility:(BOOL)isVisible - targetRatio:(CGFloat)targetRatio +- (void)toggleSplitterCollapsingEditorPane:(BOOL)forEditorPane { + BOOL isVisible = forEditorPane ? self.editorVisible : self.previewVisible; + BOOL editorOnRight = self.preferences.editorOnRight; + + float targetRatio = ((forEditorPane == editorOnRight) ? 1.0 : 0.0); + if (isVisible) { CGFloat oldRatio = self.splitView.dividerLocation; From ba328c19d9963043a8b5214826912a2b16cc68bd Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 11 Feb 2017 11:43:35 +0800 Subject: [PATCH 241/439] Spacing in toolbar --- MacDown/Code/Document/MPDocument.m | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 0c42448c..1145e37b 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -835,8 +835,31 @@ - (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary #pragma mark - NSToolbarDelegate - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar { - NSArray *orderedToolbarItemKeys = [self orderedToolbarItemKeysForDictionary:self->toolbarItems]; - return orderedToolbarItemKeys; + // From toolbar item dictionary(setupToolbarItems) + NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarItemKeysForDictionary:self->toolbarItems]; + + // Mixed identifiers from dictionary and spacing at below specified indices + NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; + + // Add spacing after the specified toolbar item indices + int spacingAfterIndices[] = {2,3,5,7}; + int i = 0; + int j = 0; + + for (NSString *itemIdentifier in orderedToolbarItemIdentifiers) + { + [defaultItemIdentifiers addObject:itemIdentifier]; + if (i == spacingAfterIndices[j]) + { + [defaultItemIdentifiers addObject:NSToolbarFlexibleSpaceItemIdentifier]; + + j++; + } + + i++; + } + + return [defaultItemIdentifiers copy]; } - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar From 8f7416ef05ad268668d58977326dd8cc40547b2a Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 11 Feb 2017 11:45:08 +0800 Subject: [PATCH 242/439] Separated style for heading and list groups --- MacDown/Code/Document/MPDocument.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 1145e37b..77f4e779 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -715,7 +715,7 @@ - (void)setupToolbarItems }, @"heading-group": @{ kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySegmentStyleSeparated: @YES, kMPToolbarDictKeySubItems: @{ @"heading1": @{ kMPToolbarDictKeyOrder: @0, @@ -739,7 +739,7 @@ - (void)setupToolbarItems }, @"list-group": @{ kMPToolbarDictKeyOrder: @3, - kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySegmentStyleSeparated: @YES, kMPToolbarDictKeySubItems: @{ @"unordered-list": @{ kMPToolbarDictKeyOrder: @0, From deb0fd7fb03180c4251b00ff5a193d7c171c2c5b Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 11 Feb 2017 11:46:10 +0800 Subject: [PATCH 243/439] Removed space from toolbar in xib --- MacDown/Localization/Base.lproj/MPDocument.xib | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 860c0646..cee759cf 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -25,7 +25,7 @@ - + @@ -132,10 +132,7 @@ - - - - + From 5c87806efe7279aa28f7fa466ed76595d1184155 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sat, 11 Feb 2017 13:20:01 +0800 Subject: [PATCH 244/439] Respecting order of toolbar items in groups --- MacDown/Code/Document/MPDocument.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 77f4e779..5bb61d81 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -915,9 +915,10 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString NSMutableArray *itemGroupItems = [NSMutableArray new]; + NSArray *orderedSubItemIdentifers = [self orderedToolbarItemKeysForDictionary:subItemDicts]; int segmentIndex = 0; - for (NSString *subItemIdentifier in subItemDicts) + for (NSString *subItemIdentifier in orderedSubItemIdentifers) { NSDictionary *subItemDict = subItemDicts[subItemIdentifier]; NSString *subItemTitle = subItemDict[kMPToolbarDictKeyTitle]; From f76d1921f202249c0f84e5aaf8ca9123acb11d7f Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 12:14:52 +0800 Subject: [PATCH 245/439] Highlightable segment controls --- MacDown/Code/Document/MPDocument.m | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 5bb61d81..75922d53 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -254,6 +254,7 @@ @implementation MPDocument { NSDictionary *toolbarItems; NSArray *toolbarItemKeysOrder; + NSMutableDictionary *toolbarGroupItemsDictionary; } @@ -893,12 +894,21 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString item.label = title; NSImage *itemImage = [NSImage imageNamed:iconName]; + [itemImage setTemplate:YES]; NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; + [itemButton setButtonType:NSToggleButton]; itemButton.image = itemImage; itemButton.bezelStyle = NSBezelStyleTexturedRounded; + itemButton.focusRingType = NSFocusRingTypeDefault; itemButton.target = self; itemButton.action = itemSelector; + itemButton.state = NSOffState; + item.view = itemButton; + + [self->toolbarItemIdentifierObjectDictionary setObject:item forKey:itemIdentifier]; + + return item; } else // It's a segment control { @@ -910,7 +920,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString segmentedControl.identifier = itemIdentifier; segmentedControl.target = self; segmentedControl.segmentStyle = segmentStyleSeparated ? NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; - segmentedControl.trackingMode = NSSegmentSwitchTrackingMomentary; + segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; segmentedControl.segmentCount = subItemDicts.count; NSMutableArray *itemGroupItems = [NSMutableArray new]; @@ -926,11 +936,15 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString SEL subItemSelector = [subItemDicts[kMPToolbarDictKeyAction] pointerValue]; NSToolbarItem *subItem = [[NSToolbarItem alloc] initWithItemIdentifier:subItemIdentifier]; + subItem.label = subItemTitle; subItem.target = self; subItem.action = subItemSelector; - [segmentedControl setImage:[NSImage imageNamed:subItemIcon] forSegment:segmentIndex]; + NSImage *subItemImage = [NSImage imageNamed:subItemIcon]; + [subItemImage setTemplate:YES]; + + [segmentedControl setImage:subItemImage forSegment:segmentIndex]; [segmentedControl setWidth:40.0 forSegment:segmentIndex]; From ace09cc77802de0385b6fa7597da6597f3ace48b Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 14:57:31 +0800 Subject: [PATCH 246/439] Moved toolbar code to MPToolbarController class Broke out the toolbar code from MPDocument into MPToolbarController --- MacDown.xcodeproj/project.pbxproj | 6 + .../Code/Application/MPToolbarController.h | 16 + .../Code/Application/MPToolbarController.m | 371 ++++++++++++++++++ MacDown/Code/Document/MPDocument.m | 340 +--------------- .../Localization/Base.lproj/MPDocument.xib | 11 +- 5 files changed, 406 insertions(+), 338 deletions(-) create mode 100644 MacDown/Code/Application/MPToolbarController.h create mode 100644 MacDown/Code/Application/MPToolbarController.m diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index ab473d06..ec132b88 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -81,6 +81,7 @@ 1FFEB32B19737D6E00B2254F /* YAMLSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -Wno-unused-variable"; }; }; 1FFF301D1948A5320009AF24 /* MPStringLookupTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */; }; 770BB49E962A302D0715A6A5 /* libPods-MacDown.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */; }; + 85E24E5C1E5019C00056E696 /* MPToolbarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85E24E5B1E5019C00056E696 /* MPToolbarController.m */; }; 905EF1A9196164CA00FC3CE9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 905EF1A8196164CA00FC3CE9 /* Foundation.framework */; }; 905EF1B7196164F300FC3CE9 /* macdown in Copy Command Line Utility */ = {isa = PBXBuildFile; fileRef = 905EF1A7196164CA00FC3CE9 /* macdown */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; B5C5C1666A506FEA86435D25 /* libPods-macdown-cmd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */; }; @@ -270,6 +271,8 @@ 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDown.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 4DBAA63927A60EB2150642B3 /* Pods-macdown-cmd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.debug.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.debug.xcconfig"; sourceTree = ""; }; 7A8EA75FA95818275755F0B6 /* Pods-macdown-cmd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.release.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.release.xcconfig"; sourceTree = ""; }; + 85E24E5A1E5019C00056E696 /* MPToolbarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPToolbarController.h; path = Code/Application/MPToolbarController.h; sourceTree = ""; }; + 85E24E5B1E5019C00056E696 /* MPToolbarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPToolbarController.m; path = Code/Application/MPToolbarController.m; sourceTree = ""; }; 8CDC5EA0050D2F722FB1AADD /* Pods-MacDownTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.debug.xcconfig"; sourceTree = ""; }; 905EF1A7196164CA00FC3CE9 /* macdown */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macdown; sourceTree = BUILT_PRODUCTS_DIR; }; 905EF1A8196164CA00FC3CE9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -478,6 +481,8 @@ 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */, 1F5A37121C869C81006E63E7 /* MPPlugInController.h */, 1F5A37131C869C81006E63E7 /* MPPlugInController.m */, + 85E24E5A1E5019C00056E696 /* MPToolbarController.h */, + 85E24E5B1E5019C00056E696 /* MPToolbarController.m */, ); name = Application; sourceTree = ""; @@ -973,6 +978,7 @@ 1F64CCC9195F5AB900CE619A /* MPAsset.m in Sources */, 1FFEB3251972D88900B2254F /* NSObject+HTMLTabularize.m in Sources */, 1F9A14EC194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m in Sources */, + 85E24E5C1E5019C00056E696 /* MPToolbarController.m in Sources */, 1F5A37101C868EC0006E63E7 /* MPPlugIn.m in Sources */, 1FBDFEA11962A25A00BEEA70 /* MPGeneralPreferencesViewController.m in Sources */, 1F9A14ED194EEE9900D1C6A9 /* MPMainController.m in Sources */, diff --git a/MacDown/Code/Application/MPToolbarController.h b/MacDown/Code/Application/MPToolbarController.h new file mode 100644 index 00000000..96d43a17 --- /dev/null +++ b/MacDown/Code/Application/MPToolbarController.h @@ -0,0 +1,16 @@ +// +// MPToolbarController.h +// MacDown +// +// Created by Niklas Berglund on 2017-02-12. +// Copyright © 2017 Tzu-ping Chung . All rights reserved. +// + +#import +#import "MPDocument.h" + +@interface MPToolbarController : NSObject + +@property (weak) IBOutlet MPDocument *document; + +@end diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m new file mode 100644 index 00000000..49f9940a --- /dev/null +++ b/MacDown/Code/Application/MPToolbarController.m @@ -0,0 +1,371 @@ +// +// MPToolbarController.m +// MacDown +// +// Created by Niklas Berglund on 2017-02-12. +// Copyright © 2017 Tzu-ping Chung . All rights reserved. +// + +#import "MPToolbarController.h" + +// Because we're creating selectors for methods which aren't in this class +#pragma GCC diagnostic ignored "-Wundeclared-selector" +#pragma clang diagnostic ignored "-Wundeclared-selector" + + +static NSString *const kMPToolbarDictKeyOrder = @"kMPToolbarDictKeyOrder"; +static NSString *const kMPToolbarDictKeyIcon = @"kMPToolbarDictKeyIcon"; +static NSString *const kMPToolbarDictKeyTitle = @"kMPToolbarDictKeyTitle"; +static NSString *const kMPToolbarDictKeySubItems = @"kMPToolbarDictKeySubItems"; +static NSString *const kMPToolbarDictKeySegmentStyleSeparated = @"kMPToolbarDictKeySegmentStyleSeparated"; +static NSString *const kMPToolbarDictKeyAction = @"kMPToolbarDictKeyAction"; + + +@implementation MPToolbarController +{ + NSDictionary *toolbarItems; + NSArray *toolbarItemKeysOrder; + + NSMutableDictionary *toolbarGroupItemsDictionary; + + /** + * Map toolbar item identifier to it's NSToolbarItem or NSToolbarItemGroup object + */ + NSMutableDictionary *toolbarItemIdentifierObjectDictionary; +} + +- (id)init +{ + self = [super init]; + + if (!self) + { + return nil; + } + + [self setupToolbarItems]; + self->toolbarItemIdentifierObjectDictionary = [NSMutableDictionary new]; + + return self; +} + +- (void)setupToolbarItems +{ + // NSToolbarItem identifier as key + self->toolbarItems = @{ + @"indent-group": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeySubItems: @{ + @"shift-left": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: @"ToolbarIconShiftLeft", + kMPToolbarDictKeyTitle: @"Shift left", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(unindent:)], + }, + @"shift-right": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: @"ToolbarIconShiftRight", + kMPToolbarDictKeyTitle: @"Shift right", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(indent:)], + }, + } + }, + @"text-formatting-group": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySubItems: @{ + @"bold": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: @"ToolbarIconBold", + kMPToolbarDictKeyTitle: @"Bold", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrong:)], + }, + @"italic": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: @"ToolbarIconItalic", + kMPToolbarDictKeyTitle: @"Italic", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEmphasis:)], + }, + @"underline": @{ + kMPToolbarDictKeyOrder: @2, + kMPToolbarDictKeyIcon: @"ToolbarIconUnderlined", + kMPToolbarDictKeyTitle: @"Underline", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnderline:)], + }, + } + }, + @"heading-group": @{ + kMPToolbarDictKeyOrder: @2, + kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeySubItems: @{ + @"heading1": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: @"ToolbarIconHeading1", + kMPToolbarDictKeyTitle: @"Heading 1", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH1:)], + }, + @"heading2": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: @"ToolbarIconHeading2", + kMPToolbarDictKeyTitle: @"Heading 2", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH2:)], + }, + @"heading3": @{ + kMPToolbarDictKeyOrder: @2, + kMPToolbarDictKeyIcon: @"ToolbarIconHeading3", + kMPToolbarDictKeyTitle: @"Heading 3", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH3:)], + }, + } + }, + @"list-group": @{ + kMPToolbarDictKeyOrder: @3, + kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeySubItems: @{ + @"unordered-list": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: @"ToolbarIconUnorderedList", + kMPToolbarDictKeyTitle: @"Unordered list", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnorderedList:)], + }, + @"ordered-list": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: @"ToolbarIconOrderedList", + kMPToolbarDictKeyTitle: @"Ordered list", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleOrderedList:)], + } + } + }, + @"blockquote": @{ + kMPToolbarDictKeyOrder: @4, + kMPToolbarDictKeyIcon: @"ToolbarIconBlockquote", + kMPToolbarDictKeyTitle: @"Blockquote", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], + }, + @"code": @{ + kMPToolbarDictKeyOrder: @5, + kMPToolbarDictKeyIcon: @"ToolbarIconInlineCode", + kMPToolbarDictKeyTitle: @"Inline code", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], + }, + @"link": @{ + kMPToolbarDictKeyOrder: @6, + kMPToolbarDictKeyIcon: @"ToolbarIconLink", + kMPToolbarDictKeyTitle: @"Link", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], + }, + @"image": @{ + kMPToolbarDictKeyOrder: @7, + kMPToolbarDictKeyIcon: @"ToolbarIconImage", + kMPToolbarDictKeyTitle: @"Inline code", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], + }, + @"copy-html": @{ + kMPToolbarDictKeyOrder: @8, + kMPToolbarDictKeyIcon: @"ToolbarIconCopyHTML", + kMPToolbarDictKeyTitle: @"Copy HTML", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], + }, + @"toggle-panes-group": @{ + kMPToolbarDictKeyOrder: @9, + kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeySubItems: @{ + @"toggle-editor-pane": @{ + kMPToolbarDictKeyOrder: @0, + kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", + kMPToolbarDictKeyTitle: @"Toggle editor pane", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], + }, + @"toggle-preview-pane": @{ + kMPToolbarDictKeyOrder: @1, + kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", + kMPToolbarDictKeyTitle: @"Toggle preview pane", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], + }, + } + }, + }; +} + +/** + * Creates an array with ordered keys from the passed argument dictionary which should be from the hierarchical dictionary produced by setupToolbarItems. + * + * @returns Ordered keys(identifiers) + */ +- (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary +{ + NSMutableArray *orderedKeys = [NSMutableArray new]; + + // Fill with required capacity + for (int i = 0; i < dictionary.count; i++) + { + orderedKeys[i] = [NSNull null]; + } + + for (NSDictionary *itemKey in dictionary) + { + NSDictionary *itemDictionary = dictionary[itemKey]; + NSInteger index = [itemDictionary[kMPToolbarDictKeyOrder] integerValue]; + orderedKeys[index] = itemKey; + } + + return [orderedKeys copy]; +} + + +#pragma mark - NSToolbarDelegate +- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar +{ + // From toolbar item dictionary(setupToolbarItems) + NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarItemKeysForDictionary:self->toolbarItems]; + + // Mixed identifiers from dictionary and spacing at below specified indices + NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; + + // Add spacing after the specified toolbar item indices + int spacingAfterIndices[] = {2,3,5,7}; + int i = 0; + int j = 0; + + for (NSString *itemIdentifier in orderedToolbarItemIdentifiers) + { + [defaultItemIdentifiers addObject:itemIdentifier]; + if (i == spacingAfterIndices[j]) + { + [defaultItemIdentifiers addObject:NSToolbarFlexibleSpaceItemIdentifier]; + + j++; + } + + i++; + } + + return [defaultItemIdentifiers copy]; +} + +- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar +{ + return [self toolbarDefaultItemIdentifiers:toolbar]; +} + +- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar +{ + return [self toolbarDefaultItemIdentifiers:toolbar]; +} + +- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag +{ + static CGFloat itemWidth = 42.5; + + NSDictionary *itemDict = self->toolbarItems[itemIdentifier]; + + if (itemDict) + { + NSDictionary *subItemDicts = itemDict[kMPToolbarDictKeySubItems]; + + NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; + + if (subItemDicts == nil) // It's a regular toolbar item + { + NSString *title = itemDict[kMPToolbarDictKeyTitle]; + NSString *iconName = itemDict[kMPToolbarDictKeyIcon]; + SEL itemSelector = [itemDict[kMPToolbarDictKeyAction] pointerValue]; + + item.label = title; + + NSImage *itemImage = [NSImage imageNamed:iconName]; + [itemImage setTemplate:YES]; + NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; + [itemButton setButtonType:NSToggleButton]; + itemButton.image = itemImage; + itemButton.bezelStyle = NSBezelStyleTexturedRounded; + itemButton.focusRingType = NSFocusRingTypeDefault; + itemButton.target = self.document; + itemButton.action = itemSelector; + itemButton.state = NSOffState; + + item.view = itemButton; + + [self->toolbarItemIdentifierObjectDictionary setObject:item forKey:itemIdentifier]; + + return item; + } + else // It's a segment control + { + NSToolbarItemGroup *itemGroup = [[NSToolbarItemGroup alloc] initWithItemIdentifier:itemIdentifier]; + + BOOL segmentStyleSeparated = [itemDict[kMPToolbarDictKeySegmentStyleSeparated] boolValue]; + + NSSegmentedControl *segmentedControl = [[NSSegmentedControl alloc] init]; + segmentedControl.identifier = itemIdentifier; + segmentedControl.target = self; + segmentedControl.segmentStyle = segmentStyleSeparated ? + NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; + segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; + segmentedControl.segmentCount = subItemDicts.count; + + NSMutableArray *itemGroupItems = [NSMutableArray new]; + + NSArray *orderedSubItemIdentifers = [self orderedToolbarItemKeysForDictionary:subItemDicts]; + int segmentIndex = 0; + + for (NSString *subItemIdentifier in orderedSubItemIdentifers) + { + NSDictionary *subItemDict = subItemDicts[subItemIdentifier]; + NSString *subItemTitle = subItemDict[kMPToolbarDictKeyTitle]; + NSString *subItemIcon = subItemDict[kMPToolbarDictKeyIcon]; + SEL subItemSelector = [subItemDicts[kMPToolbarDictKeyAction] pointerValue]; + + NSToolbarItem *subItem = [[NSToolbarItem alloc] initWithItemIdentifier:subItemIdentifier]; + + subItem.label = subItemTitle; + subItem.target = self.document; + subItem.action = subItemSelector; + + NSImage *subItemImage = [NSImage imageNamed:subItemIcon]; + [subItemImage setTemplate:YES]; + + [segmentedControl setImage:subItemImage forSegment:segmentIndex]; + [segmentedControl setWidth:40.0 forSegment:segmentIndex]; + + [itemGroupItems addObject:subItem]; + segmentIndex++; + } + + CGFloat itemGroupWidth = itemWidth * itemGroupItems.count; + + itemGroup.subitems = [itemGroupItems copy]; + itemGroup.view = segmentedControl; + itemGroup.maxSize = NSMakeSize(itemGroupWidth, 25); + itemGroup.target = self; + itemGroup.action = @selector(selectedToolbarItemGroupItem:); + + [self->toolbarItemIdentifierObjectDictionary setObject:itemGroup forKey:itemIdentifier]; + + return itemGroup; + } + } + + return nil; +} + +- (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender +{ + NSInteger selectedIndex = sender.selectedSegment; + + NSDictionary *groupDictionary = self->toolbarItems[sender.identifier]; + NSDictionary *groupSubItemsDictionary = groupDictionary[kMPToolbarDictKeySubItems]; + NSDictionary *selectedItemDictionary = [groupSubItemsDictionary allValues][selectedIndex]; + + // Invoke the toolbar item's action + // Must convert to IMP to let the compiler know about the method definition + SEL selectedItemAction = [selectedItemDictionary[kMPToolbarDictKeyAction] pointerValue]; + MPDocument *document = self.document; + IMP imp = [document methodForSelector:selectedItemAction]; + void (*impFunc)(id) = (void *)imp; + impFunc(document); +} + + +@end diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 75922d53..c2646cec 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -28,17 +28,11 @@ #import "MPExportPanelAccessoryViewController.h" #import "MPMathJaxListener.h" #import "WebView+WebViewPrivateHeaders.h" +#import "MPToolbarController.h" static NSString * const kMPDefaultAutosaveName = @"Untitled"; -static NSString *const kMPToolbarDictKeyOrder = @"kMPToolbarDictKeyOrder"; -static NSString *const kMPToolbarDictKeyIcon = @"kMPToolbarDictKeyIcon"; -static NSString *const kMPToolbarDictKeyTitle = @"kMPToolbarDictKeyTitle"; -static NSString *const kMPToolbarDictKeySubItems = @"kMPToolbarDictKeySubItems"; -static NSString *const kMPToolbarDictKeySegmentStyleSeparated = @"kMPToolbarDictKeySegmentStyleSeparated"; -static NSString *const kMPToolbarDictKeyAction = @"kMPToolbarDictKeyAction"; - NS_INLINE NSString *MPEditorPreferenceKeyWithValueKey(NSString *key) { @@ -176,7 +170,7 @@ - (int)rendererFlags @interface MPDocument () - = 101100 WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate, #endif @@ -188,12 +182,14 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { MPWordCountTypeCharacterNoSpaces, }; +@property (weak) IBOutlet NSToolbar *toolbar; @property (weak) IBOutlet MPDocumentSplitView *splitView; @property (weak) IBOutlet NSView *editorContainer; @property (unsafe_unretained) IBOutlet MPEditorView *editor; @property (weak) IBOutlet NSLayoutConstraint *editorPaddingBottom; @property (weak) IBOutlet WebView *preview; @property (weak) IBOutlet NSPopUpButton *wordCountWidget; +@property (strong) IBOutlet MPToolbarController *toolbarController; @property (copy, nonatomic) NSString *autosaveName; @property (strong) HGMarkdownHighlighter *highlighter; @property (strong) MPRenderer *renderer; @@ -251,12 +247,6 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() @implementation MPDocument -{ - NSDictionary *toolbarItems; - NSArray *toolbarItemKeysOrder; - - NSMutableDictionary *toolbarGroupItemsDictionary; -} #pragma mark - Accessor @@ -352,9 +342,6 @@ - (instancetype)init self.shouldHandleBoundsChange = YES; self.previousSplitRatio = -1.0; - [self setupToolbarItems]; - self->toolbarGroupItemsDictionary = [NSMutableDictionary new]; - return self; } @@ -668,325 +655,6 @@ - (BOOL)validateUserInterfaceItem:(id)item return result; } -- (void)setupToolbarItems -{ - // NSToolbarItem identifier as key - self->toolbarItems = @{ - @"indent-group": @{ - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeySegmentStyleSeparated: @YES, - kMPToolbarDictKeySubItems: @{ - @"shift-left": @{ - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconShiftLeft", - kMPToolbarDictKeyTitle: @"Shift left", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(unindent:)], - }, - @"shift-right": @{ - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconShiftRight", - kMPToolbarDictKeyTitle: @"Shift right", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(indent:)], - }, - } - }, - @"text-formatting-group": @{ - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeySegmentStyleSeparated: @NO, - kMPToolbarDictKeySubItems: @{ - @"bold": @{ - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconBold", - kMPToolbarDictKeyTitle: @"Bold", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrong:)], - }, - @"italic": @{ - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconItalic", - kMPToolbarDictKeyTitle: @"Italic", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEmphasis:)], - }, - @"underline": @{ - kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: @"ToolbarIconUnderlined", - kMPToolbarDictKeyTitle: @"Underline", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnderline:)], - }, - } - }, - @"heading-group": @{ - kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeySegmentStyleSeparated: @YES, - kMPToolbarDictKeySubItems: @{ - @"heading1": @{ - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconHeading1", - kMPToolbarDictKeyTitle: @"Heading 1", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH1:)], - }, - @"heading2": @{ - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconHeading2", - kMPToolbarDictKeyTitle: @"Heading 2", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH2:)], - }, - @"heading3": @{ - kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: @"ToolbarIconHeading3", - kMPToolbarDictKeyTitle: @"Heading 3", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH3:)], - }, - } - }, - @"list-group": @{ - kMPToolbarDictKeyOrder: @3, - kMPToolbarDictKeySegmentStyleSeparated: @YES, - kMPToolbarDictKeySubItems: @{ - @"unordered-list": @{ - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconUnorderedList", - kMPToolbarDictKeyTitle: @"Unordered list", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnorderedList:)], - }, - @"ordered-list": @{ - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconOrderedList", - kMPToolbarDictKeyTitle: @"Ordered list", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleOrderedList:)], - } - } - }, - @"blockquote": @{ - kMPToolbarDictKeyOrder: @4, - kMPToolbarDictKeyIcon: @"ToolbarIconBlockquote", - kMPToolbarDictKeyTitle: @"Blockquote", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], - }, - @"code": @{ - kMPToolbarDictKeyOrder: @5, - kMPToolbarDictKeyIcon: @"ToolbarIconInlineCode", - kMPToolbarDictKeyTitle: @"Inline code", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], - }, - @"link": @{ - kMPToolbarDictKeyOrder: @6, - kMPToolbarDictKeyIcon: @"ToolbarIconLink", - kMPToolbarDictKeyTitle: @"Link", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], - }, - @"image": @{ - kMPToolbarDictKeyOrder: @7, - kMPToolbarDictKeyIcon: @"ToolbarIconImage", - kMPToolbarDictKeyTitle: @"Inline code", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], - }, - @"copy-html": @{ - kMPToolbarDictKeyOrder: @8, - kMPToolbarDictKeyIcon: @"ToolbarIconCopyHTML", - kMPToolbarDictKeyTitle: @"Copy HTML", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], - }, - @"toggle-panes-group": @{ - kMPToolbarDictKeyOrder: @9, - kMPToolbarDictKeySegmentStyleSeparated: @NO, - kMPToolbarDictKeySubItems: @{ - @"toggle-editor-pane": @{ - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", - kMPToolbarDictKeyTitle: @"Toggle editor pane", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], - }, - @"toggle-preview-pane": @{ - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", - kMPToolbarDictKeyTitle: @"Toggle preview pane", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], - }, - } - }, - }; -} - -/** - * Creates an array with ordered keys from the passed argument dictionary which should be from the hierarchical dictionary produced by setupToolbarItems. - * - * @returns Ordered keys(identifiers) - */ -- (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary -{ - NSMutableArray *orderedKeys = [NSMutableArray new]; - - // Fill with required capacity - for (int i = 0; i < dictionary.count; i++) - { - orderedKeys[i] = [NSNull null]; - } - - for (NSDictionary *itemKey in dictionary) - { - NSDictionary *itemDictionary = dictionary[itemKey]; - NSInteger index = [itemDictionary[kMPToolbarDictKeyOrder] integerValue]; - orderedKeys[index] = itemKey; - } - - return [orderedKeys copy]; -} - - -#pragma mark - NSToolbarDelegate -- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar -{ - // From toolbar item dictionary(setupToolbarItems) - NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarItemKeysForDictionary:self->toolbarItems]; - - // Mixed identifiers from dictionary and spacing at below specified indices - NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; - - // Add spacing after the specified toolbar item indices - int spacingAfterIndices[] = {2,3,5,7}; - int i = 0; - int j = 0; - - for (NSString *itemIdentifier in orderedToolbarItemIdentifiers) - { - [defaultItemIdentifiers addObject:itemIdentifier]; - if (i == spacingAfterIndices[j]) - { - [defaultItemIdentifiers addObject:NSToolbarFlexibleSpaceItemIdentifier]; - - j++; - } - - i++; - } - - return [defaultItemIdentifiers copy]; -} - -- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar -{ - return [self toolbarDefaultItemIdentifiers:toolbar]; -} - -- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar -{ - return [self toolbarDefaultItemIdentifiers:toolbar]; -} - -- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag -{ - static CGFloat itemWidth = 42.5; - - NSDictionary *itemDict = self->toolbarItems[itemIdentifier]; - - if (itemDict) - { - NSDictionary *subItemDicts = itemDict[kMPToolbarDictKeySubItems]; - - NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; - - if (subItemDicts == nil) // It's a regular toolbar item - { - NSString *title = itemDict[kMPToolbarDictKeyTitle]; - NSString *iconName = itemDict[kMPToolbarDictKeyIcon]; - SEL itemSelector = [itemDict[kMPToolbarDictKeyAction] pointerValue]; - - item.label = title; - - NSImage *itemImage = [NSImage imageNamed:iconName]; - [itemImage setTemplate:YES]; - NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; - [itemButton setButtonType:NSToggleButton]; - itemButton.image = itemImage; - itemButton.bezelStyle = NSBezelStyleTexturedRounded; - itemButton.focusRingType = NSFocusRingTypeDefault; - itemButton.target = self; - itemButton.action = itemSelector; - itemButton.state = NSOffState; - - item.view = itemButton; - - [self->toolbarItemIdentifierObjectDictionary setObject:item forKey:itemIdentifier]; - - return item; - } - else // It's a segment control - { - NSToolbarItemGroup *itemGroup = [[NSToolbarItemGroup alloc] initWithItemIdentifier:itemIdentifier]; - - BOOL segmentStyleSeparated = [itemDict[kMPToolbarDictKeySegmentStyleSeparated] boolValue]; - - NSSegmentedControl *segmentedControl = [[NSSegmentedControl alloc] init]; - segmentedControl.identifier = itemIdentifier; - segmentedControl.target = self; - segmentedControl.segmentStyle = segmentStyleSeparated ? NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; - segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; - segmentedControl.segmentCount = subItemDicts.count; - - NSMutableArray *itemGroupItems = [NSMutableArray new]; - - NSArray *orderedSubItemIdentifers = [self orderedToolbarItemKeysForDictionary:subItemDicts]; - int segmentIndex = 0; - - for (NSString *subItemIdentifier in orderedSubItemIdentifers) - { - NSDictionary *subItemDict = subItemDicts[subItemIdentifier]; - NSString *subItemTitle = subItemDict[kMPToolbarDictKeyTitle]; - NSString *subItemIcon = subItemDict[kMPToolbarDictKeyIcon]; - SEL subItemSelector = [subItemDicts[kMPToolbarDictKeyAction] pointerValue]; - - NSToolbarItem *subItem = [[NSToolbarItem alloc] initWithItemIdentifier:subItemIdentifier]; - - subItem.label = subItemTitle; - subItem.target = self; - subItem.action = subItemSelector; - - NSImage *subItemImage = [NSImage imageNamed:subItemIcon]; - [subItemImage setTemplate:YES]; - - [segmentedControl setImage:subItemImage forSegment:segmentIndex]; - [segmentedControl setWidth:40.0 forSegment:segmentIndex]; - - - [itemGroupItems addObject:subItem]; - segmentIndex++; - } - - CGFloat itemGroupWidth = itemWidth * itemGroupItems.count; - - itemGroup.subitems = [itemGroupItems copy]; - itemGroup.view = segmentedControl; - itemGroup.maxSize = NSMakeSize(itemGroupWidth, 25); - itemGroup.target = self; - itemGroup.action = @selector(selectedToolbarItemGroupItem:); - - [self->toolbarGroupItemsDictionary setObject:itemGroup forKey:itemIdentifier]; - - return itemGroup; - } - - return item; - } - - return nil; -} - -- (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender -{ - NSInteger selectedIndex = sender.selectedSegment; - - NSDictionary *groupDictionary = self->toolbarItems[sender.identifier]; - NSDictionary *groupSubItemsDictionary = groupDictionary[kMPToolbarDictKeySubItems]; - NSDictionary *selectedItemDictionary = [groupSubItemsDictionary allValues][selectedIndex]; - - // Invoke the toolbar item's action - // Must convert to IMP to let the compiler know about the method definition - SEL selectedItemAction = [selectedItemDictionary[kMPToolbarDictKeyAction] pointerValue]; - IMP imp = [self methodForSelector:selectedItemAction]; - void (*impFunc)(id) = (void *)imp; - impFunc(self); -} - #pragma mark - NSSplitViewDelegate diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index cee759cf..181c6565 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -14,6 +14,8 @@ + + @@ -25,7 +27,7 @@ - + @@ -134,7 +136,7 @@ - + @@ -142,5 +144,10 @@ + + + + + From 5d4ac594e8635602a0e1d508922aada8172d2746 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 15:40:33 +0800 Subject: [PATCH 247/439] previewVisible and editorVisible properties public So they can be accessed from MPToolbarController --- MacDown/Code/Document/MPDocument.h | 2 ++ MacDown/Code/Document/MPDocument.m | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.h b/MacDown/Code/Document/MPDocument.h index 5bfb6a2e..387f4675 100644 --- a/MacDown/Code/Document/MPDocument.h +++ b/MacDown/Code/Document/MPDocument.h @@ -13,6 +13,8 @@ @interface MPDocument : NSDocument @property (nonatomic, readonly) MPPreferences *preferences; +@property (readonly) BOOL previewVisible; +@property (readonly) BOOL editorVisible; @property (nonatomic, readwrite) NSString *markdown; @property (nonatomic, readonly) NSString *html; diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c2646cec..4f80796f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -200,8 +200,6 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property BOOL shouldHandleBoundsChange; @property BOOL isPreviewReady; @property (strong) NSURL *currentBaseUrl; -@property (readonly) BOOL previewVisible; -@property (readonly) BOOL editorVisible; @property CGFloat lastPreviewScrollTop; @property (nonatomic, readonly) BOOL needsHtml; @property (nonatomic) NSUInteger totalWords; From bb5515b31bd1ddc63d2d60f27b3952732a3022f4 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 15:42:14 +0800 Subject: [PATCH 248/439] Highlight of toggle editor/preview toolbar items --- .../Code/Application/MPToolbarController.h | 10 +++ .../Code/Application/MPToolbarController.m | 84 ++++++++++++++++++- MacDown/Code/Document/MPDocument.m | 13 +++ 3 files changed, 105 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.h b/MacDown/Code/Application/MPToolbarController.h index 96d43a17..80d293d1 100644 --- a/MacDown/Code/Application/MPToolbarController.h +++ b/MacDown/Code/Application/MPToolbarController.h @@ -13,4 +13,14 @@ @property (weak) IBOutlet MPDocument *document; +/** + * Update the highlight states of toolbar items that can be highlighted. + */ +- (void)updateHighlightStates; + +- (void)highlightToggleEditorItem; +- (void)unhighlightToggleEditorItem; +- (void)highlightTogglePreviewItem; +- (void)unhighlightTogglePreviewItem; + @end diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 49f9940a..a513f5a7 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -26,8 +26,6 @@ @implementation MPToolbarController NSDictionary *toolbarItems; NSArray *toolbarItemKeysOrder; - NSMutableDictionary *toolbarGroupItemsDictionary; - /** * Map toolbar item identifier to it's NSToolbarItem or NSToolbarItemGroup object */ @@ -49,6 +47,88 @@ - (id)init return self; } +- (void)updateHighlightStates +{ + self.document.previewVisible ? + [self highlightTogglePreviewItem] : + [self unhighlightTogglePreviewItem]; + + self.document.editorVisible ? + [self highlightToggleEditorItem] : + [self unhighlightToggleEditorItem]; +} + +- (void)highlightToggleEditorItem +{ + [self highlightItemIdentifier:@"toggle-editor-pane" inGroupWithIdentifier:@"toggle-panes-group"]; +} + +- (void)unhighlightToggleEditorItem +{ + [self unhighlightItemIdentifier:@"toggle-editor-pane" inGroupWithIdentifier:@"toggle-panes-group"]; +} + +- (void)highlightTogglePreviewItem +{ + [self highlightItemIdentifier:@"toggle-preview-pane" inGroupWithIdentifier:@"toggle-panes-group"]; +} + +- (void)unhighlightTogglePreviewItem +{ + [self unhighlightItemIdentifier:@"toggle-preview-pane" inGroupWithIdentifier:@"toggle-panes-group"]; +} + + +#pragma mark - Private + +- (void)highlightItemIdentifier:(NSString *)itemIdentifier inGroupWithIdentifier:(NSString *)groupIdentifier +{ + NSToolbarItemGroup *itemGroup = self->toolbarItemIdentifierObjectDictionary[groupIdentifier]; + + if (!itemGroup) + { + return; + } + + NSSegmentedControl *segmentedControl = (NSSegmentedControl *)itemGroup.view; + + int i = 0; + + for (NSToolbarItem *toolbarItem in itemGroup.subitems) + { + if ([toolbarItem.itemIdentifier isEqualToString:itemIdentifier]) + { + [segmentedControl setSelected:YES forSegment:i]; + break; + } + i++; + } +} + +- (void)unhighlightItemIdentifier:(NSString *)itemIdentifier inGroupWithIdentifier:(NSString *)groupIdentifier +{ + NSToolbarItemGroup *itemGroup = self->toolbarItemIdentifierObjectDictionary[groupIdentifier]; + + if (!itemGroup) + { + return; + } + + NSSegmentedControl *segmentedControl = (NSSegmentedControl *)itemGroup.view; + + int i = 0; + + for (NSToolbarItem *toolbarItem in itemGroup.subitems) + { + if ([toolbarItem.itemIdentifier isEqualToString:itemIdentifier]) + { + [segmentedControl setSelected:NO forSegment:i]; + break; + } + i++; + } +} + - (void)setupToolbarItems { // NSToolbarItem identifier as key diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4f80796f..2fd4ca70 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -442,6 +442,9 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller [self redrawDivider]; [self reloadFromLoadedString]; }]; + + // Set initial highlight states + [self.toolbarController updateHighlightStates]; } - (void)reloadFromLoadedString @@ -1327,16 +1330,19 @@ - (IBAction)insertNewParagraph:(id)sender - (IBAction)setEditorOneQuarter:(id)sender { [self setSplitViewDividerLocation:0.25]; + [self.toolbarController updateHighlightStates]; } - (IBAction)setEditorThreeQuarters:(id)sender { [self setSplitViewDividerLocation:0.75]; + [self.toolbarController updateHighlightStates]; } - (IBAction)setEqualSplit:(id)sender { [self setSplitViewDividerLocation:0.5]; + [self.toolbarController updateHighlightStates]; } - (IBAction)toggleToolbar:(id)sender @@ -1351,11 +1357,14 @@ - (IBAction)togglePreviewPane:(id)sender self.previousSplitRatio = self.splitView.dividerLocation; BOOL editorOnRight = self.preferences.editorOnRight; [self setSplitViewDividerLocation:(editorOnRight ? 0.0 : 1.0)]; + [self.toolbarController unhighlightTogglePreviewItem]; } else { if (self.previousSplitRatio >= 0.0) [self setSplitViewDividerLocation:self.previousSplitRatio]; + + [self.toolbarController highlightTogglePreviewItem]; } } @@ -1368,11 +1377,15 @@ - (IBAction)toggleEditorPane:(id)sender [self setSplitViewDividerLocation:1.0]; else [self setSplitViewDividerLocation:0.0]; + + [self.toolbarController unhighlightToggleEditorItem]; } else { if (self.previousSplitRatio >= 0.0) [self setSplitViewDividerLocation:self.previousSplitRatio]; + + [self.toolbarController highlightToggleEditorItem]; } } From 13404d342adceac663e2962000f151888a689220 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 5 Feb 2017 18:01:46 +0800 Subject: [PATCH 249/439] Move Localizable.strings to en Because it *is* English-specific, not language-agnostic. --- MacDown.xcodeproj/project.pbxproj | 4 ++-- .../{Base.lproj => en.lproj}/Localizable.strings | Bin 2 files changed, 2 insertions(+), 2 deletions(-) rename MacDown/Localization/{Base.lproj => en.lproj}/Localizable.strings (100%) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index ab473d06..93288236 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -182,7 +182,6 @@ 1F25E1C21A50F4F10029371D /* MPColorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPColorTests.m; sourceTree = ""; }; 1F2649AE1A7406DB00EF6AF3 /* NSDocumentController+Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDocumentController+Document.h"; sourceTree = ""; }; 1F2649AF1A7406DB00EF6AF3 /* NSDocumentController+Document.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDocumentController+Document.m"; sourceTree = ""; }; - 1F27896A1973BEB100EE696A /* Base */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Base; path = Localization/Base.lproj/Localizable.strings; sourceTree = ""; }; 1F3386E41A6B999600FC88C4 /* DOMNode+Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DOMNode+Text.h"; sourceTree = ""; }; 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "DOMNode+Text.m"; sourceTree = ""; }; 1F33F29F1A3B4B660001C849 /* MPDocumentSplitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDocumentSplitView.h; sourceTree = ""; }; @@ -235,6 +234,7 @@ 1FA6DE281941CC9E000409FB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 1FA6DE291941CC9E000409FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; 1FBBD4BD194C952300BB3C88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = SOURCE_ROOT; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; @@ -1100,7 +1100,7 @@ 1F2789691973BEB100EE696A /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - 1F27896A1973BEB100EE696A /* Base */, + 1FA9196B1E4723A200850517 /* en */, ); name = Localizable.strings; sourceTree = ""; diff --git a/MacDown/Localization/Base.lproj/Localizable.strings b/MacDown/Localization/en.lproj/Localizable.strings similarity index 100% rename from MacDown/Localization/Base.lproj/Localizable.strings rename to MacDown/Localization/en.lproj/Localizable.strings From 3ebda332aecb3b3f823fed4bf27989b24fddbeeb Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 5 Feb 2017 18:12:10 +0800 Subject: [PATCH 250/439] Add very trivial zh-Hant translation --- MacDown.xcodeproj/project.pbxproj | 7 ++++++- .../zh-Hant.lproj/Localizable.strings | Bin 0 -> 594 bytes 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 MacDown/Localization/zh-Hant.lproj/Localizable.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 93288236..cbeba055 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -234,7 +234,8 @@ 1FA6DE281941CC9E000409FB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 1FA6DE291941CC9E000409FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; + 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; + 1FA9196D1E472FD600850517 /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; 1FBBD4BD194C952300BB3C88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = SOURCE_ROOT; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; @@ -728,6 +729,7 @@ knownRegions = ( en, Base, + "zh-Hant", ); mainGroup = 1FA6DE181941CC9E000409FB; productRefGroup = 1FA6DE221941CC9E000409FB /* Products */; @@ -1101,6 +1103,7 @@ isa = PBXVariantGroup; children = ( 1FA9196B1E4723A200850517 /* en */, + 1FA9196D1E472FD600850517 /* zh-Hant */, ); name = Localizable.strings; sourceTree = ""; @@ -1137,6 +1140,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -1181,6 +1185,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; diff --git a/MacDown/Localization/zh-Hant.lproj/Localizable.strings b/MacDown/Localization/zh-Hant.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..9c96af9e7293c448bd8eb0093cb7ea575564b88c GIT binary patch literal 594 zcmbV|QA@)x6ot>DPW%t0An3$RMesodC96*9YV9U_@L{-FHetBos$ze<^-Efq;KNWt zo12q!zmuf+YO1c9JVvOQMtam#&&rvHRH+(TDAOz2i^kNYx5NHOEjm8XYn5v7rR-$< zpCAtP$-f8fO?#SG3{OTA6w9-@Gb&F9I#N@|R-~&Ry<0kmu@UzlmJFjdsW#cr6Hxt~X6{z;B2GGh9J`$0Um0t~ PX0+SO^V7+CQRaOEVt-kN literal 0 HcmV?d00001 From ac8850d7663727b3cae159929dcde3729f7b8c8b Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 5 Feb 2017 18:18:41 +0800 Subject: [PATCH 251/439] Remove unneeded stock titles from xib file --- .../Localization/Base.lproj/MPDocument.xib | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 1f05ed82..a39d8f46 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -1,9 +1,10 @@ - + - - + + + @@ -19,7 +20,7 @@ - + @@ -43,15 +44,13 @@ - + - - @@ -73,14 +72,14 @@ - + - + - - - + + + From 9cb67f5d3957524e5c186fdb85598b9dd26e585d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 12 Feb 2017 17:09:29 +0800 Subject: [PATCH 252/439] Fix file entries in project file for translation --- MacDown.xcodeproj/project.pbxproj | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index cbeba055..e683be24 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -59,7 +59,7 @@ 1FA6CDB91952D2CD008D5CA0 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */; }; 1FA6DE251941CC9E000409FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA6DE241941CC9E000409FB /* Cocoa.framework */; }; 1FA6DE481941CC9E000409FB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FA6DE241941CC9E000409FB /* Cocoa.framework */; }; - 1FBBD4BE194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */; }; + 1FB3C0241E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FB3C0221E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib */; }; 1FBBD4CB194CA36500BB3C88 /* hoedown_html_patch.c in Sources */ = {isa = PBXBuildFile; fileRef = 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */; }; 1FBDFE9C196170FE00BEEA70 /* Extensions in Resources */ = {isa = PBXBuildFile; fileRef = 1FBDFE9B196170FE00BEEA70 /* Extensions */; }; 1FBDFEA11962A25A00BEEA70 /* MPGeneralPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FBDFE9F1962A25A00BEEA70 /* MPGeneralPreferencesViewController.m */; }; @@ -236,7 +236,7 @@ 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; 1FA9196D1E472FD600850517 /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - 1FBBD4BD194C952300BB3C88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = SOURCE_ROOT; }; + 1FB3C0231E5061A2002AEB6A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = ""; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; 1FBDFE9B196170FE00BEEA70 /* Extensions */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Extensions; path = Resources/Extensions; sourceTree = ""; }; @@ -476,7 +476,7 @@ 1F9A14EB194EEE9900D1C6A9 /* MPMainController.m */, 1F9A14E8194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.h */, 1F9A14E9194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m */, - 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */, + 1FB3C0221E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib */, 1F5A37121C869C81006E63E7 /* MPPlugInController.h */, 1F5A37131C869C81006E63E7 /* MPPlugInController.m */, ); @@ -769,7 +769,6 @@ 1F0D9DB4194AC9EE008E1856 /* MainMenu.xib in Resources */, 1FBDFE9C196170FE00BEEA70 /* Extensions in Resources */, 1F41FF7B1C8EEE9200FD9886 /* Templates in Resources */, - 1FBBD4BE194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib in Resources */, 1FA6CDB91952D2CD008D5CA0 /* dsa_pub.pem in Resources */, 1F27896B1973BEB100EE696A /* Localizable.strings in Resources */, 1F0D9DAD194AC8EF008E1856 /* Images.xcassets in Resources */, @@ -781,6 +780,7 @@ 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */, + 1FB3C0241E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1108,13 +1108,12 @@ name = Localizable.strings; sourceTree = ""; }; - 1FBBD4BC194C952300BB3C88 /* MPExportPanelAccessoryViewController.xib */ = { + 1FB3C0221E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib */ = { isa = PBXVariantGroup; children = ( - 1FBBD4BD194C952300BB3C88 /* Base */, + 1FB3C0231E5061A2002AEB6A /* Base */, ); name = MPExportPanelAccessoryViewController.xib; - path = Code/Document; sourceTree = ""; }; 1FBDFEA31962A27300BEEA70 /* MPGeneralPreferencesViewController.xib */ = { @@ -1123,6 +1122,7 @@ 1FBDFEA41962A27300BEEA70 /* Base */, ); name = MPGeneralPreferencesViewController.xib; + path = ../..; sourceTree = ""; }; 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */ = { From 18da12fd6cb6e168997db32619a53289c540f748 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 12 Feb 2017 18:14:32 +0800 Subject: [PATCH 253/439] Remove unused title from xib to cleanup i18n --- .../MPEditorPreferencesViewController.xib | 17 +++++------ .../MPHtmlPreferencesViewController.xib | 29 ++++++++----------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib index 88753a74..0abadd03 100644 --- a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib @@ -1,10 +1,11 @@ - + - + + @@ -103,7 +104,7 @@ - + @@ -124,7 +125,7 @@ - + @@ -167,7 +168,7 @@ - + @@ -199,7 +200,7 @@ - + @@ -248,7 +249,7 @@ - + @@ -350,8 +351,6 @@ - - diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index 4017394b..d0516eaa 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -1,8 +1,9 @@ - + - + + @@ -20,7 +21,7 @@ - + @@ -28,24 +29,18 @@ - - + + - - - - - - - + - + @@ -58,7 +53,7 @@ - + @@ -71,7 +66,7 @@ - + @@ -93,7 +88,7 @@ - + @@ -206,7 +201,7 @@ - + From fe675caf40abb2a9d54ebc5e5333e79dbccb043a Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 18:33:35 +0800 Subject: [PATCH 254/439] Added highlight, strikethrough, comment Toolbar items not part of standard set. Added support for items not part of standard set. --- .../Code/Application/MPToolbarController.m | 70 ++++++++++++++++--- 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index a513f5a7..db7036cb 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -13,6 +13,7 @@ #pragma clang diagnostic ignored "-Wundeclared-selector" +static NSString *const kMPToolbarDictKeyIsDefaultItem = @"kMPToolbarDictKeyIsDefaultItem"; static NSString *const kMPToolbarDictKeyOrder = @"kMPToolbarDictKeyOrder"; static NSString *const kMPToolbarDictKeyIcon = @"kMPToolbarDictKeyIcon"; static NSString *const kMPToolbarDictKeyTitle = @"kMPToolbarDictKeyTitle"; @@ -134,16 +135,19 @@ - (void)setupToolbarItems // NSToolbarItem identifier as key self->toolbarItems = @{ @"indent-group": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeySegmentStyleSeparated: @YES, kMPToolbarDictKeySubItems: @{ @"shift-left": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeyIcon: @"ToolbarIconShiftLeft", kMPToolbarDictKeyTitle: @"Shift left", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(unindent:)], }, @"shift-right": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeyIcon: @"ToolbarIconShiftRight", kMPToolbarDictKeyTitle: @"Shift right", @@ -152,22 +156,26 @@ - (void)setupToolbarItems } }, @"text-formatting-group": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ @"bold": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeyIcon: @"ToolbarIconBold", kMPToolbarDictKeyTitle: @"Bold", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrong:)], }, @"italic": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeyIcon: @"ToolbarIconItalic", kMPToolbarDictKeyTitle: @"Italic", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEmphasis:)], }, @"underline": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @2, kMPToolbarDictKeyIcon: @"ToolbarIconUnderlined", kMPToolbarDictKeyTitle: @"Underline", @@ -176,22 +184,26 @@ - (void)setupToolbarItems } }, @"heading-group": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @2, kMPToolbarDictKeySegmentStyleSeparated: @YES, kMPToolbarDictKeySubItems: @{ @"heading1": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeyIcon: @"ToolbarIconHeading1", kMPToolbarDictKeyTitle: @"Heading 1", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH1:)], }, @"heading2": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeyIcon: @"ToolbarIconHeading2", kMPToolbarDictKeyTitle: @"Heading 2", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH2:)], }, @"heading3": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @2, kMPToolbarDictKeyIcon: @"ToolbarIconHeading3", kMPToolbarDictKeyTitle: @"Heading 3", @@ -200,16 +212,19 @@ - (void)setupToolbarItems } }, @"list-group": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @3, kMPToolbarDictKeySegmentStyleSeparated: @YES, kMPToolbarDictKeySubItems: @{ @"unordered-list": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeyIcon: @"ToolbarIconUnorderedList", kMPToolbarDictKeyTitle: @"Unordered list", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnorderedList:)], }, @"ordered-list": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeyIcon: @"ToolbarIconOrderedList", kMPToolbarDictKeyTitle: @"Ordered list", @@ -218,46 +233,54 @@ - (void)setupToolbarItems } }, @"blockquote": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @4, kMPToolbarDictKeyIcon: @"ToolbarIconBlockquote", kMPToolbarDictKeyTitle: @"Blockquote", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], }, @"code": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @5, kMPToolbarDictKeyIcon: @"ToolbarIconInlineCode", kMPToolbarDictKeyTitle: @"Inline code", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], }, @"link": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @6, kMPToolbarDictKeyIcon: @"ToolbarIconLink", kMPToolbarDictKeyTitle: @"Link", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], }, @"image": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @7, kMPToolbarDictKeyIcon: @"ToolbarIconImage", kMPToolbarDictKeyTitle: @"Inline code", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], }, @"copy-html": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @8, kMPToolbarDictKeyIcon: @"ToolbarIconCopyHTML", kMPToolbarDictKeyTitle: @"Copy HTML", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], }, @"toggle-panes-group": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @9, kMPToolbarDictKeySegmentStyleSeparated: @NO, kMPToolbarDictKeySubItems: @{ @"toggle-editor-pane": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", kMPToolbarDictKeyTitle: @"Toggle editor pane", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], }, @"toggle-preview-pane": @{ + kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", kMPToolbarDictKeyTitle: @"Toggle preview pane", @@ -265,15 +288,36 @@ - (void)setupToolbarItems }, } }, + @"comment": @{ + kMPToolbarDictKeyIsDefaultItem: @NO, + kMPToolbarDictKeyOrder: @10, + kMPToolbarDictKeyIcon: @"ToolbarIconComment", + kMPToolbarDictKeyTitle: @"Comment", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleComment:)], + }, + @"highlight": @{ + kMPToolbarDictKeyIsDefaultItem: @NO, + kMPToolbarDictKeyOrder: @11, + kMPToolbarDictKeyIcon: @"ToolbarIconHighlight", + kMPToolbarDictKeyTitle: @"Highlight", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleHighlight:)], + }, + @"strikethrough": @{ + kMPToolbarDictKeyIsDefaultItem: @NO, + kMPToolbarDictKeyOrder: @12, + kMPToolbarDictKeyIcon: @"ToolbarIconStrikethrough", + kMPToolbarDictKeyTitle: @"Strikethrough", + kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrikethrough:)], + }, }; } /** - * Creates an array with ordered keys from the passed argument dictionary which should be from the hierarchical dictionary produced by setupToolbarItems. + * Creates an array with ordered default item keys from the passed argument dictionary which should be from the hierarchical dictionary produced by setupToolbarItems. * * @returns Ordered keys(identifiers) */ -- (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary +- (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictionary { NSMutableArray *orderedKeys = [NSMutableArray new]; @@ -283,13 +327,23 @@ - (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary orderedKeys[i] = [NSNull null]; } + int defaultItemCount = 0; + for (NSDictionary *itemKey in dictionary) { NSDictionary *itemDictionary = dictionary[itemKey]; - NSInteger index = [itemDictionary[kMPToolbarDictKeyOrder] integerValue]; - orderedKeys[index] = itemKey; + BOOL isDefaultItem = [itemDictionary[kMPToolbarDictKeyIsDefaultItem] boolValue]; + + if (isDefaultItem) + { + NSInteger index = [itemDictionary[kMPToolbarDictKeyOrder] integerValue]; + orderedKeys[index] = itemKey; + defaultItemCount++; + } } + [orderedKeys removeObjectsInRange:NSMakeRange(defaultItemCount, orderedKeys.count - defaultItemCount)]; + return [orderedKeys copy]; } @@ -298,7 +352,7 @@ - (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar { // From toolbar item dictionary(setupToolbarItems) - NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarItemKeysForDictionary:self->toolbarItems]; + NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarDefaultItemKeysForDictionary:self->toolbarItems]; // Mixed identifiers from dictionary and spacing at below specified indices NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; @@ -326,12 +380,12 @@ - (NSArray *)orderedToolbarItemKeysForDictionary:(NSDictionary *)dictionary - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar { - return [self toolbarDefaultItemIdentifiers:toolbar]; + return [self->toolbarItems allKeys]; } - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar { - return [self toolbarDefaultItemIdentifiers:toolbar]; + return [self toolbarAllowedItemIdentifiers:toolbar]; } - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag @@ -387,7 +441,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString NSMutableArray *itemGroupItems = [NSMutableArray new]; - NSArray *orderedSubItemIdentifers = [self orderedToolbarItemKeysForDictionary:subItemDicts]; + NSArray *orderedSubItemIdentifers = [self orderedToolbarDefaultItemKeysForDictionary:subItemDicts]; int segmentIndex = 0; for (NSString *subItemIdentifier in orderedSubItemIdentifers) From f10b88e5d70102184423c559ea77a92c3a118d27 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 19:01:03 +0800 Subject: [PATCH 255/439] Autosave toolbar configuration --- MacDown/Localization/Base.lproj/MPDocument.xib | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 181c6565..dae792ff 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -27,7 +27,7 @@ - + @@ -126,7 +126,7 @@ - + From f56b6b37008df108d7244f7ba8c98d8b97079fda Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 21:58:52 +0800 Subject: [PATCH 256/439] Support for specifying whether highlightable --- .../Code/Application/MPToolbarController.m | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index db7036cb..7d2324d3 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -20,6 +20,7 @@ static NSString *const kMPToolbarDictKeySubItems = @"kMPToolbarDictKeySubItems"; static NSString *const kMPToolbarDictKeySegmentStyleSeparated = @"kMPToolbarDictKeySegmentStyleSeparated"; static NSString *const kMPToolbarDictKeyAction = @"kMPToolbarDictKeyAction"; +static NSString *const kMPToolbarDictKeyHighlightable = @"kMPToolbarDictKeyHighlightable"; @implementation MPToolbarController @@ -138,6 +139,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @0, kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeyHighlightable: @NO, kMPToolbarDictKeySubItems: @{ @"shift-left": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -159,6 +161,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @1, kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeyHighlightable: @NO, kMPToolbarDictKeySubItems: @{ @"bold": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -187,6 +190,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @2, kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeyHighlightable: @NO, kMPToolbarDictKeySubItems: @{ @"heading1": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -215,6 +219,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @3, kMPToolbarDictKeySegmentStyleSeparated: @YES, + kMPToolbarDictKeyHighlightable: @NO, kMPToolbarDictKeySubItems: @{ @"unordered-list": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -238,6 +243,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconBlockquote", kMPToolbarDictKeyTitle: @"Blockquote", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"code": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -245,6 +251,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconInlineCode", kMPToolbarDictKeyTitle: @"Inline code", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"link": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -252,6 +259,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconLink", kMPToolbarDictKeyTitle: @"Link", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"image": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -259,6 +267,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconImage", kMPToolbarDictKeyTitle: @"Inline code", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"copy-html": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -266,11 +275,13 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconCopyHTML", kMPToolbarDictKeyTitle: @"Copy HTML", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"toggle-panes-group": @{ kMPToolbarDictKeyIsDefaultItem: @YES, kMPToolbarDictKeyOrder: @9, kMPToolbarDictKeySegmentStyleSeparated: @NO, + kMPToolbarDictKeyHighlightable: @YES, kMPToolbarDictKeySubItems: @{ @"toggle-editor-pane": @{ kMPToolbarDictKeyIsDefaultItem: @YES, @@ -294,6 +305,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconComment", kMPToolbarDictKeyTitle: @"Comment", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleComment:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"highlight": @{ kMPToolbarDictKeyIsDefaultItem: @NO, @@ -301,6 +313,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconHighlight", kMPToolbarDictKeyTitle: @"Highlight", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleHighlight:)], + kMPToolbarDictKeyHighlightable: @NO, }, @"strikethrough": @{ kMPToolbarDictKeyIsDefaultItem: @NO, @@ -308,6 +321,7 @@ - (void)setupToolbarItems kMPToolbarDictKeyIcon: @"ToolbarIconStrikethrough", kMPToolbarDictKeyTitle: @"Strikethrough", kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrikethrough:)], + kMPToolbarDictKeyHighlightable: @NO, }, }; } @@ -400,6 +414,8 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; + BOOL highlightable = [itemDict[kMPToolbarDictKeyHighlightable] boolValue]; + if (subItemDicts == nil) // It's a regular toolbar item { NSString *title = itemDict[kMPToolbarDictKeyTitle]; @@ -409,7 +425,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString item.label = title; NSImage *itemImage = [NSImage imageNamed:iconName]; - [itemImage setTemplate:YES]; + [itemImage setTemplate:highlightable]; NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; [itemButton setButtonType:NSToggleButton]; itemButton.image = itemImage; @@ -433,7 +449,6 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString NSSegmentedControl *segmentedControl = [[NSSegmentedControl alloc] init]; segmentedControl.identifier = itemIdentifier; - segmentedControl.target = self; segmentedControl.segmentStyle = segmentStyleSeparated ? NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; @@ -449,16 +464,13 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString NSDictionary *subItemDict = subItemDicts[subItemIdentifier]; NSString *subItemTitle = subItemDict[kMPToolbarDictKeyTitle]; NSString *subItemIcon = subItemDict[kMPToolbarDictKeyIcon]; - SEL subItemSelector = [subItemDicts[kMPToolbarDictKeyAction] pointerValue]; NSToolbarItem *subItem = [[NSToolbarItem alloc] initWithItemIdentifier:subItemIdentifier]; subItem.label = subItemTitle; - subItem.target = self.document; - subItem.action = subItemSelector; NSImage *subItemImage = [NSImage imageNamed:subItemIcon]; - [subItemImage setTemplate:YES]; + [subItemImage setTemplate:highlightable]; [segmentedControl setImage:subItemImage forSegment:segmentIndex]; [segmentedControl setWidth:40.0 forSegment:segmentIndex]; From 939d42988edbd61e8d9f2e689b8f8232ddca9de8 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 12 Feb 2017 23:45:02 +0800 Subject: [PATCH 257/439] Support for space in default toolbar items --- .../Code/Application/MPToolbarController.m | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 7d2324d3..962ce730 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -368,24 +368,32 @@ - (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictiona // From toolbar item dictionary(setupToolbarItems) NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarDefaultItemKeysForDictionary:self->toolbarItems]; - // Mixed identifiers from dictionary and spacing at below specified indices + // Mixed identifiers from dictionary and space at below specified indices NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; - // Add spacing after the specified toolbar item indices - int spacingAfterIndices[] = {2,3,5,7}; + // Add space after the specified toolbar item indices + int spaceAfterIndices[] = {0, 1}; + int flexibleSpaceAfterIndices[] = {2, 3, 5, 7}; int i = 0; int j = 0; + int k = 0; for (NSString *itemIdentifier in orderedToolbarItemIdentifiers) { [defaultItemIdentifiers addObject:itemIdentifier]; - if (i == spacingAfterIndices[j]) + + if (i == spaceAfterIndices[j]) { - [defaultItemIdentifiers addObject:NSToolbarFlexibleSpaceItemIdentifier]; - + [defaultItemIdentifiers addObject:NSToolbarSpaceItemIdentifier]; j++; } + if (i == flexibleSpaceAfterIndices[k]) + { + [defaultItemIdentifiers addObject:NSToolbarFlexibleSpaceItemIdentifier]; + k++; + } + i++; } From 88ab7642fd7df36aa7f8ed4015c051991f8f897d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 13 Feb 2017 23:37:38 +0800 Subject: [PATCH 258/439] Add Sweden translation --- .tx/config | 9 +++++++++ MacDown.xcodeproj/project.pbxproj | 3 +++ MacDown/Localization/sv.lproj/InfoPlist.strings | 2 ++ MacDown/Localization/sv.lproj/Localizable.strings | Bin 0 -> 732 bytes 4 files changed, 14 insertions(+) create mode 100644 .tx/config create mode 100644 MacDown/Localization/sv.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/sv.lproj/Localizable.strings diff --git a/.tx/config b/.tx/config new file mode 100644 index 00000000..ad0ac370 --- /dev/null +++ b/.tx/config @@ -0,0 +1,9 @@ +[main] +host = https://www.transifex.com + +[macdown.localizable] +source_file = po/myproj.pot +source_lang = en +type = PO +file_filter = po/.po +trans.fi = translations/fi/LC_MESSAGES/django.po diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index e683be24..b54ba126 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -195,6 +195,7 @@ 1F41FF7A1C8EEE9200FD9886 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; + 1F58630F1E507D4200CE0393 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; 1F59491C1AB57D87007394CB /* NSJSONSerialization+File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+File.h"; sourceTree = ""; }; 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+File.m"; sourceTree = ""; }; @@ -730,6 +731,7 @@ en, Base, "zh-Hant", + sv, ); mainGroup = 1FA6DE181941CC9E000409FB; productRefGroup = 1FA6DE221941CC9E000409FB /* Products */; @@ -1095,6 +1097,7 @@ isa = PBXVariantGroup; children = ( 1F0D9DA9194AC8CB008E1856 /* en */, + 1F58630F1E507D4200CE0393 /* sv */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/MacDown/Localization/sv.lproj/InfoPlist.strings b/MacDown/Localization/sv.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDown/Localization/sv.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/MacDown/Localization/sv.lproj/Localizable.strings b/MacDown/Localization/sv.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..414b6649766c50944a964b247adc48c71586656f GIT binary patch literal 732 zcmbu6TT8=05QWckf5j3IY{6DV@SzAw8gHZ*(iR^}8$%UJ8oFL4Yv@6bRyD?db--k-P1W3YpTuYSzF)V`3ADDYqVHBK1c!9-#B8rIEBSd&Q2)% nWZVAP&D*2S2?_>IPw;OocDhTtV3 Date: Mon, 13 Feb 2017 23:38:27 +0800 Subject: [PATCH 259/439] Exiplicitly require Travis client --- Gemfile | 1 + Gemfile.lock | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/Gemfile b/Gemfile index 4b989798..4004d54f 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,4 @@ source 'https://rubygems.org/' gem 'cocoapods', '~> 1.1' +gem 'travis', '~> 1.8', '>= 1.8.6' diff --git a/Gemfile.lock b/Gemfile.lock index fd0bdd75..b5db62f3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,6 +8,8 @@ GEM minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) + addressable (2.4.0) + backports (3.6.8) claide (1.0.1) cocoapods (1.1.1) activesupport (>= 4.0.2, < 5) @@ -43,19 +45,55 @@ GEM cocoapods-try (1.1.0) colored (1.2) escape (0.0.4) + ethon (0.10.1) + ffi (>= 1.3.0) + faraday (0.11.0) + multipart-post (>= 1.2, < 3) + faraday_middleware (0.11.0.1) + faraday (>= 0.7.4, < 1.0) + ffi (1.9.17) fourflusher (2.0.1) fuzzy_match (2.0.4) + gh (0.15.0) + addressable (~> 2.4.0) + backports + faraday (~> 0.8) + multi_json (~> 1.0) + net-http-persistent (~> 2.9) + net-http-pipeline gh_inspector (1.0.2) + highline (1.7.8) i18n (0.7.0) json (1.8.3) + launchy (2.4.3) + addressable (~> 2.3) minitest (5.10.1) molinillo (0.5.4) + multi_json (1.12.1) + multipart-post (2.0.0) nanaimo (0.2.3) nap (1.1.0) + net-http-persistent (2.9.4) + net-http-pipeline (1.0.1) netrc (0.7.8) + pusher-client (0.6.2) + json + websocket (~> 1.0) thread_safe (0.3.5) + travis (1.8.6) + backports + faraday (~> 0.9) + faraday_middleware (~> 0.9, >= 0.9.1) + gh (~> 0.13) + highline (~> 1.6) + launchy (~> 2.1) + pusher-client (~> 0.4) + typhoeus (~> 0.6, >= 0.6.8) + typhoeus (0.8.0) + ethon (>= 0.8.0) tzinfo (1.2.2) thread_safe (~> 0.1) + websocket (1.2.4) xcodeproj (1.4.2) CFPropertyList (~> 2.3.3) activesupport (>= 3) @@ -68,6 +106,7 @@ PLATFORMS DEPENDENCIES cocoapods (~> 1.1) + travis (~> 1.8, >= 1.8.2) BUNDLED WITH 1.13.7 From edf6381dcc6e030d6e3d03c6c5bbb13aec5d7970 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 13 Feb 2017 23:40:10 +0800 Subject: [PATCH 260/439] Experimental Travis-Transifex integration --- .travis.yml | 19 +++++++++----- .tx/config | 9 +++---- Tools/travis_push_transifex.py | 45 ++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 Tools/travis_push_transifex.py diff --git a/.travis.yml b/.travis.yml index 0450baa1..ab8a6032 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,19 @@ osx_image: xcode8 language: objective-c cache: - - bundler - - cocoapods +- bundler +- cocoapods +env: + global: + secure: Vyar5YYP3n5CXQWiGxxT2QGYCcZgrSECmMb0BxeaG60KrKfDuXIoj6+rL/VqSImIlaF7qiVHkhHQba8Gf9QHhktUtfK4PQLfE0DzogoFVp8IXaTVEg9wBDnHAiqdadMmY3Vt2blnIIBLiV5+lFWxuSYlX27TTlr1ieev9Z+fMC0= install: - - "bundle install" - - "travis_wait bundle exec pod install" +- bundle install +- travis_wait bundle exec pod install +- pip install --user transifex-client before_script: - - set -o pipefail +- set -o pipefail script: - - xcodebuild -workspace MacDown.xcworkspace -scheme MacDown test | xcpretty +- xcodebuild -workspace MacDown.xcworkspace -scheme MacDown test | xcpretty +- xcodebuild -exportLocalizations -localizationPath Build/Localizations +after_success: +- python Tools/travis_push_transifex.py diff --git a/.tx/config b/.tx/config index ad0ac370..22091344 100644 --- a/.tx/config +++ b/.tx/config @@ -1,9 +1,8 @@ [main] host = https://www.transifex.com +lang_map = zh_TW:zh-Hant, zh_CN:zh-Hans -[macdown.localizable] -source_file = po/myproj.pot +[macdown.macdownxliff] +file_filter = Build/Localizations/.xliff source_lang = en -type = PO -file_filter = po/.po -trans.fi = translations/fi/LC_MESSAGES/django.po +type = XLIFF diff --git a/Tools/travis_push_transifex.py b/Tools/travis_push_transifex.py new file mode 100644 index 00000000..b2824dcd --- /dev/null +++ b/Tools/travis_push_transifex.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import print_function, unicode_literals +import io +import os +import sys + + +def write_transifex_config(): + """Used to setup Travis for Transifex push. + + Requires environ "TRANSIFEX_PASSWORD". + """ + transifexrc_path = os.path.expanduser('~/.transifexrc') + if os.path.exists(transifexrc_path): + return + with io.open(transifexrc_path, 'w', encoding='utf-8') as f: + f.write(( + '[https://www.transifex.com]\n' + 'hostname = https://www.transifex.com\n' + 'password = {password}\n' + 'token = \n' + 'username = macdown\n' + ).format(password=os.environ['TRANSIFEX_PASSWORD'])) + + +def main(): + if os.getenv('TRAVIS_PULL_REQUEST') != 'false': + print('Build triggered by a pull request. Transifex push skipped.', + file=sys.stderr) + return + current_branch = os.getenv('TRAVIS_BRANCH') + target_branch = 'master' + if current_branch != target_branch: + print('Branch {cur} is not {target}. Transifex push skipped.'.format( + cur=current_branch, target=target_branch, + ), file=sys.stderr) + return + write_transifex_config() + os.system('~/.local/bin/tx push -s') + + +if __name__ == '__main__': + main() From a5562a302beb045db074f38e2fe90f09ae0554e9 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 14 Feb 2017 00:32:17 +0800 Subject: [PATCH 261/439] Extract common tools to utils module --- .gitignore | 1 + Tools/build_for_release.py | 23 +++-------------------- Tools/macdown_utils.py | 25 +++++++++++++++++++++++++ Tools/travis_push_transifex.py | 4 +++- 4 files changed, 32 insertions(+), 21 deletions(-) create mode 100644 Tools/macdown_utils.py mode change 100644 => 100755 Tools/travis_push_transifex.py diff --git a/.gitignore b/.gitignore index b784729b..7ad2a141 100644 --- a/.gitignore +++ b/.gitignore @@ -174,6 +174,7 @@ xcuserdata Build/ Pods/ +Tools/__pycache__/ Dependency/version/version.h Dependency/peg-markdown-highlight/pmh_parser_core.c Dependency/peg-markdown-highlight/pmh_parser.c diff --git a/Tools/build_for_release.py b/Tools/build_for_release.py index b5d62a6e..c86b472b 100755 --- a/Tools/build_for_release.py +++ b/Tools/build_for_release.py @@ -4,11 +4,13 @@ from __future__ import print_function import os import re -import subprocess import shutil import zipfile + from xml.etree import ElementTree +from macdown_utils import XCODEBUILD, execute + try: input = raw_input @@ -17,7 +19,6 @@ OPENSSL = '/usr/bin/openssl' -XCODEBUILD = '/usr/bin/xcodebuild' OSASCRIPT = '/usr/bin/osascript' ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -28,24 +29,6 @@ TERM_ENCODING = 'utf-8' -class CommandError(Exception): - pass - - -def execute(*args): - proc = subprocess.Popen( - args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - ) - stdout, stderr = proc.communicate() - if proc.returncode: - raise CommandError( - '"{cmd}" failed with error {code}.\n {output}'.format( - cmd=' '.join(args), code=proc.returncode, output=stderr - ) - ) - return stdout - - def print_value(key, value): print('{key}:\n{value}\n'.format(key=key, value=value)) diff --git a/Tools/macdown_utils.py b/Tools/macdown_utils.py new file mode 100644 index 00000000..c03fb825 --- /dev/null +++ b/Tools/macdown_utils.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import subprocess + + +XCODEBUILD = '/usr/bin/xcodebuild' + + +class CommandError(Exception): + pass + + +def execute(*args): + proc = subprocess.Popen( + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + ) + stdout, stderr = map(lambda s: s.decode('utf-8'), proc.communicate()) + if proc.returncode: + raise CommandError( + '"{cmd}" failed with error {code}.\n {output}'.format( + cmd=' '.join(args), code=proc.returncode, output=stderr + ) + ) + return stdout diff --git a/Tools/travis_push_transifex.py b/Tools/travis_push_transifex.py old mode 100644 new mode 100755 index b2824dcd..fda04861 --- a/Tools/travis_push_transifex.py +++ b/Tools/travis_push_transifex.py @@ -6,6 +6,8 @@ import os import sys +from macdown_utils import execute + def write_transifex_config(): """Used to setup Travis for Transifex push. @@ -38,7 +40,7 @@ def main(): ), file=sys.stderr) return write_transifex_config() - os.system('~/.local/bin/tx push -s') + execute(os.path.expanduser('~/.local/bin/tx'), 'push', '-s') if __name__ == '__main__': From af5e6f06775cb88f484f39ae8bbe7154e9312079 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 14 Feb 2017 00:39:27 +0800 Subject: [PATCH 262/439] Fix --user tx path --- Tools/travis_push_transifex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/travis_push_transifex.py b/Tools/travis_push_transifex.py index fda04861..9198c5fa 100755 --- a/Tools/travis_push_transifex.py +++ b/Tools/travis_push_transifex.py @@ -40,7 +40,7 @@ def main(): ), file=sys.stderr) return write_transifex_config() - execute(os.path.expanduser('~/.local/bin/tx'), 'push', '-s') + execute(os.path.expanduser('~/Library/Python/2.7/bin/tx'), 'push', '-s') if __name__ == '__main__': From 20e607079c3eff78b239da5d5f101d5f7457c9a5 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 14 Feb 2017 14:47:59 +0800 Subject: [PATCH 263/439] Update travis in gem lockfile --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b5db62f3..c0032e7d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -106,7 +106,7 @@ PLATFORMS DEPENDENCIES cocoapods (~> 1.1) - travis (~> 1.8, >= 1.8.2) + travis (~> 1.8, >= 1.8.6) BUNDLED WITH 1.13.7 From c8ebaa931438a0f0ba527438564aa7ddfae41e02 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 14 Feb 2017 14:48:05 +0800 Subject: [PATCH 264/439] Terrible hack to work around NSLocalizedString bug NSLocalizedString does not understand concatenated string literals. This hack uses a macro with linebreak escape to merge the literals into a very long string instead. --- MacDown/Code/Document/MPDocument.m | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index b1d6f0dc..d6ef5118 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1655,6 +1655,14 @@ - (BOOL)isCurrentBaseUrl:(NSURL *)another return mine == theirs || [mine isEqualToString:theirs]; } + +#define OPEN_FAIL_ALERT_INFORMATIVE NSLocalizedString(\ +@"Please check the path of your link is correct. Turn on \ +“Automatically create link targets” If you want MacDown to \ +create nonexistent link targets for you.", \ +@"preview navigation error information") + + - (void)openOrCreateFileForUrl:(NSURL *)url { // If the URL points to a nonexistent file, create automatically if @@ -1674,11 +1682,7 @@ - (void)openOrCreateFileForUrl:(NSURL *)url @"File not found at path:\n%@", @"preview navigation error message"); alert.messageText = [NSString stringWithFormat:template, url.path]; - alert.informativeText = NSLocalizedString( - @"Please check the path of your link is correct. Turn on " - @"“Automatically create link targets” If you want MacDown to " - @"create nonexistent link targets for you.", - @"preview navigation error information"); + alert.informativeText = OPEN_FAIL_ALERT_INFORMATIVE; [alert runModal]; return; } From 182ed7be6c05fc7e4b030721d88eff729ab878f1 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 15 Feb 2017 00:37:46 +0800 Subject: [PATCH 265/439] Translation import script --- Tools/build_for_release.py | 3 +- Tools/compat.py | 18 ++++++ Tools/import_translations.py | 103 +++++++++++++++++++++++++++++++++++ Tools/macdown_utils.py | 3 + 4 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 Tools/compat.py create mode 100755 Tools/import_translations.py diff --git a/Tools/build_for_release.py b/Tools/build_for_release.py index c86b472b..401b6426 100755 --- a/Tools/build_for_release.py +++ b/Tools/build_for_release.py @@ -9,7 +9,7 @@ from xml.etree import ElementTree -from macdown_utils import XCODEBUILD, execute +from macdown_utils import ROOT_DIR, XCODEBUILD, execute try: @@ -21,7 +21,6 @@ OPENSSL = '/usr/bin/openssl' OSASCRIPT = '/usr/bin/osascript' -ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BUILD_DIR = os.path.join(ROOT_DIR, 'Build') APP_NAME = 'MacDown.app' ZIP_NAME = 'MacDown.app.zip' diff --git a/Tools/compat.py b/Tools/compat.py new file mode 100644 index 00000000..8894c4fb --- /dev/null +++ b/Tools/compat.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +_NOTHING = object() + +try: + import configparser +except ImportError: # Python 2. + import ConfigParser as configparser + + class ConfigParser(configparser.SafeConfigParser): + """Compatibility layer. + """ + def read_file(self, f, source=None): + return self.readfp(f, source) + +else: + ConfigParser = configparser.ConfigParser diff --git a/Tools/import_translations.py b/Tools/import_translations.py new file mode 100755 index 00000000..053671b5 --- /dev/null +++ b/Tools/import_translations.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import logging +import os +import shutil + +from xml.etree import ElementTree + +from compat import ConfigParser +from macdown_utils import ROOT_DIR, XCODEBUILD, execute + + +TX_CONFIG_FILE = os.path.join(ROOT_DIR, '.tx', 'config') +XLIFF_URL = 'urn:oasis:names:tc:xliff:document:1.2' + + +logger = logging.getLogger() + + +ElementTree.register_namespace('', XLIFF_URL) + + +def pull_translations(parser): + xliff_dirpath = os.path.dirname( + parser.get('macdown.macdownxliff', 'file_filter'), + ) + for fn in os.listdir(xliff_dirpath): + os.remove(os.path.join(xliff_dirpath, fn)) + os.system('tx pull -a') + + +def parse_tx_config(): + parser = ConfigParser() + with open(TX_CONFIG_FILE) as f: + parser.read_file(f) + return parser + + +def fix_translation_codes(parser): + # Get language code mapping (Transifex, Xcode). + def parse_lang_pair(s): + f, t = (c.strip() for c in s.split(':')) + return f.replace('_', '-'), t + + code_map = dict( + parse_lang_pair(keymap) + for keymap in parser.get('main', 'lang_map').split(',') + ) + + # Get the file pattern. + xliff_dirpath = os.path.dirname( + parser.get('macdown.macdownxliff', 'file_filter'), + ) + for fn in os.listdir(xliff_dirpath): + if os.path.splitext(fn)[-1] != '.xliff': + continue + xliff_filepath = os.path.join(xliff_dirpath, fn) + logger.info('Fixing {}'.format(xliff_filepath)) + + tree = ElementTree.parse(xliff_filepath) + + # Fix language codes. + for node in tree.iterfind('xliff:file', {'xliff': XLIFF_URL}): + try: + new_code = code_map[node.get('target-language')] + except KeyError: + pass + else: + node.set('target-language', new_code) + + tree.write( + xliff_filepath, + encoding='UTF-8', xml_declaration=True, method='xml', + ) + + +def import_translations(parser): + source_lang = parser.get('macdown.macdownxliff', 'source_lang') + xliff_dirpath = os.path.dirname( + parser.get('macdown.macdownxliff', 'file_filter'), + ) + for fn in os.listdir(xliff_dirpath): + stem, ext = os.path.splitext(fn) + if ext != '.xliff' or stem == source_lang: + continue + logger.info('Importing {}'.format(fn)) + execute( + XCODEBUILD, '-importLocalizations', + '-localizationPath', os.path.join(xliff_dirpath, fn), + ) + + +def main(): + logging.basicConfig(level=logging.INFO) + parser = parse_tx_config() + pull_translations(parser) + fix_translation_codes(parser) + import_translations(parser) + + +if __name__ == '__main__': + main() diff --git a/Tools/macdown_utils.py b/Tools/macdown_utils.py index c03fb825..ec1be6cf 100644 --- a/Tools/macdown_utils.py +++ b/Tools/macdown_utils.py @@ -1,11 +1,14 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import os import subprocess XCODEBUILD = '/usr/bin/xcodebuild' +ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + class CommandError(Exception): pass From 03465dd24e9fbf5fc852e918ad0bab47bb5c3cb2 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 15 Feb 2017 00:41:30 +0800 Subject: [PATCH 266/439] Convert all .string files to UTF-8 --- MacDown.xcodeproj/project.pbxproj | 24 +- .../Localization/en.lproj/Localizable.strings | Bin 732 -> 365 bytes .../Localization/sv.lproj/Localizable.strings | Bin 732 -> 365 bytes .../Localization/sv.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 72 ++++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 +++ .../Localization/sv.lproj/MainMenu.strings | 348 ++++++++++++++++++ .../zh-Hant.lproj/Localizable.strings | Bin 594 -> 324 bytes MacDownTests/sv.lproj/InfoPlist.strings | 2 + 12 files changed, 575 insertions(+), 4 deletions(-) create mode 100644 MacDown/Localization/sv.lproj/MPDocument.strings create mode 100644 MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/sv.lproj/MainMenu.strings create mode 100644 MacDownTests/sv.lproj/InfoPlist.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index b54ba126..83abab1b 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -195,7 +195,6 @@ 1F41FF7A1C8EEE9200FD9886 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; - 1F58630F1E507D4200CE0393 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; 1F59491C1AB57D87007394CB /* NSJSONSerialization+File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+File.h"; sourceTree = ""; }; 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+File.m"; sourceTree = ""; }; @@ -235,8 +234,8 @@ 1FA6DE281941CC9E000409FB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 1FA6DE291941CC9E000409FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; - 1FA9196D1E472FD600850517 /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; + 1FA9196D1E472FD600850517 /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; 1FB3C0231E5061A2002AEB6A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = ""; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; @@ -246,6 +245,15 @@ 1FBDFEA41962A27300BEEA70 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPGeneralPreferencesViewController.xib; sourceTree = SOURCE_ROOT; }; 1FBE8E0E1A11DB1E003E1EF4 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "macdown-cmd/main.m"; sourceTree = SOURCE_ROOT; }; 1FC29F5B1944FC2600D616C7 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 1FCBDEF11E536A2500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MainMenu.strings; sourceTree = ""; }; + 1FCBDEF21E536A2500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1FCBDEF31E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDEF41E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDEF51E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDEF61E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDEF71E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPDocument.strings; sourceTree = ""; }; + 1FCBDEF81E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 1FCBDEF91E536A2A00C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; 1FCD71131A20BA3A00C028B5 /* version.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = version.xcodeproj; sourceTree = ""; }; 1FCD711A1A20BE2F00C028B5 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = Dependency/version/version.h; sourceTree = SOURCE_ROOT; }; 1FCDCA301944F96E00B1F966 /* MacDownTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MacDownTests-Info.plist"; sourceTree = ""; }; @@ -1045,6 +1053,7 @@ isa = PBXVariantGroup; children = ( 1F0D9D82194AC83C008E1856 /* Base */, + 1FCBDEF11E536A2500C0F56B /* sv */, ); name = MainMenu.xib; sourceTree = ""; @@ -1053,6 +1062,7 @@ isa = PBXVariantGroup; children = ( 1F0D9D84194AC83C008E1856 /* Base */, + 1FCBDEF71E536A2600C0F56B /* sv */, ); name = MPDocument.xib; path = ../..; @@ -1062,6 +1072,7 @@ isa = PBXVariantGroup; children = ( 1F0D9D86194AC83C008E1856 /* Base */, + 1FCBDEF51E536A2600C0F56B /* sv */, ); name = MPEditorPreferencesViewController.xib; path = ../..; @@ -1071,6 +1082,7 @@ isa = PBXVariantGroup; children = ( 1F0D9D88194AC83C008E1856 /* Base */, + 1FCBDEF61E536A2600C0F56B /* sv */, ); name = MPHtmlPreferencesViewController.xib; path = ../..; @@ -1080,6 +1092,7 @@ isa = PBXVariantGroup; children = ( 1F0D9D8A194AC83C008E1856 /* Base */, + 1FCBDEF41E536A2600C0F56B /* sv */, ); name = MPMarkdownPreferencesViewController.xib; path = ../..; @@ -1097,7 +1110,7 @@ isa = PBXVariantGroup; children = ( 1F0D9DA9194AC8CB008E1856 /* en */, - 1F58630F1E507D4200CE0393 /* sv */, + 1FCBDEF81E536A2600C0F56B /* sv */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1115,6 +1128,7 @@ isa = PBXVariantGroup; children = ( 1FB3C0231E5061A2002AEB6A /* Base */, + 1FCBDEF21E536A2500C0F56B /* sv */, ); name = MPExportPanelAccessoryViewController.xib; sourceTree = ""; @@ -1123,6 +1137,7 @@ isa = PBXVariantGroup; children = ( 1FBDFEA41962A27300BEEA70 /* Base */, + 1FCBDEF31E536A2600C0F56B /* sv */, ); name = MPGeneralPreferencesViewController.xib; path = ../..; @@ -1132,6 +1147,7 @@ isa = PBXVariantGroup; children = ( 1FCDCA331944F96E00B1F966 /* en */, + 1FCBDEF91E536A2A00C0F56B /* sv */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/MacDown/Localization/en.lproj/Localizable.strings b/MacDown/Localization/en.lproj/Localizable.strings index 414b6649766c50944a964b247adc48c71586656f..89733c245af40dfa51dfdb0834c4f408f89f483c 100644 GIT binary patch literal 365 zcmaiuU2DQH7=`ciD-MN$3Ty2Ub|Hg>SanjZq?KKkmR|ee4X=M9C>(x7kX2t zz9xK@egbL6Up9+gy?e$I= Q8nzWu+2QxZuZsKZ9f_1|SpWb4 literal 732 zcmbu6TT8=05QWckf5j3IY{6DV@SzAw8gHZ*(iR^}8$%UJ8oFL4Yv@6bRyD?db--k-P1W3YpTuYSzF)V`3ADDYqVHBK1c!9-#B8rIEBSd&Q2)% nWZVAP&D*2S2?_>IPw;OocDhTtV3SanjZq?KKkmR|ee4X=M9C>(x7kX2t zz9xK@egbL6Up9+gy?e$I= Q8nzWu+2QxZuZsKZ9f_1|SpWb4 literal 732 zcmbu6TT8=05QWckf5j3IY{6DV@SzAw8gHZ*(iR^}8$%UJ8oFL4Yv@6bRyD?db--k-P1W3YpTuYSzF)V`3ADDYqVHBK1c!9-#B8rIEBSd&Q2)% nWZVAP&D*2S2?_>IPw;OocDhTtV3e~@o{P^gcql7g**l7W&nP&V8@$R!x2AUGt* z)6X3&tLmWew4wXy+Ua0b&K{0Ij?N*jL3ouuZEZ$Z?dKmK9N_5eN=V=PJsnSW^gf-i R`uWOT&lc=?zo!#u5&#$%Y#IOn literal 594 zcmbV|QA@)x6ot>DPW%t0An3$RMesodC96*9YV9U_@L{-FHetBos$ze<^-Efq;KNWt zo12q!zmuf+YO1c9JVvOQMtam#&&rvHRH+(TDAOz2i^kNYx5NHOEjm8XYn5v7rR-$< zpCAtP$-f8fO?#SG3{OTA6w9-@Gb&F9I#N@|R-~&Ry<0kmu@UzlmJFjdsW#cr6Hxt~X6{z;B2GGh9J`$0Um0t~ PX0+SO^V7+CQRaOEVt-kN diff --git a/MacDownTests/sv.lproj/InfoPlist.strings b/MacDownTests/sv.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDownTests/sv.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + From 8414308db3ae95ea05f8c6950cc1b43c8836ddbb Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 15 Feb 2017 00:50:12 +0800 Subject: [PATCH 267/439] Add dummy l10n files for sv, zh-Hant, and zh-Hans --- MacDown.xcodeproj/project.pbxproj | 89 +++- MacDown/Localization/sv.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/zh-Hans.lproj/Credits.rtf | 406 ++++++++++++++++++ .../zh-Hans.lproj/InfoPlist.strings | 2 + .../zh-Hans.lproj/Localizable.strings | 15 + .../zh-Hans.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 72 ++++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ .../zh-Hans.lproj/MainMenu.strings | 348 +++++++++++++++ .../Localization/zh-Hant.lproj/Credits.rtf | 406 ++++++++++++++++++ .../zh-Hant.lproj/InfoPlist.strings | 2 + .../zh-Hant.lproj/Localizable.strings | 8 +- .../zh-Hant.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 72 ++++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ .../zh-Hant.lproj/MainMenu.strings | 348 +++++++++++++++ MacDownTests/zh-Hans.lproj/InfoPlist.strings | 2 + MacDownTests/zh-Hant.lproj/InfoPlist.strings | 2 + 24 files changed, 2419 insertions(+), 25 deletions(-) create mode 100644 MacDown/Localization/sv.lproj/Credits.rtf create mode 100644 MacDown/Localization/zh-Hans.lproj/Credits.rtf create mode 100644 MacDown/Localization/zh-Hans.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/Localizable.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MPDocument.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/MainMenu.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/Credits.rtf create mode 100644 MacDown/Localization/zh-Hant.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MPDocument.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/MainMenu.strings create mode 100644 MacDownTests/zh-Hans.lproj/InfoPlist.strings create mode 100644 MacDownTests/zh-Hant.lproj/InfoPlist.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 83abab1b..01de153f 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -235,7 +235,6 @@ 1FA6DE291941CC9E000409FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; - 1FA9196D1E472FD600850517 /* zh-Hant */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; 1FB3C0231E5061A2002AEB6A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = ""; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; @@ -245,15 +244,39 @@ 1FBDFEA41962A27300BEEA70 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = MacDown/Localization/Base.lproj/MPGeneralPreferencesViewController.xib; sourceTree = SOURCE_ROOT; }; 1FBE8E0E1A11DB1E003E1EF4 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "macdown-cmd/main.m"; sourceTree = SOURCE_ROOT; }; 1FC29F5B1944FC2600D616C7 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 1FCBDEF11E536A2500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MainMenu.strings; sourceTree = ""; }; - 1FCBDEF21E536A2500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; - 1FCBDEF31E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; - 1FCBDEF41E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; - 1FCBDEF51E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; - 1FCBDEF61E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; - 1FCBDEF71E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPDocument.strings; sourceTree = ""; }; - 1FCBDEF81E536A2600C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; - 1FCBDEF91E536A2A00C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 1FCBDF0B1E536C8400C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MainMenu.strings; sourceTree = ""; }; + 1FCBDF0C1E536C8400C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1FCBDF0D1E536C8400C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDF0E1E536C8400C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDF0F1E536C8400C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDF101E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1FCBDF111E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPDocument.strings; sourceTree = ""; }; + 1FCBDF121E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sv; path = Localization/sv.lproj/Credits.rtf; sourceTree = ""; }; + 1FCBDF131E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 1FCBDF141E536C8900C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 1FCBDF151E536C9F00C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/Localizable.strings; sourceTree = ""; }; + 1FCBDF161E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MainMenu.strings"; sourceTree = ""; }; + 1FCBDF171E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1FCBDF181E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF191E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF1A1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF1B1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF1C1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPDocument.strings"; sourceTree = ""; }; + 1FCBDF1D1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Credits.rtf"; sourceTree = ""; }; + 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; + 1FCBDF1F1E536CAF00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + 1FCBDF201E536CAF00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; + 1FCBDF211E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MainMenu.strings"; sourceTree = ""; }; + 1FCBDF221E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1FCBDF231E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF241E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF251E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF261E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1FCBDF271E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPDocument.strings"; sourceTree = ""; }; + 1FCBDF281E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/Credits.rtf"; sourceTree = ""; }; + 1FCBDF291E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; + 1FCBDF2A1E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 1FCBDF2B1E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCD71131A20BA3A00C028B5 /* version.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = version.xcodeproj; sourceTree = ""; }; 1FCD711A1A20BE2F00C028B5 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = Dependency/version/version.h; sourceTree = SOURCE_ROOT; }; 1FCDCA301944F96E00B1F966 /* MacDownTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MacDownTests-Info.plist"; sourceTree = ""; }; @@ -738,8 +761,9 @@ knownRegions = ( en, Base, - "zh-Hant", sv, + "zh-Hant", + "zh-Hans", ); mainGroup = 1FA6DE181941CC9E000409FB; productRefGroup = 1FA6DE221941CC9E000409FB /* Products */; @@ -1053,7 +1077,9 @@ isa = PBXVariantGroup; children = ( 1F0D9D82194AC83C008E1856 /* Base */, - 1FCBDEF11E536A2500C0F56B /* sv */, + 1FCBDF0B1E536C8400C0F56B /* sv */, + 1FCBDF161E536CAE00C0F56B /* zh-Hant */, + 1FCBDF211E536CB600C0F56B /* zh-Hans */, ); name = MainMenu.xib; sourceTree = ""; @@ -1062,7 +1088,9 @@ isa = PBXVariantGroup; children = ( 1F0D9D84194AC83C008E1856 /* Base */, - 1FCBDEF71E536A2600C0F56B /* sv */, + 1FCBDF111E536C8500C0F56B /* sv */, + 1FCBDF1C1E536CAE00C0F56B /* zh-Hant */, + 1FCBDF271E536CB700C0F56B /* zh-Hans */, ); name = MPDocument.xib; path = ../..; @@ -1072,7 +1100,9 @@ isa = PBXVariantGroup; children = ( 1F0D9D86194AC83C008E1856 /* Base */, - 1FCBDEF51E536A2600C0F56B /* sv */, + 1FCBDF0F1E536C8400C0F56B /* sv */, + 1FCBDF1A1E536CAE00C0F56B /* zh-Hant */, + 1FCBDF251E536CB600C0F56B /* zh-Hans */, ); name = MPEditorPreferencesViewController.xib; path = ../..; @@ -1082,7 +1112,9 @@ isa = PBXVariantGroup; children = ( 1F0D9D88194AC83C008E1856 /* Base */, - 1FCBDEF61E536A2600C0F56B /* sv */, + 1FCBDF101E536C8500C0F56B /* sv */, + 1FCBDF1B1E536CAE00C0F56B /* zh-Hant */, + 1FCBDF261E536CB700C0F56B /* zh-Hans */, ); name = MPHtmlPreferencesViewController.xib; path = ../..; @@ -1092,7 +1124,9 @@ isa = PBXVariantGroup; children = ( 1F0D9D8A194AC83C008E1856 /* Base */, - 1FCBDEF41E536A2600C0F56B /* sv */, + 1FCBDF0E1E536C8400C0F56B /* sv */, + 1FCBDF191E536CAE00C0F56B /* zh-Hant */, + 1FCBDF241E536CB600C0F56B /* zh-Hans */, ); name = MPMarkdownPreferencesViewController.xib; path = ../..; @@ -1102,6 +1136,9 @@ isa = PBXVariantGroup; children = ( 1F0D9DA7194AC8CB008E1856 /* en */, + 1FCBDF121E536C8500C0F56B /* sv */, + 1FCBDF1D1E536CAE00C0F56B /* zh-Hant */, + 1FCBDF281E536CB700C0F56B /* zh-Hans */, ); name = Credits.rtf; sourceTree = ""; @@ -1110,7 +1147,9 @@ isa = PBXVariantGroup; children = ( 1F0D9DA9194AC8CB008E1856 /* en */, - 1FCBDEF81E536A2600C0F56B /* sv */, + 1FCBDF131E536C8500C0F56B /* sv */, + 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */, + 1FCBDF291E536CB700C0F56B /* zh-Hans */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1119,7 +1158,9 @@ isa = PBXVariantGroup; children = ( 1FA9196B1E4723A200850517 /* en */, - 1FA9196D1E472FD600850517 /* zh-Hant */, + 1FCBDF151E536C9F00C0F56B /* sv */, + 1FCBDF1F1E536CAF00C0F56B /* zh-Hant */, + 1FCBDF2A1E536CB700C0F56B /* zh-Hans */, ); name = Localizable.strings; sourceTree = ""; @@ -1128,7 +1169,9 @@ isa = PBXVariantGroup; children = ( 1FB3C0231E5061A2002AEB6A /* Base */, - 1FCBDEF21E536A2500C0F56B /* sv */, + 1FCBDF0C1E536C8400C0F56B /* sv */, + 1FCBDF171E536CAE00C0F56B /* zh-Hant */, + 1FCBDF221E536CB600C0F56B /* zh-Hans */, ); name = MPExportPanelAccessoryViewController.xib; sourceTree = ""; @@ -1137,7 +1180,9 @@ isa = PBXVariantGroup; children = ( 1FBDFEA41962A27300BEEA70 /* Base */, - 1FCBDEF31E536A2600C0F56B /* sv */, + 1FCBDF0D1E536C8400C0F56B /* sv */, + 1FCBDF181E536CAE00C0F56B /* zh-Hant */, + 1FCBDF231E536CB600C0F56B /* zh-Hans */, ); name = MPGeneralPreferencesViewController.xib; path = ../..; @@ -1147,7 +1192,9 @@ isa = PBXVariantGroup; children = ( 1FCDCA331944F96E00B1F966 /* en */, - 1FCBDEF91E536A2A00C0F56B /* sv */, + 1FCBDF141E536C8900C0F56B /* sv */, + 1FCBDF201E536CAF00C0F56B /* zh-Hant */, + 1FCBDF2B1E536CB700C0F56B /* zh-Hans */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/MacDown/Localization/sv.lproj/Credits.rtf b/MacDown/Localization/sv.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/sv.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/Credits.rtf b/MacDown/Localization/zh-Hans.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/MacDown/Localization/zh-Hans.lproj/Localizable.strings b/MacDown/Localization/zh-Hans.lproj/Localizable.strings new file mode 100644 index 00000000..89733c24 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,15 @@ +/* + Localizable.strings + MacDown + + Created by Tzu-ping Chung on 14/7. + Copyright (c) 2014 Tzu-ping Chung . All rights reserved. +*/ + +"JJ_PLURAL_FORM_RULE" = "1"; + +"WORDS_PLURAL_STRING" = "%@ word;%@ words"; + +"CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; + +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPDocument.strings b/MacDown/Localization/zh-Hans.lproj/MPDocument.strings new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MPDocument.strings @@ -0,0 +1 @@ + diff --git a/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..52b99009 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,72 @@ + +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "List marker:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus sign)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Change…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "BmJ-Oh-va6"; */ +"BmJ-Oh-va6.title" = "Item 2"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Text insets:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "Ia1-VG-EWI"; */ +"Ia1-VG-EWI.title" = "OtherViews"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Line spacing:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limit editor width to"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisk)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Base font:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scroll past end"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-complete matching characters"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "qML-FL-WrV"; */ +"qML-FL-WrV.title" = "Item 3"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..6b790377 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ + +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Include syntax highlighting"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..46298ad4 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ + +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Put editor on the right"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Update"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatically create files for link targets"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Ensure open document on launch"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Update preview automatically as you type"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Show word count"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..adb2c73b --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Math support requires Internet connection."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-like math syntax"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax highlighted code block"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Custom"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Render newline literally"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Show line numbers"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Default path:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Task list syntax"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detect table of contents token"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "None"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Language name"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..0236c34b --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ + +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Footnote"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Quote"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Highlight"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Intra-word emphasis"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Fenced code block"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Underline"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Strikethrough"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autolink"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Block formatting"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline formatting"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superscript"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Document formatting"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/zh-Hans.lproj/MainMenu.strings b/MacDown/Localization/zh-Hans.lproj/MainMenu.strings new file mode 100644 index 00000000..2dcaf262 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/MainMenu.strings @@ -0,0 +1,348 @@ + +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Header 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Enter Full Screen"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Highlight"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Emphasize"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Strikethrough"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Header 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Header 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "View"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Shift Left"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Header 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Left 3:1 Right"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Strong"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Hide Preview Pane"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Left 1:3 Right"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Render Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Image"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "New"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Shift Right"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Left 1:1 Right"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comment"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Unordered List"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Ordered List"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Header 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copy HTML"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Blockquote"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Help"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Hide Editor Pane"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Header 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragraph"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "View"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDown/Localization/zh-Hant.lproj/Credits.rtf b/MacDown/Localization/zh-Hant.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/MacDown/Localization/zh-Hant.lproj/Localizable.strings b/MacDown/Localization/zh-Hant.lproj/Localizable.strings index 0c97dd17..89733c24 100644 --- a/MacDown/Localization/zh-Hant.lproj/Localizable.strings +++ b/MacDown/Localization/zh-Hant.lproj/Localizable.strings @@ -6,10 +6,10 @@ Copyright (c) 2014 Tzu-ping Chung . All rights reserved. */ -"JJ_PLURAL_FORM_RULE" = "0"; +"JJ_PLURAL_FORM_RULE" = "1"; -"WORDS_PLURAL_STRING" = "%@ 個字"; +"WORDS_PLURAL_STRING" = "%@ word;%@ words"; -"CHARACTERS_PLURAL_STRING" = "%@ 個字元"; +"CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; -"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ 個字元(不含空格)"; +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPDocument.strings b/MacDown/Localization/zh-Hant.lproj/MPDocument.strings new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MPDocument.strings @@ -0,0 +1 @@ + diff --git a/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..52b99009 --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,72 @@ + +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "List marker:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus sign)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Change…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; + +/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "BmJ-Oh-va6"; */ +"BmJ-Oh-va6.title" = "Item 2"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Text insets:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "Ia1-VG-EWI"; */ +"Ia1-VG-EWI.title" = "OtherViews"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Line spacing:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limit editor width to"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisk)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Base font:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scroll past end"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-complete matching characters"; + +/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "qML-FL-WrV"; */ +"qML-FL-WrV.title" = "Item 3"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..6b790377 --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ + +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Include syntax highlighting"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..46298ad4 --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ + +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Put editor on the right"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Update"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatically create files for link targets"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Ensure open document on launch"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Update preview automatically as you type"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Show word count"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..adb2c73b --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Math support requires Internet connection."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-like math syntax"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax highlighted code block"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Custom"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Render newline literally"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Show line numbers"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Default path:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Task list syntax"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detect table of contents token"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "None"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Language name"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..0236c34b --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ + +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Footnote"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Quote"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Highlight"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Intra-word emphasis"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Fenced code block"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Underline"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Strikethrough"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autolink"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Block formatting"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline formatting"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superscript"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Document formatting"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings new file mode 100644 index 00000000..2dcaf262 --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings @@ -0,0 +1,348 @@ + +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Header 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Enter Full Screen"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Highlight"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Emphasize"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Strikethrough"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Header 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Header 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "View"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Shift Left"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Header 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Left 3:1 Right"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Strong"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Hide Preview Pane"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Left 1:3 Right"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Render Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Image"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "New"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Shift Right"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Left 1:1 Right"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comment"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Unordered List"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Ordered List"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Header 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copy HTML"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Blockquote"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Help"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Hide Editor Pane"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Header 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragraph"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "View"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDownTests/zh-Hans.lproj/InfoPlist.strings b/MacDownTests/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDownTests/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/MacDownTests/zh-Hant.lproj/InfoPlist.strings b/MacDownTests/zh-Hant.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDownTests/zh-Hant.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + From 689d7c30a02d9661b956d341e1cd96de7442b2c7 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 15 Feb 2017 00:57:45 +0800 Subject: [PATCH 268/439] Remove unused strings from xib --- .../Base.lproj/MPEditorPreferencesViewController.xib | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib index 0abadd03..4a3c60b9 100644 --- a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib @@ -66,16 +66,10 @@ - + - - - - - - - + From 3f01fdc806cb9decdce4004ea1d1f2bcb2fdae5f Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 17 Feb 2017 14:03:39 +0800 Subject: [PATCH 269/439] Removed fixed space in toolbar default set --- MacDown/Code/Application/MPToolbarController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 962ce730..78315573 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -372,7 +372,7 @@ - (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictiona NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; // Add space after the specified toolbar item indices - int spaceAfterIndices[] = {0, 1}; + int spaceAfterIndices[] = {}; // No space in the default set int flexibleSpaceAfterIndices[] = {2, 3, 5, 7}; int i = 0; int j = 0; From bbfefffb25f56cb7fb829d29cf8cbad4f02897c8 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 17 Feb 2017 14:22:32 +0800 Subject: [PATCH 270/439] Added method call which was removed in merge --- MacDown/Code/Document/MPDocument.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 03200dc1..2870e342 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1415,6 +1415,8 @@ - (void)toggleSplitterCollapsingEditorPane:(BOOL)forEditorPane [self setSplitViewDividerLocation:self.previousSplitRatio]; } + + [self.toolbarController updateHighlightStates]; } - (void)setupEditor:(NSString *)changedKey From 6192294908ed4be90d7a45acb763e5d519baddb9 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 18 Feb 2017 22:27:15 +0800 Subject: [PATCH 271/439] UI for CLI utility installation Implemented logic for CLI installation from the GUI app. A preference pane is added. The pane detects whether the user has something installed that looks like the MacDown CLI utility by checking common installtion locations, e.g. Homebrew. If the util is not detected to be installed, the user can click a button to install it. For now the only option is to install it to /usr/local/bin/macdown. --- MacDown.xcodeproj/project.pbxproj | 18 +- .../xcshareddata/MacDown.xcscmblueprint | 4 +- MacDown/Code/Application/MPMainController.m | 2 + .../MPEditorPreferencesViewController.m | 2 +- .../MPGeneralPreferencesViewController.m | 2 +- .../MPHtmlPreferencesViewController.m | 2 +- .../MPMarkdownPreferencesViewController.m | 2 +- .../MPTerminalPreferencesViewController.h | 15 ++ .../MPTerminalPreferencesViewController.m | 209 ++++++++++++++++++ .../MPTerminalPreferencesViewController.xib | 96 ++++++++ MacDown/Code/Utility/MPGlobals.h | 1 + .../Utility/MPHomebrewSubprocessController.h | 20 ++ .../Utility/MPHomebrewSubprocessController.m | 93 ++++++++ .../Preferences Icons/Contents.json | 6 + .../PreferencesEditor.imageset/Contents.json | 8 +- .../PreferencesEditor.png | Bin 940 -> 963 bytes .../PreferencesEditor@2x.png | Bin 2393 -> 2499 bytes .../PreferencesGeneral.imageset/Contents.json | 8 +- .../PreferencesGeneral.png | Bin 835 -> 867 bytes .../PreferencesGeneral@2x.png | Bin 2433 -> 2400 bytes .../Contents.json | 8 +- .../PreferencesMarkdown.png | Bin 4792 -> 1139 bytes .../PreferencesMarkdown@2x.png | Bin 2995 -> 2958 bytes .../Contents.json | 8 +- .../PreferencesRendering.png | Bin 1288 -> 1333 bytes .../PreferencesRendering@2x.png | Bin 3761 -> 4026 bytes .../Contents.json | 18 ++ .../PreferencesTerminal.png | Bin 0 -> 1221 bytes .../PreferencesTerminal@2x.png | Bin 0 -> 3722 bytes 29 files changed, 491 insertions(+), 31 deletions(-) create mode 100644 MacDown/Code/Preferences/MPTerminalPreferencesViewController.h create mode 100644 MacDown/Code/Preferences/MPTerminalPreferencesViewController.m create mode 100644 MacDown/Code/Preferences/MPTerminalPreferencesViewController.xib create mode 100644 MacDown/Code/Utility/MPHomebrewSubprocessController.h create mode 100644 MacDown/Code/Utility/MPHomebrewSubprocessController.m create mode 100644 MacDown/Images.xcassets/Preferences Icons/Contents.json create mode 100644 MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/PreferencesTerminal.png create mode 100644 MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/PreferencesTerminal@2x.png diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 01de153f..df893b63 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 1F8A835E1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A835A1953454F00B6BF69 /* HGMarkdownHighlightingStyle.m */; }; 1F8A83621953461800B6BF69 /* pmh_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A83611953461800B6BF69 /* pmh_parser.c */; settings = {COMPILER_FLAGS = "-Wno-conversion"; }; }; 1F8A8364195346B200B6BF69 /* pmh_styleparser.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A8363195346B200B6BF69 /* pmh_styleparser.c */; settings = {COMPILER_FLAGS = "-Wno-conversion"; }; }; + 1F96BD801E584A03005E0456 /* MPHomebrewSubprocessController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F96BD7F1E584A03005E0456 /* MPHomebrewSubprocessController.m */; }; 1F9A14EC194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9A14E9194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m */; }; 1F9A14ED194EEE9900D1C6A9 /* MPMainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9A14EB194EEE9900D1C6A9 /* MPMainController.m */; }; 1F9A14EF194EEEDD00D1C6A9 /* Styles in Resources */ = {isa = PBXBuildFile; fileRef = 1F9A14EE194EEEDD00D1C6A9 /* Styles */; }; @@ -81,6 +82,8 @@ 1FFEB32B19737D6E00B2254F /* YAMLSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -Wno-unused-variable"; }; }; 1FFF301D1948A5320009AF24 /* MPStringLookupTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */; }; 770BB49E962A302D0715A6A5 /* libPods-MacDown.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */; }; + 852D523C1E260A6400BA7162 /* MPTerminalPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */; }; + 852D523D1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 852D523B1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib */; }; 905EF1A9196164CA00FC3CE9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 905EF1A8196164CA00FC3CE9 /* Foundation.framework */; }; 905EF1B7196164F300FC3CE9 /* macdown in Copy Command Line Utility */ = {isa = PBXBuildFile; fileRef = 905EF1A7196164CA00FC3CE9 /* macdown */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; B5C5C1666A506FEA86435D25 /* libPods-macdown-cmd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */; }; @@ -221,6 +224,8 @@ 1F8A8363195346B200B6BF69 /* pmh_styleparser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pmh_styleparser.c; path = "Dependency/peg-markdown-highlight/pmh_styleparser.c"; sourceTree = SOURCE_ROOT; }; 1F8A8365195346B600B6BF69 /* pmh_styleparser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pmh_styleparser.h; path = "Dependency/peg-markdown-highlight/pmh_styleparser.h"; sourceTree = SOURCE_ROOT; }; 1F8A837E195348C500B6BF69 /* peg-markdown-highlight.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "peg-markdown-highlight.xcodeproj"; path = "Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj"; sourceTree = SOURCE_ROOT; }; + 1F96BD7E1E584A03005E0456 /* MPHomebrewSubprocessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHomebrewSubprocessController.h; sourceTree = ""; }; + 1F96BD7F1E584A03005E0456 /* MPHomebrewSubprocessController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHomebrewSubprocessController.m; sourceTree = ""; }; 1F9A14E8194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPExportPanelAccessoryViewController.h; path = Code/Application/MPExportPanelAccessoryViewController.h; sourceTree = ""; }; 1F9A14E9194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPExportPanelAccessoryViewController.m; path = Code/Application/MPExportPanelAccessoryViewController.m; sourceTree = ""; }; 1F9A14EA194EEE9900D1C6A9 /* MPMainController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPMainController.h; path = Code/Application/MPMainController.h; sourceTree = ""; }; @@ -303,6 +308,9 @@ 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDown.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 4DBAA63927A60EB2150642B3 /* Pods-macdown-cmd.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.debug.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.debug.xcconfig"; sourceTree = ""; }; 7A8EA75FA95818275755F0B6 /* Pods-macdown-cmd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.release.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.release.xcconfig"; sourceTree = ""; }; + 852D52391E260A6400BA7162 /* MPTerminalPreferencesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTerminalPreferencesViewController.h; sourceTree = ""; }; + 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTerminalPreferencesViewController.m; sourceTree = ""; }; + 852D523B1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPTerminalPreferencesViewController.xib; sourceTree = ""; }; 8CDC5EA0050D2F722FB1AADD /* Pods-MacDownTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.debug.xcconfig"; sourceTree = ""; }; 905EF1A7196164CA00FC3CE9 /* macdown */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macdown; sourceTree = BUILT_PRODUCTS_DIR; }; 905EF1A8196164CA00FC3CE9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -372,14 +380,16 @@ 1F0D9D62194AC7CF008E1856 /* Utility */ = { isa = PBXGroup; children = ( + 1F70CCD81978F03E00703429 /* MPAutosaving.h */, 1F847BC31DCC9DA800A47385 /* MPGlobals.h */, + 1F96BD7E1E584A03005E0456 /* MPHomebrewSubprocessController.h */, + 1F96BD7F1E584A03005E0456 /* MPHomebrewSubprocessController.m */, 1F23A91F19928E650052DB78 /* MPMathJaxListener.h */, 1F23A92019928E650052DB78 /* MPMathJaxListener.m */, 1F5A370E1C868EC0006E63E7 /* MPPlugIn.h */, 1F5A370F1C868EC0006E63E7 /* MPPlugIn.m */, 1F0D9D63194AC7CF008E1856 /* MPUtilities.h */, 1F0D9D64194AC7CF008E1856 /* MPUtilities.m */, - 1F70CCD81978F03E00703429 /* MPAutosaving.h */, ); name = Utility; path = Code/Utility; @@ -402,6 +412,9 @@ 1F0D9D6C194AC7F7008E1856 /* MPHtmlPreferencesViewController.h */, 1F0D9D6D194AC7F7008E1856 /* MPHtmlPreferencesViewController.m */, 1F0D9D87194AC83C008E1856 /* MPHtmlPreferencesViewController.xib */, + 852D52391E260A6400BA7162 /* MPTerminalPreferencesViewController.h */, + 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */, + 852D523B1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib */, 1F0D9D72194AC7F7008E1856 /* MPPreferences.h */, 1F0D9D73194AC7F7008E1856 /* MPPreferences.m */, ); @@ -809,6 +822,7 @@ 1F0D9DAA194AC8CB008E1856 /* Credits.rtf in Resources */, 1FBDFEA51962A27300BEEA70 /* MPGeneralPreferencesViewController.xib in Resources */, 1F0F3BFC195F75F200FC0B3B /* MathJax in Resources */, + 852D523D1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */, 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, @@ -1000,6 +1014,7 @@ 1F23A92119928E650052DB78 /* MPMathJaxListener.m in Sources */, 1F2649B01A7406DB00EF6AF3 /* NSDocumentController+Document.m in Sources */, 1F0D9D67194AC7CF008E1856 /* MPUtilities.m in Sources */, + 852D523C1E260A6400BA7162 /* MPTerminalPreferencesViewController.m in Sources */, 1F0D9D78194AC7F7008E1856 /* MPHtmlPreferencesViewController.m in Sources */, 1F0D9D7C194AC7F7008E1856 /* MPPreferences.m in Sources */, 1F0D9DAF194AC905008E1856 /* main.m in Sources */, @@ -1016,6 +1031,7 @@ 1FBBD4CB194CA36500BB3C88 /* hoedown_html_patch.c in Sources */, 1F8A8364195346B200B6BF69 /* pmh_styleparser.c in Sources */, 1F0D9D93194AC852008E1856 /* MPDocument.m in Sources */, + 1F96BD801E584A03005E0456 /* MPHomebrewSubprocessController.m in Sources */, 1F0D9D76194AC7F7008E1856 /* MPEditorPreferencesViewController.m in Sources */, 1F8A83621953461800B6BF69 /* pmh_parser.c in Sources */, 1F8A835D1953454F00B6BF69 /* HGMarkdownHighlighter.m in Sources */, diff --git a/MacDown.xcworkspace/xcshareddata/MacDown.xcscmblueprint b/MacDown.xcworkspace/xcshareddata/MacDown.xcscmblueprint index fec80379..2b9378bc 100644 --- a/MacDown.xcworkspace/xcshareddata/MacDown.xcscmblueprint +++ b/MacDown.xcworkspace/xcshareddata/MacDown.xcscmblueprint @@ -11,8 +11,8 @@ "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "24769B53-F963-4503-96C3-3E34905014BD", "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { "9635D08B964B59C48EA8E6805E0CB50B3BAF24BE" : "c\/hoedown\/hoedown", - "2F1767954F6E41A8A969AD0C1FD6055664A8E4E6" : "macdown\/Dependency\/prism", - "D29B2AF65723D6330588EAE1AA18C06828F4C6B0" : "macdown" + "2F1767954F6E41A8A969AD0C1FD6055664A8E4E6" : "macdown\/Dependency\/prism\/", + "D29B2AF65723D6330588EAE1AA18C06828F4C6B0" : "macdown\/" }, "DVTSourceControlWorkspaceBlueprintNameKey" : "MacDown", "DVTSourceControlWorkspaceBlueprintVersion" : 204, diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 248e91c3..8be2b1c8 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -18,6 +18,7 @@ #import "MPMarkdownPreferencesViewController.h" #import "MPEditorPreferencesViewController.h" #import "MPHtmlPreferencesViewController.h" +#import "MPTerminalPreferencesViewController.h" #import "MPDocument.h" @@ -132,6 +133,7 @@ - (NSWindowController *)preferencesWindowController [[MPMarkdownPreferencesViewController alloc] init], [[MPEditorPreferencesViewController alloc] init], [[MPHtmlPreferencesViewController alloc] init], + [[MPTerminalPreferencesViewController alloc] init], ]; NSString *title = NSLocalizedString(@"Preferences", @"Preferences window title."); diff --git a/MacDown/Code/Preferences/MPEditorPreferencesViewController.m b/MacDown/Code/Preferences/MPEditorPreferencesViewController.m index e1430d1c..b285179b 100644 --- a/MacDown/Code/Preferences/MPEditorPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPEditorPreferencesViewController.m @@ -25,7 +25,7 @@ @interface MPEditorPreferencesViewController () @implementation MPEditorPreferencesViewController -#pragma mark - MASPrefernecesViewController +#pragma mark - MASPreferencesViewController - (NSString *)identifier { diff --git a/MacDown/Code/Preferences/MPGeneralPreferencesViewController.m b/MacDown/Code/Preferences/MPGeneralPreferencesViewController.m index 7ac32626..8827c04d 100644 --- a/MacDown/Code/Preferences/MPGeneralPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPGeneralPreferencesViewController.m @@ -17,7 +17,7 @@ @interface MPGeneralPreferencesViewController () @implementation MPGeneralPreferencesViewController -#pragma mark - MASPrefernecesViewController +#pragma mark - MASPreferencesViewController - (NSString *)identifier { diff --git a/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m b/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m index 430a0bd9..d03d71ca 100644 --- a/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPHtmlPreferencesViewController.m @@ -26,7 +26,7 @@ @interface MPHtmlPreferencesViewController () @implementation MPHtmlPreferencesViewController -#pragma mark - MASPrefernecesViewController +#pragma mark - MASPreferencesViewController - (NSString *)identifier { diff --git a/MacDown/Code/Preferences/MPMarkdownPreferencesViewController.m b/MacDown/Code/Preferences/MPMarkdownPreferencesViewController.m index 688ddfac..04e4492c 100644 --- a/MacDown/Code/Preferences/MPMarkdownPreferencesViewController.m +++ b/MacDown/Code/Preferences/MPMarkdownPreferencesViewController.m @@ -11,7 +11,7 @@ @implementation MPMarkdownPreferencesViewController -#pragma mark - MASPrefernecesViewController +#pragma mark - MASPreferencesViewController - (NSString *)identifier { diff --git a/MacDown/Code/Preferences/MPTerminalPreferencesViewController.h b/MacDown/Code/Preferences/MPTerminalPreferencesViewController.h new file mode 100644 index 00000000..84c3b032 --- /dev/null +++ b/MacDown/Code/Preferences/MPTerminalPreferencesViewController.h @@ -0,0 +1,15 @@ +// +// MPTerminalPreferencesViewController.h +// MacDown +// +// Created by Niklas Berglund on 2017-01-11. +// Copyright © 2017 Tzu-ping Chung . All rights reserved. +// + +#import "MPPreferencesViewController.h" +#import + +@interface MPTerminalPreferencesViewController : MPPreferencesViewController + + +@end diff --git a/MacDown/Code/Preferences/MPTerminalPreferencesViewController.m b/MacDown/Code/Preferences/MPTerminalPreferencesViewController.m new file mode 100644 index 00000000..8b9154df --- /dev/null +++ b/MacDown/Code/Preferences/MPTerminalPreferencesViewController.m @@ -0,0 +1,209 @@ +// +// MPTerminalPreferencesViewController.m +// MacDown +// +// Created by Niklas Berglund on 2017-01-11. +// Copyright © 2017 Tzu-ping Chung . All rights reserved. +// + +#import "MPGlobals.h" +#import "MPHomebrewSubprocessController.h" +#import "MPPreferences.h" +#import "MPTerminalPreferencesViewController.h" +#import "MPUtilities.h" + + +NS_INLINE NSColor *MPGetInstallationIndicatorColor(BOOL installed) +{ + static NSColor *installedColor = nil; + static NSColor *uninstalledColor = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + installedColor = [NSColor colorWithDeviceRed:0.357 green:0.659 + blue:0.192 alpha:1.000]; + uninstalledColor = [NSColor colorWithDeviceRed:0.897 green:0.231 + blue:0.21 alpha:1.000]; + }); + if (installed) + return installedColor; + else + return uninstalledColor; +} + + +@interface MPTerminalPreferencesViewController () + +@property (weak) IBOutlet NSTextField *supportIndicator; +@property (weak) IBOutlet NSTextField *supportTextField; +@property (weak) IBOutlet NSTextField *infoTextField; +@property (weak) IBOutlet NSTextField *locationTextField; +@property (weak) IBOutlet NSButton *installUninstallButton; + +@property (nonatomic) NSURL *shellUtilityURL; + +@end + +@implementation MPTerminalPreferencesViewController + + +#pragma mark - Accessors. + +- (void)setShellUtilityURL:(NSURL *)url +{ + _shellUtilityURL = url; + if (url) + { + self.supportIndicator.textColor = MPGetInstallationIndicatorColor(YES); + self.supportTextField.stringValue = NSLocalizedString( + @"Shell utility installed", + @"Label stating that shell utility has been installed"); + self.locationTextField.stringValue = url.path; + self.locationTextField.font = + [NSFont fontWithName:@"Menlo" + size:self.locationTextField.font.pointSize]; + self.installUninstallButton.title = NSLocalizedString( + @"Uninstall", @"Uninstall shell utility button"); + self.installUninstallButton.action = @selector(uninstallShellUtility); + } + else + { + self.supportIndicator.textColor = MPGetInstallationIndicatorColor(NO); + self.supportTextField.stringValue = NSLocalizedString( + @"Shell utility not installed", + @"Label stating that shell utility has not been installed"); + self.locationTextField.stringValue = NSLocalizedString( + @"", + @"Displayed when shell utility is not installed"); + + NSFont *font = + [NSFont systemFontOfSize:self.locationTextField.font.pointSize]; + self.locationTextField.font = + [[NSFontManager sharedFontManager] convertFont:font + toHaveTrait:NSFontItalicTrait]; + self.installUninstallButton.title = NSLocalizedString( + @"Install", @"Install shell utility button"); + self.installUninstallButton.action = @selector(installShellUtility); + } +} + + +- (void)viewDidLoad +{ + [super viewDidLoad]; + [self highlightMacdownInInfo]; + + self.installUninstallButton.target = self; + self.shellUtilityURL = nil; +} + +- (void)viewWillAppear +{ + [self lookForShellUtility]; +} + +#pragma mark - MASPreferencesViewController + +- (NSString *)identifier +{ + return @"TerminalPreferences"; +} + +- (NSImage *)toolbarItemImage +{ + return [NSImage imageNamed:@"PreferencesTerminal"]; +} + +- (NSString *)toolbarItemLabel +{ + return NSLocalizedString(@"Terminal", @"Preference pane title."); +} + +#pragma mark - Private methods + +/** + * Searches for the the macdown shell utility and invokes foundShellUtilityAtURL: if found. + */ +- (void)lookForShellUtility +{ + __weak MPTerminalPreferencesViewController *weakSelf = self; + MPDetectHomebrewPrefixWithCompletionhandler(^(NSString *output) { + NSString *macdownPath = MPCommandInstallationPath; + if (output) + { + NSCharacterSet *padding = + [NSCharacterSet whitespaceAndNewlineCharacterSet]; + NSString *prefix = [output stringByTrimmingCharactersInSet:padding]; + macdownPath = + [prefix stringByAppendingPathComponent:@"bin/macdown"]; + } + + if ([[NSFileManager defaultManager] fileExistsAtPath:macdownPath]) + weakSelf.shellUtilityURL = [NSURL fileURLWithPath:macdownPath]; + }); +} + +- (void)installShellUtility +{ + // URL for macdown utility in .app bundle + NSURL *sharedSupportURL = [NSBundle mainBundle].sharedSupportURL; + NSString *utilityBundlePath = + [sharedSupportURL URLByAppendingPathComponent:@"bin/macdown"].path; + + NSFileManager *fm = [NSFileManager defaultManager]; + if ([fm fileExistsAtPath:utilityBundlePath]) + { + BOOL ok = [fm createSymbolicLinkAtPath:MPCommandInstallationPath + withDestinationPath:utilityBundlePath error:NULL]; + if (ok) + [self lookForShellUtility]; + // TODO: Handle install failure. + } +} + +- (void)uninstallShellUtility +{ + NSURL *url = self.shellUtilityURL; + if (!url) + return; + BOOL ok = [[NSFileManager defaultManager] removeItemAtURL:url error:NULL]; + if (ok) + self.shellUtilityURL = nil; + // TODO: Handle removal failure. +} + +/** + * Highlights all occurences of "macdown" in the info-text + */ +- (void)highlightMacdownInInfo +{ + NSString *infoString = self.infoTextField.stringValue; + NSMutableAttributedString *attributedInfoString = + [[NSMutableAttributedString alloc] initWithString:infoString]; + + NSRange searchRange = NSMakeRange(0, infoString.length); + CGFloat infoFontSize = self.infoTextField.font.pointSize; + NSFont *highlightFont = [NSFont fontWithName:@"Menlo" size:infoFontSize]; + + while (searchRange.location < infoString.length) + { + searchRange.length = infoString.length - searchRange.location; + NSRange foundRange = + [infoString rangeOfString:@"macdown" + options:NSLiteralSearch range:searchRange]; + + if (foundRange.location != NSNotFound) + { + [attributedInfoString addAttribute:NSFontAttributeName value:highlightFont range:foundRange]; + + searchRange.location = foundRange.location + foundRange.length; + } + else // Found all occurences + { + break; + } + } + + self.infoTextField.attributedStringValue = attributedInfoString; +} + +@end diff --git a/MacDown/Code/Preferences/MPTerminalPreferencesViewController.xib b/MacDown/Code/Preferences/MPTerminalPreferencesViewController.xib new file mode 100644 index 00000000..51e29a1a --- /dev/null +++ b/MacDown/Code/Preferences/MPTerminalPreferencesViewController.xib @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MacDown/Code/Utility/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h index 623faadd..cf91cc4d 100644 --- a/MacDown/Code/Utility/MPGlobals.h +++ b/MacDown/Code/Utility/MPGlobals.h @@ -12,6 +12,7 @@ static NSString * const kMPApplicationName = @"MacDown"; static NSString * const kMPApplicationSuiteName = @"com.uranusjr.macdown"; +static NSString * const MPCommandInstallationPath = @"/usr/local/bin/macdown"; static NSString * const kMPCommandName = @"macdown"; static NSString * const kMPHelpKey = @"help"; diff --git a/MacDown/Code/Utility/MPHomebrewSubprocessController.h b/MacDown/Code/Utility/MPHomebrewSubprocessController.h new file mode 100644 index 00000000..76a151b5 --- /dev/null +++ b/MacDown/Code/Utility/MPHomebrewSubprocessController.h @@ -0,0 +1,20 @@ +// +// MPHomebrewSubprocessController.h +// MacDown +// +// Created by Tzu-ping Chung on 18/2. +// Copyright © 2017 Tzu-ping Chung . All rights reserved. +// + +#import + + +@interface MPHomebrewSubprocessController : NSObject + +- (instancetype)initWithArguments:(NSArray *)args; +- (void)runWithCompletionHandler:(void(^)(NSString *))handler; + +@end + + +void MPDetectHomebrewPrefixWithCompletionhandler(void(^handler)(NSString *)); diff --git a/MacDown/Code/Utility/MPHomebrewSubprocessController.m b/MacDown/Code/Utility/MPHomebrewSubprocessController.m new file mode 100644 index 00000000..fa010256 --- /dev/null +++ b/MacDown/Code/Utility/MPHomebrewSubprocessController.m @@ -0,0 +1,93 @@ +// +// MPHomebrewSubprocessController.m +// MacDown +// +// Created by Tzu-ping Chung on 18/2. +// Copyright © 2017 Tzu-ping Chung . All rights reserved. +// + +#import "MPHomebrewSubprocessController.h" + + +@interface MPHomebrewSubprocessController () + +@property (readonly) NSTask *task; +@property (readwrite) void(^completionHandler)(NSString *); + +@end + + +@implementation MPHomebrewSubprocessController + +- (instancetype)initWithArguments:(NSArray *)args +{ + self = [super init]; + if (!self) + return nil; + + NSPipe *stdoutPipe = [[NSPipe alloc] init]; + NSFileHandle *stdoutReadHandle = stdoutPipe.fileHandleForReading; + + _task = [[NSTask alloc] init]; + _task.launchPath = @"brew"; + if (args) + _task.arguments = args; + _task.standardOutput = stdoutPipe; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self + selector:@selector(homebrewReadDidComplete:) + name:NSFileHandleReadToEndOfFileCompletionNotification + object:stdoutReadHandle]; + [stdoutReadHandle readToEndOfFileInBackgroundAndNotify]; + + return self; +} + +- (instancetype)init +{ + return [self initWithArguments:nil]; +} + +- (void)dealloc +{ + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center removeObserver:self + name:NSFileHandleReadToEndOfFileCompletionNotification + object:nil]; +} + +- (void)runWithCompletionHandler:(void(^)(NSString *))handler +{ + self.completionHandler = handler; + @try + { + [self.task launch]; + } + @catch (NSException *exception) // Homebrew not installed. + { + if (handler) + handler(nil); + } +} + +- (void)homebrewReadDidComplete:(NSNotification *)notification +{ + NSData *outData = notification.userInfo[NSFileHandleNotificationDataItem]; + NSString *output = [[NSString alloc] initWithData:outData + encoding:NSUTF8StringEncoding]; + if (self.completionHandler) + self.completionHandler(output); +} + +@end + + +void MPDetectHomebrewPrefixWithCompletionhandler(void(^handler)(NSString *)) +{ + NSArray *args = @[@"--prefix"]; + MPHomebrewSubprocessController *c = + [[MPHomebrewSubprocessController alloc] initWithArguments:args]; + [c runWithCompletionHandler:handler]; +} + diff --git a/MacDown/Images.xcassets/Preferences Icons/Contents.json b/MacDown/Images.xcassets/Preferences Icons/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/MacDown/Images.xcassets/Preferences Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json index 4b40d852..064a6d04 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/Contents.json @@ -1,18 +1,14 @@ { "images" : [ { - "idiom" : "universal", + "idiom" : "mac", "filename" : "PreferencesEditor.png", "scale" : "1x" }, { - "idiom" : "universal", + "idiom" : "mac", "filename" : "PreferencesEditor@2x.png", "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" } ], "info" : { diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/PreferencesEditor.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesEditor.imageset/PreferencesEditor.png index 4fa0003e3f4f7c0188771d705c61892496b7ac2f..08480e1a62feb95dea328421912d23e6cacb92fe 100644 GIT binary patch delta 942 zcmV;f15x~}2g3)DBYyw{XF*Lt006O%3;baP000AeNkl`3RbpaVWT40iGM(`&_=MhUM&;^8w)`Mwa`Kf6EC6`Dx&y^ zk9hM9%wf;TISKLA+<|0vXJ_X7c6WC70ROuL78e(Po}8TgzJI*D3?~wa;CC!YFc?ha z<>mb?E-wCM5xkt*!9h-rgUJGcPYM4_;keWt{xm+ZzIb0H`V2 zrp{J~xxT(0w#eq<;v(Dlclo;~Kx~Vd78VxXmGCoyguuwi$YgMWbm1iR4J{6iL9X}zU4kp0E z!vp&I`fzr3W*z8X6iqa#lG}g@L26XowTVM``LLv0`_v88b89hBcsDG=g!|UrSc6N4fets^bOh7X> zo3>*Gl)0&SRCrPK_V%Krq(pKb9UaMRIeYq2n{6{b6PdIGcs-Lqb8|Byk%;`5FdB^t zuvv6wI~xMNMM$8TnHjviyr8?gTL4Ldq67#;QB4wD32M_W9iKlTz#xj5fFP@@t7vO$ zLw0&^dyrlydSlY`FAP5~kqPeEZ}Ax=+E@$~d0 zxpnrLfc(ZCTcA$Kw;H>`C@LyK zQ&W@lO_amKLm}ryz|3RDq-&?#1Ix?HNPZ<@Y=3MF)z#H0v74KlHUR}pamvErAaHkg zhq<{q)YR0Vs;WvZ9(S(fcbu5?B)G@3?b`%c@oQ^qxVgCjiHwhrqrJTyWo2bj>DSlS zawkwz4h{}5J3EW6t}gJ+-`?JKVAs~xVrXc{Ve{(PMaZurK0FjAKR!N2Yip~00`~X! zv466%A_YjF$HzxGjx0#8k6A55`lb_m1tupa?F&Q$_zqCG*Nu&hSXx?=wk9Vy--qGh z;gnd$a4eGu0VdLOZ3dXfiazmp+;Q>f_(zJ--U0$MktS6l?&M~lr07pg(O7DV=_>}0 zKOykdpXFM(9{31MOiV;?Z*L=BgI{gS%_q%`ajkwNf1$4i^T{9gv45ZWA4$!DquYW& Q3;+NC07*qoM6N<$f_Heq9RL6T delta 919 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 D&!Ezz delta 2382 zcmV-U39;uYx0a{ zUcI_hS662~e}DdLl2u>}lff&Yb%8peN_{6Eu%`|5Lk*7c>C-_B)QsBel8!Vchl5@EI)9)pNIMJZ7nN)OdaUya`PcSR zA2p-)Iw)aJ#Lkj-`mK&pGr%^02Vc=*LNgNb7qSn@wf`deSPcN%0L*?RD?lzOIMWG$ zC!wgmw5=9hvuxS2&YgVK%B-9G+7+;4#}02eJ!4uaG~-%dkG21hzbyUaLCz!(aoT-w zoIDWyvwsEP7!XQ8d!!w)mdA{xEoow(y_8AXryIkog%TX$!Z|?9Gl7_T#0*Xheh8=w zEa{M4HRW~-VCDfximQNQi7Cs{hi(X1IP^#phit1McUFK*O43LWS7%oU3#C69!&h8L zpK_mVEYGfhJV!AyspF%4JXySy>%^suG_mxd?SEp&wgIuq2+VEZv!RSzMC%l_*ZLv< zI$q2;xB|2j+5Ie8jE=U&n0CaHCuu1Mzcb*h061os;gmFIlyW>rZ{51pT)cSEym|A+ zzDfF$fZgE1gU$N&>&^J_<1_tb6{O?q7|ciWi;Qy*LEZv^C4KekRdf3EY4hsUtIXn& z1b-5I_UxI}<(L>UeNhGsfSed~=n%Hb1wVpYfJsQde3O#AJo@I%n^p{8oK@=k{8QE) z*x3T1fJ}DUv}tD3rcLJ2qetlqXl-pZd-v{5UG(qY-@JbP+KwMQcwqJLl^bS}TPjul zm!N-%Wy3&Adr50wv16wJ2rL8UIhinFf`7q9*tTsONz>HSWJZh_VU8U;W_egK4<9}> zBS((R_0QPA-37U4fSd_UW6V8y|Neb*>eMNlGm>AjWQiF)dbCr+ojZ5z7&ciz8L*_O zFL{!tyb|m*07c0Q4q3RQslyrDvu975@XVPrZSkWVMD{ zSklz51Un6Y0|t$8hFQ3F?V7oC>5^5)9$&O*k!=RH0KSGM+`W6(k}QUCh^d!{<*Z9O z&n6`MFT+HW$;c%0Xe6;~*RC{1^7XnIGGvGy<4eck!-uCbu7H%05TSU`rH-`gO4?~a zQOD=boin#@-?nCb`t&gi7A#251%EV0o&(RHKR5VgMm7|NvOv<*fe+BYxB$eOw!#WN zoGrk>F*x~Y$?V_1KMgs5{`~YOHSST_04QP`z&C+3yu8bAzM>q{Q!O2AnGMFJc> zdelA%A}H?p^XAR739=Yq-1a1d8lYz!KFE`~(IEA<$p_a{P=MW z&BBEXO|M?PoEd^p-wDtFfb=J6E6n+zF0uBNW11-{v;`ROz<~qi!-o&nDGs_>vu35U zPaPzQ12Os4IStNd0mxVcG3|)SCnld5d|u#H3eFY?IYB`Dyo|$-fZHB!cTAL+a=8lb z-Mi-;V$=neG;JkM(v)`vc7GZmgMii-0^*^EFmBv9GkyB>vgD`Yu@>o1En38r3 zg-q&5TIziXyK}~MuFe)<=ZT>V`p}_6_AwS?Jl)}qk4b|U0@&c|GXPdm@-H-l zcLl~FhFsDZR~ww?0DlCN34lhz`2LT8cYV$rpVEM{F8DwL2++g1!8pW_lLn5tqz(NS z#ksdZIK%Tk{y+hkGG&UHIB{b7cnThq2Au`+RtO!O0|44)6)SbDf%-r*I}6ShfHNiq z`o@hL>AOB=eevSOjvTsN4bb-ibo4ucJ_uvRwEmhryr6zD*z7h1;^R5XUptx|K7N9W6DP&NEm4IkSj?nJlT4{p^66S$eSN+Cs%z=erOqBj^LS03JlXW^+c(n(Vqpd0MG64B zl`B`8L4yWm+E4%;=rR^?XP|5gtX;d-`7%>FM=&-DkAKEY0z3fa$se!mJ|$oJpdK*p zF1VnFrtRLn+tONJjuC@@>tj4AFG@QNU_p6K7!;VGX*4IR_$(XQ4C?r>j0L$K`)u-f zWp{x*hmfJLtotuy)baVrlOaj^X7jYZ^q*H$5t*|BVhnwS(T*}=@+FRuNgW?8dD3?! zbnr<~27eb$Jmz;c`^F*;nVFdUfCg-7nse+!nz{IV zV&9C@o-5SnE0*UpKqnmIgvt7JnJ96{KZ~Wl&qrrh^S=9ki(@S|Bv*ZM`PXGvxBTnz zhbOsq6piAY+u_%fW7RY1Km)$FnXh_Rzo`I!1FUef5tcd7bN~PV07*qoM6N<$f?&0u AumAu6 diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json index 25e93f6c..71d7b428 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/Contents.json @@ -1,18 +1,14 @@ { "images" : [ { - "idiom" : "universal", + "idiom" : "mac", "filename" : "PreferencesGeneral.png", "scale" : "1x" }, { - "idiom" : "universal", + "idiom" : "mac", "filename" : "PreferencesGeneral@2x.png", "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" } ], "info" : { diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/PreferencesGeneral.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesGeneral.imageset/PreferencesGeneral.png index 2dad7b31e952f07527e3e0de0e75a09788eac1cc..827da27fa2fcd1af0ee9c4dc162143a2730208a0 100644 GIT binary patch delta 845 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 Hu0mjfP%o`N delta 2422 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 MXkO7MQ?m~HKW#p2&Hw-a diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesMarkdown.imageset/PreferencesMarkdown@2x.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesMarkdown.imageset/PreferencesMarkdown@2x.png index 81beac3f7e4755d3f3564eb9aa1539b001253ed7..b41da2d7c589b99eeec770789bae3a4f5a9c4686 100644 GIT binary patch delta 2952 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 delta 2989 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 diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json index 5d463828..a9c681fd 100644 --- a/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/Contents.json @@ -1,18 +1,14 @@ { "images" : [ { - "idiom" : "universal", + "idiom" : "mac", "filename" : "PreferencesRendering.png", "scale" : "1x" }, { - "idiom" : "universal", + "idiom" : "mac", "filename" : "PreferencesRendering@2x.png", "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" } ], "info" : { diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/PreferencesRendering.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/PreferencesRendering.png index 164fdc56c2d3b6d1507ac040d3750c532781f333..e2cc4bb72a0e77162c1eda114f8c811ed1f41ec2 100644 GIT binary patch delta 1315 zcmV+;1>E|G3bhK5BYyw{XF*Lt006O%3;baP000E+NkluKtepZ*+idON=x&Hnte1!f=!@MDBKl~!gSZQdMwxk+<=^-bKAF*byor$0jJ70 z77-gv>q$&4oX5}Ui!dt*sIbuLZ9`Y^1iIQ^g{nr@PR&*XT?uUT-uX5R1LuDk#*8+O z-p+?`bkFnHG;*nEW@vR~S4F*K=z71YP;i0iv(dfH^!-r47lhN?wrL(NQDIGNtur>cvPG&V+ z{Pi-9?|(aq<&_e74Jc@bA01>kK*uUTBxqdefIy3aoKax|USWYh51ULdt6lx;i zM1cEGZ+?jbkv@o46LcN$mUclPqau}`kBG2w*;FBx8zGcc2q_)Dihx-3ApW}a@y;Sp zP2ii^Sv=U>i$Yd{Ki>vlp%va@1dU|8k&H75v429X)I^Plm578^LTksvNPqp6O~Aq9 z$ktSZtiZwrlvpqk6kD;B))7$~2~dV&k@sQ~JYFxQ!GgF#k5e%Rq^K1Gz+wVQa}?HG z(k9>>YsPdX;N*%ovlzK1n1uk$yhLCMjB*1ElZa3njEYPt$pbkeyhNM%jUx_JrLZJ= zNq@C}Z`Eo{R|2HICaf5=B1qjaAWI=E7bp#(Mr4a#_=|psiVWTI!><#pPDHF#B0$a8 z4n0$b72anT-?k%At?)!wCvJVej3b9Spe>5<7bps{f`%*=Bt_dxbY)$Em<OJwMv%K zlBYCfsRg1am_E$iOdx#nxpi2K?Mk59IFI-4iQ>uLW{iIFC&G$EcK}czqs2RPW74s# z5E&+6{OyHF=fYG&m>s(T@z_B`W4m`ofSEcX%QDWq(S@KljV~_TfM22`7N%-8$bT@A zC?$YZsx_fSK}qu9+J)=LG|0IB%(IXrF5LAuYfTa0;;U|}oH79xq(80%9Pb^4>Tf2(1~|8YKw!-~=h!+%9UY#p zc8D=;0+~$4!Qa%=?}klt^_&ofhlg+Ha=H8J30fnt!JCTb3o=jerP(V7T4x zbAdqMMVXxs4h{}Pqft?o<-6e@x~@wL3kyf)=jY#-nR!o7kC;p*cQ~hrfY5^bN@CA( zU#qas+1c5{GKZa_P^*1OzgB=weIm}pBw>7fyfVEzf>gUvY12nWMk-oPPfufNYO1si zl@y$eD$Q3Ln}3*?K-H{cC)_Ft@4ac7TL8-e?I%a70$|6x0kFsIzFgNHxBE&Yssdn! zdr2~#z}cH8@q6-12*nuuq#SaE(bX`711)3l`gh z!>_`x2*e}>4L6_=fPha%xU(0Xo?a||_bD!2yNpLi-z$M&*7iF5Eb`A@!pi0C-Cy59 z!pLCw&=}H62AfDjfCnx#p$;L)h8I>o4Y!d--@q8C%3*ot_>OhhZ_NPW8wt!@{Tjmu zM-kI*Lw~bmVjm*M5xA+<*Jv(JI%So$DgZ`nM}YgF*o@dJ zm49C=h+I}dF6Ti$r=U=fkuLys79Gj7hn)GyaULkrpe!Jh&>%H-Z7bdTN^$I_{>rgtH2O1``RHf(Jb5a;1dc9M3_?p#%L)*DlouWu7k^G( zK+fw$+p%b=6f+5XO$Jjn0<6qN&Q@PvkJsM};em&aN<0QkND93)?)|;gY0jI)N~4*)}c@cFO0kJ_|pkoIkSrIKmP+#+(3Yo8k;0E zAEgh{+bsySg+SNu5&@^Z{ah6QGj88a{C+>wgDN5~=TI0cY&qd=qI*9SMS;uZ+B(LS z)~O1>-g`E7-Us-d=lH*b&*v*O9xE3ofpUA+tqFh)#_o9m=QF?WCAO~Jv+losE$6>9 fZF`~q&(Hk@H4xET7%nDd00000NkvXXu0mjfMyXYP diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/PreferencesRendering@2x.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesRendering.imageset/PreferencesRendering@2x.png index 59c988f91efa5894c0e93c97d5e0a8e7792c5df0..fcd1526029c14f0384efc4ed034fa0b646430762 100644 GIT binary patch literal 4026 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 literal 3761 zcmV;i4o>ljP)Px@Ye_^wRCodHT5XJ+RTX~Tnc11y*=~2YyZzXHQ0Q)H>qnvjf>aVwBBVe}Pz+*- z7$bxbQ-1hIei-8qB>n;;fkcUj{vjYSZ7LDJ2uV#;RMbK#>_SUROG~#)yW5@5cgE+r zGiQ6b%?%Y`_7K=Z)|Ni^GA1U%gWY_lX+w+-B z25}sNS>PP=2R|D=bTBmNY;^kfEJnY^rk_Zs)2P*IxcAbc zPAoJ^q0;}?Yx%6=0I-E`vCedgNGE-r?(fte>R*h!vO&cGpy;1X2KXr@WuXCT^UGr8 z{d?anKDyGv4nr-l)kK4X32!tj%On#+)skYw&jZOjgwA+sU3yo3B&6 z)-|KH#u+vJZVK4NVyTpeh<4IpMoP|jqn++uNdJ7gtk0xNM_)pb2$^`fV(; zC+ye#i2!J4fZBY7=aRAZQn`qo`|riyPdtjj-ac#?8o~P2Bk0S09KG3IbWt#_Orcgj zh2r!WUO03cX8v;$s|T;g`J1*Qm+LlFj{0L8Z&U(4uj@nrgvvT0?)NL=PwamPPaL}s z=damKMNH?<>%|vL9D`-?^AUfgtqI@piRwDo3Fp%ByrB$5+y-n(=guwCS{fuqn`V-htC7F#S0NVpT>s z<_5_cxtc@$jWL|JWh=TWCA|Enhve(5vu2Oq<^=dJ5dfA>qCRf}T3e}H!ox2;g3pXz ziT%ab5S6=;srC{CIz`7-n_1Az1_Q#fKpBv7&J!G$1q6**kX9zt$k%d6RXAaejA8R9 zuEfz@51=?R^A?+Ai;7Wq!GDPWuw$^OA8iA`=uiIfONU%dWPI6Qq4=`x*RH4w7p-T;JV7Br_pYge$mCuIij_IbJ0|0-#FBj!$BUyTZipcVK8_%RKJC z3mM=8qIF^Kp(EI|X(Ohmbu4B2(qXHqy7qlK+5#a>030v`A>%+0K+J%c`+iKv;+FHy zSvlTvxayYpcS*tt`h@bibSP6MEJzq+fsP9V z0i>*GXnHUccy!OsuF&xe4=!C@sK*@Afj}VWaD#lE3tU50K$oiwj`P6}(OdV@5wF5OIyXDt86} zQzHl!UT5e`Ob7J!iZSOQM~*XNxEnN|18T&D3nOcT&jmba(+QqBx#l<-e)lU)m67fr zew*{5eTe`F(G-+^oA|-*e!NKl($NxBYZ0C5ay8}xR?E?80;0AG=XIKnX82B^-W?Gn z29a4$H#r4pW|<(ATMHleej?|b7a$F{ND?hA6snmN%BKjx@?jTUJFv-l@uF4|0}vu= zibVy$#+8FO{8|y`tzX4Q;h4_SX*yixbf}WA5{NSSbQib6JQp>t`VHFWws>Z;3`{X| zA}xFZLD}F|e`Z9LPS=DIsh$v(GUTKFUYvY+4Czf6|8GY5tbTjITc!OJ4 zoi!#%b=H^}5VtZwyt1KQY-K@FS-?fpWdbQds52W>8x=ketXqWxyZ54J+g839$MmNrLk@=r(*=bIWMPM&dySSFx{;2Y5p3G z&l0W@1Z4r}d~bK(Oe$`7g)4b--o846~rfh!cpqC_$)~(k=@$|D(}Wc;UCt zqVUzr(7$ZpE%QIL%dQgvV9w8lu(j)_X*XQIiYLJ-JoD!R1fdyq=d`6iqhF=N7Jau6 zTJ$Y5PBZKiV0ugPuvxu`%$1b`IS9xHyXqAcj? z>A~GUT!yjdU&X=kV|+l;*}fTdIjiW`w552Uej@H znYR;*l(Z{L&0Q;!|Tj)(q=&0E&sg01UNNM})-q=qS0M%yilWOcTo&)}S)(9~+;>)3v$^83N?(svC9f*LB&#aWw9u*DFP4oq&(&{jl50D@ zuOKOJ$Qo^@uU(%xC@1AyI~nPcobPlyIls+#qtfB?x_(zPK!eF(8`OAnBJ7tzD%Ky$ zH+#?g5AP4{*uj{ZRItTa; z_65eCRnS9va>DmWwE?JYY{`dW_#TB9<*5)zFV0r&geQZnqNc{f6>jO{U bdkFj&H;+I;4Dd-700000NkvXXu0mjfA{k37 diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/Contents.json b/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/Contents.json new file mode 100644 index 00000000..2208d916 --- /dev/null +++ b/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "PreferencesTerminal.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "PreferencesTerminal@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/PreferencesTerminal.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/PreferencesTerminal.png new file mode 100644 index 0000000000000000000000000000000000000000..64a4fe64da75689011732c0240937d6de0045b75 GIT binary patch literal 1221 zcmV;$1UmbPP)bLO5S{nzHm;pCaViK#C|PBd6%tv}ZPi`>0n3U%!Ghld zgzP9Q6eJ{+wyQ`LT~?8TsGU@4X;aC5k8{r4dGE%Jh+3g`!F8Tz?tGq^x$nki|Mykw z?(TkmczF23WHMQ=s;Yb+4JpgAT3uazvazvor_1D9TU+bf+uM-8m;A;;_xJbL4-O7~ z?6UIB&CT-o`1sP|>$x85b1@p$~U{_kWzUjTD=8EI!{=bZxn z7f!|U@{0FU(a5r$AqqZP9P-Ojhy7)CW?hbNI9$EZlC!PqO0%ZHd13j;rz54Q%^?&JG zQMc`U`t4t`Mo$2M$jaN>gCOsHoGyi>Dtt0qp9^C zUbEig1tnubJ*=)wz!HH*GF40?{MFU@*VdY12#bZAl}yfH90U2+U!2*}&r5dY=!&g; zKeX<+3q5tNcSqQFN<0}w4EmR(i5Cr?I{3H^Xp$p3z(Pq1G}eF6w`X@xto$3T>X|K^ zUUlHm!;pn)$%jt9lYhgLVV9D90idbtCO+v&kR?M5hsEEPZ1~;Ks>RACUyto<>#RY` zc=4R8UfuAjqLb<>5_`q0zU3)vI^YJvf#`tUscqrug7u#Ctbf06r?*e7|Hpt}v7%xE ziNh4Ml_6bY&9M_SJ5VD&^YLuB0W7KH-1uN;E(uWuw9?Jf{~Bx0Nfcu$48%c>X*(LI)s< z5l9Oi7nAdVC`5|jSF=~{RuLLhY#7F#fha@U`H2yw3rQp3+;{-j7C5owljMr`P%6>VRj}MTOb%CwZBaOCFe{d z+JSf0_X3!Hq%be{#ptuqPo1)JOAfHtqBB;0H%O4=;{WZ7)ukmcvB~5FFso+w81e=l j{O0-~>-7i8nkW4S0pfQ0vfCsu00000NkvXXu0mjfMI}?7 literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/PreferencesTerminal@2x.png b/MacDown/Images.xcassets/Preferences Icons/PreferencesTerminal.imageset/PreferencesTerminal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..019db94a2b92d26dee1c64ec720085c43c9da033 GIT binary patch literal 3722 zcmV;54t4Q~P)v@j-m?fAFCd5eAB&^hIbZB3{5tt<|E?Vu#Y!Nya*vq?41Jlf?D=t@Yb`e_zgc zI=xVs&hDJE_Fk9Yy6m<0_hm9o>E^guftwZhFjt_XRy?y)c?(V$! zHxgY~SQsrYFJHLz)?2@S?%cT_BR3Y{i6@@;$>!$f*B*G_f&Q5@XVTKr(%Z`W=;$bQ zI-LYMZAb=+(bjLvr(x8*>$Pv|zxCEz>B5Bz>DgzWovf{`oqzb@hac*kKY#v_S6_Yg zhmSt`XusR-ro+QSerm_pnqO}MZJc(1v+&*v{a&xf{2qV&@yYu7`eXe!-+c31XV0GP zPbQOgd^6YWfZ7J_gxdPEpY0I#d40PIfw*_ls*8WbPKAn(ze>55m=jZ3y7PB0-0cYu7ue^=lUe^ggHVeOP zU+WJBgM{4sP}1(ta?l2xr9Vsle&fx;hnxk#xp*hzdJ}B>c(?ZN1s)4vXMtEBbU+`3 ze-_}Wr=DsT^Fy=7^*jA7=0j2fcEBBX+&MMfchZta?{hsn{_;9C-s@$)^2)#b5=5fY zM*Y~396SvbsE+A+0&L?8?^^N5ujnjaZG73)lpXN@9M-ZrKIuc>6B;I}#ei2=+LEOXmsB~3X@ zF8yS_SY*dg8u=76o?_ z)}wnyseiGT`ftn;46TL2sKwm5x83IVHjg<(XlvhH%XsYsm8fW=gUlA4#UiPLn5)GM z%5gmYE@H&Fu+jDho*xd(rVZg)nI^YS($)K~rqLJo(&6eMgF!$5)dz+1;AL2W8jIZt z3cD#EY#R95Jja5aaDARp35b=0%eVBorsx{>X4&chhpyXwboVIjJh+_>hllhtI=!1l zU)W89f1XH7KR=mz+khw)#ylrs&M5-LFtx5Fs2u?-=fJruDsadfBky#B%ecg$ZRl|h zLHM^aNG(%#02KY>$_NUdy-)6?E9bV-k!cNoGfe$U{WSmld>XubBJF=_KV5m~N=iNG zb}eaBf?eF`?m-Sg+jH%Te7igcokJ`W6_(u-m8J!tS6oABK=!rV6Y%-0bgtZ3dDuVbt0#Ja!+tb?=yo0ra)SYzF;H3eU78D7C zTY6?G&298kcdwTdbDheetLMG<4ncAuKoXd<^0Y1swJ{Qjd01uQN%)gPI!cUa;mAB@ z8%@OX0+`$x0mjFRb@z5JjXye0FcR zS41`pNU_3gRRrk}A#|i~l{%`GH4pieLN<;7f~!BnKQ6K`m%nj2UHR&jbTp5P5TMfs z+7g59>C;wi+_w1eqry7`_Xy(5)B&vngM~cfDG_IwA;(ios*hl^kBs5ja-apRlN0 z;BySF@4M_w?*IZBRQ)O%0boaZqn;IEG3|bCH_iWcF?IL5Y5VMU+P!O(2CrXDi+?y7 zE=-xN7XdIZ%;6XV37|D=IruKu?t_wRY;+^*Kozs4(A(SN^|w*#8;&pn!JxyxTq>3b z$&p+;DvliB6rbvh;`weyU3)1&F;<>lq1E0e;xP!oytP~iH7H1UC9UVKg2x?(9(&Mt zUWErAvBXo$^`QrTP$^LAI$$Y0LIgYRfLOsGrsLD&wDpzCX<+Ak`B%q(Ro36^yDDFV zDtkID&SFWzy|5g$!`=z7_3h!ecFef#$FlEkv1dZ9dw@Iu5e#1i-xf*_Q;uc`1W-OyB-A?hH7K%e=j)ea9teGmkC{ItQJ!^2|!Q{NPsF{N`pF z{(Z=w2lnsWPaAh{usFS)UOM^vrCb<*9N}sPSl$Xo;<(wrJA+C-W zo8W+slqQb+J zfdtRUF?&;KUV@AeUp^SD83u&4{g4R&7cC!JL9LzREe`>$|6o1yHEAa(zUZ`Dzdj;e zt2^6R0hyr}6fs7zqG-UxSy$5ZVa-&Tk`oR3>;O6puMk&L zYTK7wYVAq+sszAHUAvB8#$zu#ROVh)!%-mc9vLZC<{~*XG52-5<9MVfE&9;`Zj;X( z0E~^bK4(fGc_qPUp5^On@vIc!Wq8qe0_Y?tF@~ z5ALXC2%*FJuf+ga|DPFhbR`Bg9^iG1CMr&3^hI~_iI6OL z`w!Ihbp#?<33JOtJLZ;xQ{BQy0Ts)}BmnXt-YHS8z z%4{dBL!;rub{K;xg@WYpQ@`nfU+x^)xivw61B|GNa7c5)(gc>r=DAgTtB#5m?*Sf} zf??+~mayM(XK_Cvq!nIp{k+%J|0UcojJ4j4bn(igT- z`-4{ZBHO}LazRiSPayt2falmNBqvxoc%h*|@I1GP+`9lP4**wA*)AwLzXGs}*LX4b z2;{Dz&=`Tm=&^>bc($Tx*h>_NK^v;G^2tYl`e6VU7%-;0@Znqte1__B_mLQ;(8n=~ z_#t#2^jeTQ6 z)O@;}_Lhw7l?$jw+yPoPsT_$?T5O{`z;LD)&N`sdX|#9<3QvkbkuY_tglt;-Z_jy0 z2p1H8VvTrp)){*X3%o`LPzhg(t37Y6ONAjYGq!jHP-D2*b^txdY!3gp z12hx^@XS_4hd9qeopN(r7lfM`ay?OCr_t}v^~d{r`*SDe{r7y0YRS2@jY#w~&nT#iQgNJ|q zanEpZ_<|K;-{x?8!+wyX<@&tkc$a+!s5w6Pryj$gcxZ!nBMxjVev}&92mjz(2w1Kqbg1&12)fB*mh07*qoM6N<$f-{OVga7~l literal 0 HcmV?d00001 From 8e263153bbb157810035a73a66fa8524fcf8c56a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 19 Feb 2017 15:53:52 +0800 Subject: [PATCH 272/439] Fix string manipulation on Python 3 --- Tools/build_for_release.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Tools/build_for_release.py b/Tools/build_for_release.py index 401b6426..6ae3cb01 100755 --- a/Tools/build_for_release.py +++ b/Tools/build_for_release.py @@ -81,9 +81,11 @@ def main(argv): XCODEBUILD, 'archive', '-workspace', '../MacDown.xcworkspace', '-scheme', 'MacDown', ) + if isinstance(output, bytes): + output = output.decode(TERM_ENCODING) match = re.search( r'^\s*ARCHIVE_PATH: (.+)$', - output.decode(TERM_ENCODING), + output, re.MULTILINE, ) archive_path = match.group(1) From cd4228c248625ada3ed124ba28a8e9be44f6b182 Mon Sep 17 00:00:00 2001 From: Bruno Philipe Date: Fri, 13 Jan 2017 01:01:45 +0100 Subject: [PATCH 273/439] When opening new file, makes sure it is created --- MacDown/Code/Application/MPMainController.m | 2 +- MacDown/Code/Document/MPDocument.m | 79 ++++++++++++++----- .../Extension/NSDocumentController+Document.h | 2 +- .../Extension/NSDocumentController+Document.m | 11 ++- 4 files changed, 71 insertions(+), 23 deletions(-) diff --git a/MacDown/Code/Application/MPMainController.m b/MacDown/Code/Application/MPMainController.m index 248e91c3..e3d80d0b 100644 --- a/MacDown/Code/Application/MPMainController.m +++ b/MacDown/Code/Application/MPMainController.m @@ -251,7 +251,7 @@ - (void)openPendingFiles } else { - [c openUntitledDocumentForURL:url display:YES error:NULL]; + [c createNewEmptyDocumentForURL:url display:YES error:NULL]; } } diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index d0b46d0c..6bb192b8 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1664,12 +1664,18 @@ - (BOOL)isCurrentBaseUrl:(NSURL *)another } -#define OPEN_FAIL_ALERT_INFORMATIVE NSLocalizedString(\ +#define OPEN_FAIL_ALERT_INFORMATIVE NSLocalizedString( \ @"Please check the path of your link is correct. Turn on \ “Automatically create link targets” If you want MacDown to \ create nonexistent link targets for you.", \ @"preview navigation error information") +#define AUTO_CREATE_FAIL_ALERT_INFORMATIVE NSLocalizedString( \ +@"MacDown can’t create a file for the clicked link because \ +the current file is not saved anywhere yet. Save the \ +current file somewhere to enable this feature.", \ +@"preview navigation error information") + - (void)openOrCreateFileForUrl:(NSURL *)url { @@ -1679,25 +1685,62 @@ - (void)openOrCreateFileForUrl:(NSURL *)url { if (self.preferences.createFileForLinkTarget) { - NSDocumentController *controller = - [NSDocumentController sharedDocumentController]; - [controller openUntitledDocumentForURL:url display:YES error:NULL]; - return; + if ([self fileURL]) + { + NSError *error = nil; + + NSDocumentController *controller = + [NSDocumentController sharedDocumentController]; + [controller createNewEmptyDocumentForURL:url + display:YES + error:&error]; + + if (error) + { + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"Can’t create file:\n%@", + @"preview navigation error message"); + alert.messageText = [NSString stringWithFormat:template, + url.lastPathComponent]; + template = NSLocalizedString( + @"An error occurred while creating the file:\n%@", + @"preview navigation error information"); + + alert.informativeText = [NSString stringWithFormat: + template, + [error localizedDescription]]; + [alert runModal]; + } + } + else + { + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"Can’t create file:\n%@", + @"preview navigation error message"); + alert.messageText = [NSString stringWithFormat:template, + url.lastPathComponent]; + alert.informativeText = AUTO_CREATE_FAIL_ALERT_INFORMATIVE; + [alert runModal]; + } + } + else + { + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"File not found at path:\n%@", + @"preview navigation error message"); + alert.messageText = [NSString stringWithFormat:template, url.path]; + alert.informativeText = OPEN_FAIL_ALERT_INFORMATIVE; + [alert runModal]; } - - NSAlert *alert = [[NSAlert alloc] init]; - NSString *template = NSLocalizedString( - @"File not found at path:\n%@", - @"preview navigation error message"); - alert.messageText = [NSString stringWithFormat:template, url.path]; - alert.informativeText = OPEN_FAIL_ALERT_INFORMATIVE; - [alert runModal]; - return; } - - // Try to open it. - if ([[NSWorkspace sharedWorkspace] openURL:url]) - return; + else + { + // Try to open it. + [[NSWorkspace sharedWorkspace] openURL:url]; + } } diff --git a/MacDown/Code/Extension/NSDocumentController+Document.h b/MacDown/Code/Extension/NSDocumentController+Document.h index f0ed7ce5..8fcde867 100644 --- a/MacDown/Code/Extension/NSDocumentController+Document.h +++ b/MacDown/Code/Extension/NSDocumentController+Document.h @@ -10,7 +10,7 @@ @interface NSDocumentController (Document) -- (id)openUntitledDocumentForURL:(NSURL *)url display:(BOOL)display +- (id)createNewEmptyDocumentForURL:(NSURL *)url display:(BOOL)display error:(NSError * __autoreleasing *)error; @end diff --git a/MacDown/Code/Extension/NSDocumentController+Document.m b/MacDown/Code/Extension/NSDocumentController+Document.m index 266c8227..906181a9 100644 --- a/MacDown/Code/Extension/NSDocumentController+Document.m +++ b/MacDown/Code/Extension/NSDocumentController+Document.m @@ -10,10 +10,15 @@ @implementation NSDocumentController (Document) -- (id)openUntitledDocumentForURL:(NSURL *)url display:(BOOL)display - error:(NSError * __autoreleasing *)error +- (id)createNewEmptyDocumentForURL:(NSURL *)url display:(BOOL)display + error:(NSError * __autoreleasing *)error { - NSDocument *doc = [self openUntitledDocumentAndDisplay:display error:error]; + [[NSFileManager defaultManager] createFileAtPath:[url path] + contents:[NSData data] + attributes:nil]; + + NSDocument *doc = [self openUntitledDocumentAndDisplay:display + error:error]; if (!doc) return doc; From a95b85c16267d11ec435e708847197ee6ef1f2b4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 20 Feb 2017 21:13:53 +0800 Subject: [PATCH 274/439] Flatten -openOrCreateFileForUrl: structure Use early-returns to reduce nested if-else structure, making the code more readable and easier to reason with. --- MacDown/Code/Document/MPDocument.m | 108 ++++++++---------- .../Extension/NSDocumentController+Document.h | 4 +- .../Extension/NSDocumentController+Document.m | 4 +- 3 files changed, 54 insertions(+), 62 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 6bb192b8..8b700cad 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1679,67 +1679,59 @@ - (BOOL)isCurrentBaseUrl:(NSURL *)another - (void)openOrCreateFileForUrl:(NSURL *)url { - // If the URL points to a nonexistent file, create automatically if - // requested, or provide better error message. - if (url.isFileURL && ![url checkResourceIsReachableAndReturnError:NULL]) + // Simply open the file if it is not local, or exists already. + if (!url.isFileURL || [url checkResourceIsReachableAndReturnError:NULL]) { - if (self.preferences.createFileForLinkTarget) - { - if ([self fileURL]) - { - NSError *error = nil; - - NSDocumentController *controller = - [NSDocumentController sharedDocumentController]; - [controller createNewEmptyDocumentForURL:url - display:YES - error:&error]; - - if (error) - { - NSAlert *alert = [[NSAlert alloc] init]; - NSString *template = NSLocalizedString( - @"Can’t create file:\n%@", - @"preview navigation error message"); - alert.messageText = [NSString stringWithFormat:template, - url.lastPathComponent]; - template = NSLocalizedString( - @"An error occurred while creating the file:\n%@", - @"preview navigation error information"); - - alert.informativeText = [NSString stringWithFormat: - template, - [error localizedDescription]]; - [alert runModal]; - } - } - else - { - NSAlert *alert = [[NSAlert alloc] init]; - NSString *template = NSLocalizedString( - @"Can’t create file:\n%@", - @"preview navigation error message"); - alert.messageText = [NSString stringWithFormat:template, - url.lastPathComponent]; - alert.informativeText = AUTO_CREATE_FAIL_ALERT_INFORMATIVE; - [alert runModal]; - } - } - else - { - NSAlert *alert = [[NSAlert alloc] init]; - NSString *template = NSLocalizedString( - @"File not found at path:\n%@", - @"preview navigation error message"); - alert.messageText = [NSString stringWithFormat:template, url.path]; - alert.informativeText = OPEN_FAIL_ALERT_INFORMATIVE; - [alert runModal]; - } + [[NSWorkspace sharedWorkspace] openURL:url]; + return; } - else + + // Show an error if the user doesn't want us to create it automatically. + if (!self.preferences.createFileForLinkTarget) { - // Try to open it. - [[NSWorkspace sharedWorkspace] openURL:url]; + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"File not found at path:\n%@", + @"preview navigation error message"); + alert.messageText = [NSString stringWithFormat:template, url.path]; + alert.informativeText = OPEN_FAIL_ALERT_INFORMATIVE; + [alert runModal]; + return; + } + + // We can only create a file if the current file is saved. (Why?) + if (!self.fileURL) + { + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"Can’t create file:\n%@", @"preview navigation error message"); + alert.messageText = [NSString stringWithFormat:template, + url.lastPathComponent]; + alert.informativeText = AUTO_CREATE_FAIL_ALERT_INFORMATIVE; + [alert runModal]; + } + + // Try to created the file. + NSDocumentController *controller = + [NSDocumentController sharedDocumentController]; + + NSError *error = nil; + id doc = [controller createNewEmptyDocumentForURL:url + display:YES error:&error]; + if (!doc) + { + NSAlert *alert = [[NSAlert alloc] init]; + NSString *template = NSLocalizedString( + @"Can’t create file:\n%@", + @"preview navigation error message"); + alert.messageText = + [NSString stringWithFormat:template, url.lastPathComponent]; + template = NSLocalizedString( + @"An error occurred while creating the file:\n%@", + @"preview navigation error information"); + alert.informativeText = + [NSString stringWithFormat:template, error.localizedDescription]; + [alert runModal]; } } diff --git a/MacDown/Code/Extension/NSDocumentController+Document.h b/MacDown/Code/Extension/NSDocumentController+Document.h index 8fcde867..00a8f5d4 100644 --- a/MacDown/Code/Extension/NSDocumentController+Document.h +++ b/MacDown/Code/Extension/NSDocumentController+Document.h @@ -10,7 +10,7 @@ @interface NSDocumentController (Document) -- (id)createNewEmptyDocumentForURL:(NSURL *)url display:(BOOL)display - error:(NSError * __autoreleasing *)error; +- (__kindof NSDocument *)createNewEmptyDocumentForURL:(NSURL *)url + display:(BOOL)display error:(NSError * __autoreleasing *)error; @end diff --git a/MacDown/Code/Extension/NSDocumentController+Document.m b/MacDown/Code/Extension/NSDocumentController+Document.m index 906181a9..f9b5f8a2 100644 --- a/MacDown/Code/Extension/NSDocumentController+Document.m +++ b/MacDown/Code/Extension/NSDocumentController+Document.m @@ -10,8 +10,8 @@ @implementation NSDocumentController (Document) -- (id)createNewEmptyDocumentForURL:(NSURL *)url display:(BOOL)display - error:(NSError * __autoreleasing *)error +- (__kindof NSDocument *)createNewEmptyDocumentForURL:(NSURL *)url + display:(BOOL)display error:(NSError * __autoreleasing *)error { [[NSFileManager defaultManager] createFileAtPath:[url path] contents:[NSData data] From d98738e8c8da00649b9acf8001279349feb9c6f4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 21 Feb 2017 10:04:20 +0800 Subject: [PATCH 275/439] Remove unused title in XIB --- .../Base.lproj/MPEditorPreferencesViewController.xib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib index 4a3c60b9..01316996 100644 --- a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib @@ -69,7 +69,7 @@ - + From 7651c50f443e6533658a4eedd22121918843f9b0 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Tue, 21 Feb 2017 13:37:39 +0800 Subject: [PATCH 276/439] Made toolbar item icons grayish Set their images to template and improved highlight implementation --- .../Code/Application/MPToolbarController.m | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 78315573..db99ff70 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -433,9 +433,8 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString item.label = title; NSImage *itemImage = [NSImage imageNamed:iconName]; - [itemImage setTemplate:highlightable]; + [itemImage setTemplate:YES]; NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; - [itemButton setButtonType:NSToggleButton]; itemButton.image = itemImage; itemButton.bezelStyle = NSBezelStyleTexturedRounded; itemButton.focusRingType = NSFocusRingTypeDefault; @@ -443,6 +442,11 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString itemButton.action = itemSelector; itemButton.state = NSOffState; + if (highlightable) + { + [itemButton setButtonType:NSToggleButton]; + } + item.view = itemButton; [self->toolbarItemIdentifierObjectDictionary setObject:item forKey:itemIdentifier]; @@ -459,7 +463,16 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString segmentedControl.identifier = itemIdentifier; segmentedControl.segmentStyle = segmentStyleSeparated ? NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; - segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; + + if (highlightable) + { + segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; + } + else + { + segmentedControl.trackingMode = NSSegmentSwitchTrackingMomentary; + } + segmentedControl.segmentCount = subItemDicts.count; NSMutableArray *itemGroupItems = [NSMutableArray new]; @@ -478,7 +491,7 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString subItem.label = subItemTitle; NSImage *subItemImage = [NSImage imageNamed:subItemIcon]; - [subItemImage setTemplate:highlightable]; + [subItemImage setTemplate:YES]; [segmentedControl setImage:subItemImage forSegment:segmentIndex]; [segmentedControl setWidth:40.0 forSegment:segmentIndex]; From fa3298adf6da31dac7d95f04b06640597964b622 Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Wed, 22 Feb 2017 13:59:34 +0800 Subject: [PATCH 277/439] Separate bundle identifier for debug builds --- MacDown.xcodeproj/project.pbxproj | 2 +- MacDown/Code/Utility/MPGlobals.h | 7 +++++++ macdown-cmd/main.m | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index df893b63..bab87077 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -1311,7 +1311,7 @@ GCC_PREFIX_HEADER = "MacDown/Code/MacDown-Prefix.pch"; INFOPLIST_FILE = "MacDown/MacDown-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; - PRODUCT_BUNDLE_IDENTIFIER = "com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower}"; + PRODUCT_BUNDLE_IDENTIFIER = "com.uranusjr.${PRODUCT_NAME:rfc1034identifier:lower}-debug"; PRODUCT_NAME = MacDown; SDKROOT = macosx; WRAPPER_EXTENSION = app; diff --git a/MacDown/Code/Utility/MPGlobals.h b/MacDown/Code/Utility/MPGlobals.h index cf91cc4d..a54e1f05 100644 --- a/MacDown/Code/Utility/MPGlobals.h +++ b/MacDown/Code/Utility/MPGlobals.h @@ -10,6 +10,13 @@ // These should match the main bundle's values. static NSString * const kMPApplicationName = @"MacDown"; + +#ifdef DEBUG +static NSString * const kMPApplicationBundleIdentifier = @"com.uranusjr.macdown-debug"; +#else +static NSString * const kMPApplicationBundleIdentifier = @"com.uranusjr.macdown"; +#endif + static NSString * const kMPApplicationSuiteName = @"com.uranusjr.macdown"; static NSString * const MPCommandInstallationPath = @"/usr/local/bin/macdown"; diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index 1eaaa538..6e1b3755 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -113,7 +113,7 @@ int main(int argc, const char * argv[]) MPCollectForMacDown(urls); // Launch MacDown. - [[NSWorkspace sharedWorkspace] launchApplication:kMPApplicationName]; + [[NSWorkspace sharedWorkspace] launchAppWithBundleIdentifier:kMPApplicationBundleIdentifier options:NSWorkspaceLaunchDefault additionalEventParamDescriptor:nil launchIdentifier:nil]; } return EXIT_SUCCESS; } From c97efb5e4c2a5ff630d845a3996ec4c578ee102e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 22 Feb 2017 15:41:54 +0800 Subject: [PATCH 278/439] Switch update appcast to use HTTPS --- MacDown/MacDown-Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 8b2138ad..0b0dade9 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -119,9 +119,9 @@ OSAScriptingDefinition MacDown.sdef SUBetaFeedURL - http://macdown.uranusjr.com/sparkle/macdown/testing/appcast.xml + https://macdown.uranusjr.com/sparkle/macdown/testing/appcast.xml SUFeedURL - http://macdown.uranusjr.com/sparkle/macdown/appcast.xml + https://macdown.uranusjr.com/sparkle/macdown/stable/appcast.xml SUPublicDSAKeyFile dsa_pub.pem UTExportedTypeDeclarations From dedb549bdcdd4099a63ceff00e59f751dcd7cb2e Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 24 Feb 2017 00:08:01 +0800 Subject: [PATCH 279/439] Run bundle update to bump dependencies Close #763. --- Gemfile.lock | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index c0032e7d..3a4e3d78 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,35 +1,35 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (2.3.4) - activesupport (4.2.7.1) + CFPropertyList (2.3.5) + activesupport (4.2.8) i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.4.0) backports (3.6.8) claide (1.0.1) - cocoapods (1.1.1) + cocoapods (1.2.0) activesupport (>= 4.0.2, < 5) claide (>= 1.0.1, < 2.0) - cocoapods-core (= 1.1.1) + cocoapods-core (= 1.2.0) cocoapods-deintegrate (>= 1.0.1, < 2.0) - cocoapods-downloader (>= 1.1.2, < 2.0) + cocoapods-downloader (>= 1.1.3, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.1.1, < 2.0) + cocoapods-trunk (>= 1.1.2, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored (~> 1.2) escape (~> 0.0.4) fourflusher (~> 2.0.1) gh_inspector (~> 1.0) - molinillo (~> 0.5.1) + molinillo (~> 0.5.5) nap (~> 1.0) - xcodeproj (>= 1.3.3, < 2.0) - cocoapods-core (1.1.1) + ruby-macho (~> 0.2.5) + xcodeproj (>= 1.4.1, < 2.0) + cocoapods-core (1.2.0) activesupport (>= 4.0.2, < 5) fuzzy_match (~> 2.0.4) nap (~> 1.0) @@ -61,14 +61,14 @@ GEM multi_json (~> 1.0) net-http-persistent (~> 2.9) net-http-pipeline - gh_inspector (1.0.2) + gh_inspector (1.0.3) highline (1.7.8) - i18n (0.7.0) - json (1.8.3) + i18n (0.8.1) + json (2.0.3) launchy (2.4.3) addressable (~> 2.3) minitest (5.10.1) - molinillo (0.5.4) + molinillo (0.5.6) multi_json (1.12.1) multipart-post (2.0.0) nanaimo (0.2.3) @@ -79,7 +79,8 @@ GEM pusher-client (0.6.2) json websocket (~> 1.0) - thread_safe (0.3.5) + ruby-macho (0.2.6) + thread_safe (0.3.6) travis (1.8.6) backports faraday (~> 0.9) From 10d4e8d57fa2e49ee9105dd666d2f9d9c38e8726 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 24 Feb 2017 00:08:01 +0800 Subject: [PATCH 280/439] Run bundle update to bump dependencies Close #763. --- Gemfile.lock | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index c0032e7d..3a4e3d78 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,35 +1,35 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (2.3.4) - activesupport (4.2.7.1) + CFPropertyList (2.3.5) + activesupport (4.2.8) i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) addressable (2.4.0) backports (3.6.8) claide (1.0.1) - cocoapods (1.1.1) + cocoapods (1.2.0) activesupport (>= 4.0.2, < 5) claide (>= 1.0.1, < 2.0) - cocoapods-core (= 1.1.1) + cocoapods-core (= 1.2.0) cocoapods-deintegrate (>= 1.0.1, < 2.0) - cocoapods-downloader (>= 1.1.2, < 2.0) + cocoapods-downloader (>= 1.1.3, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.1.1, < 2.0) + cocoapods-trunk (>= 1.1.2, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored (~> 1.2) escape (~> 0.0.4) fourflusher (~> 2.0.1) gh_inspector (~> 1.0) - molinillo (~> 0.5.1) + molinillo (~> 0.5.5) nap (~> 1.0) - xcodeproj (>= 1.3.3, < 2.0) - cocoapods-core (1.1.1) + ruby-macho (~> 0.2.5) + xcodeproj (>= 1.4.1, < 2.0) + cocoapods-core (1.2.0) activesupport (>= 4.0.2, < 5) fuzzy_match (~> 2.0.4) nap (~> 1.0) @@ -61,14 +61,14 @@ GEM multi_json (~> 1.0) net-http-persistent (~> 2.9) net-http-pipeline - gh_inspector (1.0.2) + gh_inspector (1.0.3) highline (1.7.8) - i18n (0.7.0) - json (1.8.3) + i18n (0.8.1) + json (2.0.3) launchy (2.4.3) addressable (~> 2.3) minitest (5.10.1) - molinillo (0.5.4) + molinillo (0.5.6) multi_json (1.12.1) multipart-post (2.0.0) nanaimo (0.2.3) @@ -79,7 +79,8 @@ GEM pusher-client (0.6.2) json websocket (~> 1.0) - thread_safe (0.3.5) + ruby-macho (0.2.6) + thread_safe (0.3.6) travis (1.8.6) backports faraday (~> 0.9) From 5ca5c9e95cada392d0830f98c1966ec7a248784a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Mar 2017 16:15:46 +0800 Subject: [PATCH 281/439] Upgrade Podfile to Cocoapods 1.2 --- Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Podfile.lock b/Podfile.lock index 47b0e0cb..c5188960 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -35,4 +35,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 96c5c597eb1bc6ff129b3ca19cad3a7ca134972d -COCOAPODS: 1.1.1 +COCOAPODS: 1.2.0 From e130b0fa0a9a5792c455353b0bbb8844e02e45bb Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 11 Mar 2017 16:29:13 +0800 Subject: [PATCH 282/439] Point Hoedown to our fork Fix #770. --- Podfile | 4 +++- Podfile.lock | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Podfile b/Podfile index c5639ad6..c13a8e96 100644 --- a/Podfile +++ b/Podfile @@ -1,12 +1,14 @@ # Uncomment this line to define a global platform for your project # platform :ios, "6.0" +source 'https://github.com/MacDownApp/cocoapods-specs.git' source 'https://github.com/CocoaPods/Specs.git' + project 'MacDown.xcodeproj' target "MacDown" do pod 'handlebars-objc', '~> 1.4' - pod 'hoedown', '~> 3.0' + pod 'hoedown', '~> 3.0.7' pod 'JJPluralForm', '~> 2.1' # Plural form localization. pod 'LibYAML', '~> 0.1', :inhibit_warnings => true pod 'M13OrderedDictionary', '~> 1.1' diff --git a/Podfile.lock b/Podfile.lock index c5188960..80c374b5 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,9 +1,9 @@ PODS: - GBCli (1.1) - handlebars-objc (1.4.4) - - hoedown (3.0.3): - - hoedown/standard (= 3.0.3) - - hoedown/standard (3.0.3) + - hoedown (3.0.7): + - hoedown/standard (= 3.0.7) + - hoedown/standard (3.0.7) - JJPluralForm (2.1) - LibYAML (0.1.4) - M13OrderedDictionary (1.1.0) @@ -14,7 +14,7 @@ PODS: DEPENDENCIES: - GBCli (~> 1.1) - handlebars-objc (~> 1.4) - - hoedown (~> 3.0) + - hoedown (~> 3.0.7) - JJPluralForm (~> 2.1) - LibYAML (~> 0.1) - M13OrderedDictionary (~> 1.1) @@ -25,7 +25,7 @@ DEPENDENCIES: SPEC CHECKSUMS: GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 handlebars-objc: ffad49df7e6dd17630ecccb2ef5e91cbaf12ad70 - hoedown: c1327bbbc96d269595ed86bf97f1d09867ec7529 + hoedown: 8141833441f6430686c06bbc5159d7ce615155fb JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 M13OrderedDictionary: 6e157fe9c82aa6b3cd7198f5c5c30c7a6834c4a6 @@ -33,6 +33,6 @@ SPEC CHECKSUMS: PAPreferences: 9f0ffb1e67174a0df001af9d3320166ceb9ee6f5 Sparkle: 2fbd47b869621d1e679c7554e3e19dda02104818 -PODFILE CHECKSUM: 96c5c597eb1bc6ff129b3ca19cad3a7ca134972d +PODFILE CHECKSUM: 29335f52cc7271402c3f8219aca835cd28c86a61 COCOAPODS: 1.2.0 From d3b30fd3581349bd6dab28b034a17ad55d51985b Mon Sep 17 00:00:00 2001 From: Joao Antunes Date: Sun, 9 Apr 2017 02:57:58 +0100 Subject: [PATCH 283/439] Fix to the 'gitter | join chat' badge not showing on README.md The filename of SVG file has a space in it, so I added a %20 to render properly. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 819e4e25..9e60466d 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Refer to the official guides of Git and CocoaPods if you need more instructions. ## Discussion -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/MacDownApp/macdown) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/MacDownApp/macdown) Join our [Gitter channel](https://gitter.im/MacDownApp/macdown) if you have any problems with MacDown. Any suggestions are welcomed, too! From f567e9a98a6573ba6992f2ff13c9ea94cd249f23 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 18 Apr 2017 17:35:07 +0800 Subject: [PATCH 284/439] Tweak align rules in editor pref pane Fix #768. Rules are added/modified to make sure the font selector is totally visible, and the "Change" button is aligned to center instead of top to position it better. A height rule is added to the box view so that the window height is adjusted appropriately. --- .../MPEditorPreferencesViewController.xib | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib index 01316996..ecbaef13 100644 --- a/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPEditorPreferencesViewController.xib @@ -1,8 +1,8 @@ - - + + - + @@ -20,9 +20,9 @@ - + - + @@ -30,7 +30,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -88,7 +88,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -152,7 +152,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -209,7 +209,7 @@ - + @@ -235,7 +235,7 @@ - + @@ -345,10 +345,12 @@ + + + - @@ -357,6 +359,7 @@ + @@ -364,7 +367,6 @@ - @@ -372,6 +374,7 @@ + From e90851035dd1bc7d2470075b358efc2c1e8641c8 Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 26 Apr 2017 14:33:06 -0400 Subject: [PATCH 285/439] add editor support for dropping in images --- MacDown/Code/View/MPEditorView.m | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/MacDown/Code/View/MPEditorView.m b/MacDown/Code/View/MPEditorView.m index cec084de..f39427d2 100644 --- a/MacDown/Code/View/MPEditorView.m +++ b/MacDown/Code/View/MPEditorView.m @@ -39,6 +39,59 @@ - (BOOL)scrollsPastEnd } } +- (void)awakeFromNib { + [self registerForDraggedTypes:[NSArray arrayWithObjects: NSDragPboard, nil]]; + [super awakeFromNib]; +} + +- (NSDragOperation)draggingEntered:(id )sender { + NSPasteboard *pboard; + NSDragOperation sourceDragMask; + + sourceDragMask = [sender draggingSourceOperationMask]; + pboard = [sender draggingPasteboard]; + + if ([pboard canReadItemWithDataConformingToTypes:[NSArray arrayWithObjects:@"public.jpeg", nil]]) { + if (sourceDragMask & NSDragOperationLink) { + return NSDragOperationLink; + } else if (sourceDragMask & NSDragOperationCopy) { + return NSDragOperationCopy; + } + } + + return NSDragOperationNone; +} + +- (BOOL)performDragOperation:(id )sender { + NSPasteboard *pboard; + NSDragOperation sourceDragMask; + + sourceDragMask = [sender draggingSourceOperationMask]; + pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSFilenamesPboardType] ) { + NSArray *files = [pboard propertyListForType:NSFilenamesPboardType]; + + /* Load data of file. */ + NSError *error; + NSData *fileData = [NSData dataWithContentsOfFile: files[0] + options: NSMappedRead + error: &error]; + if (!error) { + // convert to base64 representation + NSString *dataString = [fileData base64Encoding]; + + // insert into text. + NSInteger insertionPoint = [[[self selectedRanges] objectAtIndex:0] rangeValue].location; + [self setString:[NSString stringWithFormat:@"%@![](data:image/jpeg;base64,%@)%@", [[self string] substringToIndex:insertionPoint], dataString, [[self string] substringFromIndex:insertionPoint]]]; + } else { + return NO; + } + } + return YES; +} + + - (void)setScrollsPastEnd:(BOOL)scrollsPastEnd { @synchronized(self) { From 534537d95e7232b5202f924db354b9f64a4e34de Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 26 Apr 2017 14:35:47 -0400 Subject: [PATCH 286/439] add the code to refresh the webview --- MacDown/Code/View/MPEditorView.m | 1 + 1 file changed, 1 insertion(+) diff --git a/MacDown/Code/View/MPEditorView.m b/MacDown/Code/View/MPEditorView.m index f39427d2..6c7804ac 100644 --- a/MacDown/Code/View/MPEditorView.m +++ b/MacDown/Code/View/MPEditorView.m @@ -84,6 +84,7 @@ - (BOOL)performDragOperation:(id )sender { // insert into text. NSInteger insertionPoint = [[[self selectedRanges] objectAtIndex:0] rangeValue].location; [self setString:[NSString stringWithFormat:@"%@![](data:image/jpeg;base64,%@)%@", [[self string] substringToIndex:insertionPoint], dataString, [[self string] substringFromIndex:insertionPoint]]]; + [self didChangeText]; } else { return NO; } From b226b15da3d1b548f8338fa8f839eafe5eb8801f Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 11 May 2017 22:20:57 +0800 Subject: [PATCH 287/439] Switch MathJax script to CDNJS Close #789. --- MacDown/Code/Document/MPRenderer.m | 2 +- MacDown/MacDown-Info.plist | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 04504f8c..5b7265d1 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -21,7 +21,7 @@ static NSString * const kMPMathJaxCDN = - @"https://cdn.mathjax.org/mathjax/latest/MathJax.js" + @"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js" @"?config=TeX-AMS-MML_HTMLorMML"; static NSString * const kMPPrismScriptDirectory = @"Prism/components"; static NSString * const kMPPrismThemeDirectory = @"Prism/themes"; diff --git a/MacDown/MacDown-Info.plist b/MacDown/MacDown-Info.plist index 0b0dade9..90ab54e0 100644 --- a/MacDown/MacDown-Info.plist +++ b/MacDown/MacDown-Info.plist @@ -92,7 +92,7 @@ NSExceptionDomains - mathjax.org + cdnjs.cloudflare.com NSExceptionRequiresForwardSecrecy From a7a209189927bc4d82edc461addf4abf5e18064b Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 12 May 2017 07:52:34 +0800 Subject: [PATCH 288/439] Make path detection in script more robust --- Tools/import_translations.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Tools/import_translations.py b/Tools/import_translations.py index 053671b5..72471f7e 100755 --- a/Tools/import_translations.py +++ b/Tools/import_translations.py @@ -3,7 +3,6 @@ import logging import os -import shutil from xml.etree import ElementTree @@ -22,11 +21,14 @@ def pull_translations(parser): - xliff_dirpath = os.path.dirname( + xliff_dirpath = os.path.abspath(os.path.join( + __file__, '..', '..', parser.get('macdown.macdownxliff', 'file_filter'), - ) + '..', + )) for fn in os.listdir(xliff_dirpath): os.remove(os.path.join(xliff_dirpath, fn)) + logger.info('Connecting...') os.system('tx pull -a') From 3c0ada746f5765906625f9b6be1b9373fc51de41 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 12 May 2017 10:39:06 +0800 Subject: [PATCH 289/439] Pull translations from Transifex New languages: * Arabic (ar) * German (de) * Italian - Italy (it-IT) * Japanese (ja) * Slovak (sv) * Spanish (es) --- MacDown.xcodeproj/project.pbxproj | 138 ++++++ MacDown/Localization/ar.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/ar.lproj/InfoPlist.strings | 1 + .../Localization/ar.lproj/Localizable.strings | 1 + .../Localization/ar.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 1 + ...ExportPanelAccessoryViewController.strings | 1 + ...MPGeneralPreferencesViewController.strings | 1 + .../MPHtmlPreferencesViewController.strings | 1 + ...PMarkdownPreferencesViewController.strings | 1 + .../Localization/ar.lproj/MainMenu.strings | 1 + MacDown/Localization/de.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/de.lproj/InfoPlist.strings | 9 + .../Localization/de.lproj/Localizable.strings | 36 ++ .../Localization/de.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 18 + ...ExportPanelAccessoryViewController.strings | 1 + ...MPGeneralPreferencesViewController.strings | 3 + .../MPHtmlPreferencesViewController.strings | 6 + ...PMarkdownPreferencesViewController.strings | 3 + .../Localization/de.lproj/MainMenu.strings | 99 +++++ MacDown/Localization/es.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/es.lproj/InfoPlist.strings | 1 + .../Localization/es.lproj/Localizable.strings | 24 ++ .../Localization/es.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 6 + ...ExportPanelAccessoryViewController.strings | 1 + ...MPGeneralPreferencesViewController.strings | 1 + .../MPHtmlPreferencesViewController.strings | 3 + ...PMarkdownPreferencesViewController.strings | 1 + .../Localization/es.lproj/MainMenu.strings | 87 ++++ MacDown/Localization/it-IT.lproj/Credits.rtf | 406 ++++++++++++++++++ .../it-IT.lproj/InfoPlist.strings | 9 + .../it-IT.lproj/Localizable.strings | 92 ++++ .../it-IT.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 51 +++ ...PMarkdownPreferencesViewController.strings | 39 ++ .../Localization/it-IT.lproj/MainMenu.strings | 336 +++++++++++++++ MacDown/Localization/ja.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/ja.lproj/InfoPlist.strings | 9 + .../Localization/ja.lproj/Localizable.strings | 92 ++++ .../Localization/ja.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ .../Localization/ja.lproj/MainMenu.strings | 348 +++++++++++++++ MacDown/Localization/sk.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/sk.lproj/InfoPlist.strings | 1 + .../Localization/sk.lproj/Localizable.strings | 1 + .../Localization/sk.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 12 + .../MPHtmlPreferencesViewController.strings | 21 + ...PMarkdownPreferencesViewController.strings | 1 + .../Localization/sk.lproj/MainMenu.strings | 1 + .../Localization/sv.lproj/InfoPlist.strings | 3 +- .../Localization/sv.lproj/Localizable.strings | 49 ++- .../Localization/sv.lproj/MPDocument.strings | 2 +- .../MPEditorPreferencesViewController.strings | 64 +-- ...ExportPanelAccessoryViewController.strings | 7 +- ...MPGeneralPreferencesViewController.strings | 22 +- .../MPHtmlPreferencesViewController.strings | 42 +- ...PMarkdownPreferencesViewController.strings | 30 +- .../Localization/sv.lproj/MainMenu.strings | 265 ++++-------- .../zh-Hans.lproj/InfoPlist.strings | 3 +- .../zh-Hans.lproj/Localizable.strings | 35 +- .../zh-Hans.lproj/MPDocument.strings | 2 +- .../MPEditorPreferencesViewController.strings | 60 +-- ...ExportPanelAccessoryViewController.strings | 7 +- ...MPGeneralPreferencesViewController.strings | 25 +- .../MPHtmlPreferencesViewController.strings | 49 +-- ...PMarkdownPreferencesViewController.strings | 39 +- .../zh-Hans.lproj/MainMenu.strings | 273 +++--------- .../zh-Hant.lproj/InfoPlist.strings | 3 +- .../zh-Hant.lproj/Localizable.strings | 16 +- .../zh-Hant.lproj/MPDocument.strings | 2 +- .../MPEditorPreferencesViewController.strings | 53 +-- ...ExportPanelAccessoryViewController.strings | 6 +- ...MPGeneralPreferencesViewController.strings | 20 +- .../MPHtmlPreferencesViewController.strings | 47 +- ...PMarkdownPreferencesViewController.strings | 43 +- .../zh-Hant.lproj/MainMenu.strings | 349 +-------------- MacDownTests/ar.lproj/InfoPlist.strings | 1 + MacDownTests/de.lproj/InfoPlist.strings | 3 + MacDownTests/es.lproj/InfoPlist.strings | 1 + MacDownTests/it-IT.lproj/InfoPlist.strings | 3 + MacDownTests/ja.lproj/InfoPlist.strings | 3 + MacDownTests/sk.lproj/InfoPlist.strings | 1 + MacDownTests/sv.lproj/InfoPlist.strings | 3 +- MacDownTests/zh-Hans.lproj/InfoPlist.strings | 3 +- MacDownTests/zh-Hant.lproj/InfoPlist.strings | 3 +- 97 files changed, 4610 insertions(+), 1187 deletions(-) create mode 100644 MacDown/Localization/ar.lproj/Credits.rtf create mode 100644 MacDown/Localization/ar.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/ar.lproj/Localizable.strings create mode 100644 MacDown/Localization/ar.lproj/MPDocument.strings create mode 100644 MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/ar.lproj/MainMenu.strings create mode 100644 MacDown/Localization/de.lproj/Credits.rtf create mode 100644 MacDown/Localization/de.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/de.lproj/Localizable.strings create mode 100644 MacDown/Localization/de.lproj/MPDocument.strings create mode 100644 MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/de.lproj/MainMenu.strings create mode 100644 MacDown/Localization/es.lproj/Credits.rtf create mode 100644 MacDown/Localization/es.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/es.lproj/Localizable.strings create mode 100644 MacDown/Localization/es.lproj/MPDocument.strings create mode 100644 MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/es.lproj/MainMenu.strings create mode 100644 MacDown/Localization/it-IT.lproj/Credits.rtf create mode 100644 MacDown/Localization/it-IT.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/it-IT.lproj/Localizable.strings create mode 100644 MacDown/Localization/it-IT.lproj/MPDocument.strings create mode 100644 MacDown/Localization/it-IT.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/it-IT.lproj/MainMenu.strings create mode 100644 MacDown/Localization/ja.lproj/Credits.rtf create mode 100644 MacDown/Localization/ja.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/ja.lproj/Localizable.strings create mode 100644 MacDown/Localization/ja.lproj/MPDocument.strings create mode 100644 MacDown/Localization/ja.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/ja.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/ja.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/ja.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/ja.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/ja.lproj/MainMenu.strings create mode 100644 MacDown/Localization/sk.lproj/Credits.rtf create mode 100644 MacDown/Localization/sk.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/sk.lproj/Localizable.strings create mode 100644 MacDown/Localization/sk.lproj/MPDocument.strings create mode 100644 MacDown/Localization/sk.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/sk.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/sk.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/sk.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/sk.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/sk.lproj/MainMenu.strings create mode 100644 MacDownTests/ar.lproj/InfoPlist.strings create mode 100644 MacDownTests/de.lproj/InfoPlist.strings create mode 100644 MacDownTests/es.lproj/InfoPlist.strings create mode 100644 MacDownTests/it-IT.lproj/InfoPlist.strings create mode 100644 MacDownTests/ja.lproj/InfoPlist.strings create mode 100644 MacDownTests/sk.lproj/InfoPlist.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index bab87077..6e59beef 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -224,6 +224,72 @@ 1F8A8363195346B200B6BF69 /* pmh_styleparser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pmh_styleparser.c; path = "Dependency/peg-markdown-highlight/pmh_styleparser.c"; sourceTree = SOURCE_ROOT; }; 1F8A8365195346B600B6BF69 /* pmh_styleparser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pmh_styleparser.h; path = "Dependency/peg-markdown-highlight/pmh_styleparser.h"; sourceTree = SOURCE_ROOT; }; 1F8A837E195348C500B6BF69 /* peg-markdown-highlight.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "peg-markdown-highlight.xcodeproj"; path = "Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj"; sourceTree = SOURCE_ROOT; }; + 1F90340D1EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MainMenu.strings; sourceTree = ""; }; + 1F90340E1EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F90340F1EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F9034101EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F9034111EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F9034121EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F9034131EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPDocument.strings; sourceTree = ""; }; + 1F9034141EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = de; path = Localization/de.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034151EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034161EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034171EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034181EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MainMenu.strings; sourceTree = ""; }; + 1F9034191EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F90341A1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F90341B1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F90341C1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F90341D1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F90341E1EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPDocument.strings; sourceTree = ""; }; + 1F90341F1EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = Localization/es.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034201EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034211EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034221EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034231EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MainMenu.strings"; sourceTree = ""; }; + 1F9034241EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1F9034251EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1F9034261EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1F9034271EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1F9034281EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1F9034291EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPDocument.strings"; sourceTree = ""; }; + 1F90342A1EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "it-IT"; path = "Localization/it-IT.lproj/Credits.rtf"; sourceTree = ""; }; + 1F90342B1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/InfoPlist.strings"; sourceTree = ""; }; + 1F90342C1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/Localizable.strings"; sourceTree = ""; }; + 1F90342D1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/InfoPlist.strings"; sourceTree = ""; }; + 1F90342E1EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MainMenu.strings; sourceTree = ""; }; + 1F90342F1EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F9034301EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F9034311EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F9034321EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F9034331EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F9034341EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPDocument.strings; sourceTree = ""; }; + 1F9034351EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ja; path = Localization/ja.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034361EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034371EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034381EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034391EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MainMenu.strings; sourceTree = ""; }; + 1F90343A1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F90343B1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F90343C1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F90343D1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F90343E1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F90343F1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPDocument.strings; sourceTree = ""; }; + 1F9034401EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sk; path = Localization/sk.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034411EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034421EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034431EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F9034441EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MainMenu.strings; sourceTree = ""; }; + 1F9034451EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F9034461EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F9034471EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F9034481EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F9034491EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F90344A1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPDocument.strings; sourceTree = ""; }; + 1F90344B1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ar; path = Localization/ar.lproj/Credits.rtf; sourceTree = ""; }; + 1F90344C1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/InfoPlist.strings; sourceTree = ""; }; + 1F90344D1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/Localizable.strings; sourceTree = ""; }; + 1F90344E1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; 1F96BD7E1E584A03005E0456 /* MPHomebrewSubprocessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHomebrewSubprocessController.h; sourceTree = ""; }; 1F96BD7F1E584A03005E0456 /* MPHomebrewSubprocessController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHomebrewSubprocessController.m; sourceTree = ""; }; 1F9A14E8194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPExportPanelAccessoryViewController.h; path = Code/Application/MPExportPanelAccessoryViewController.h; sourceTree = ""; }; @@ -777,6 +843,12 @@ sv, "zh-Hant", "zh-Hans", + de, + es, + "it-IT", + ja, + sk, + ar, ); mainGroup = 1FA6DE181941CC9E000409FB; productRefGroup = 1FA6DE221941CC9E000409FB /* Products */; @@ -1096,6 +1168,12 @@ 1FCBDF0B1E536C8400C0F56B /* sv */, 1FCBDF161E536CAE00C0F56B /* zh-Hant */, 1FCBDF211E536CB600C0F56B /* zh-Hans */, + 1F90340D1EC556A900D97F9C /* de */, + 1F9034181EC556C900D97F9C /* es */, + 1F9034231EC556E400D97F9C /* it-IT */, + 1F90342E1EC556EC00D97F9C /* ja */, + 1F9034391EC556F300D97F9C /* sk */, + 1F9034441EC5576E00D97F9C /* ar */, ); name = MainMenu.xib; sourceTree = ""; @@ -1107,6 +1185,12 @@ 1FCBDF111E536C8500C0F56B /* sv */, 1FCBDF1C1E536CAE00C0F56B /* zh-Hant */, 1FCBDF271E536CB700C0F56B /* zh-Hans */, + 1F9034131EC556AA00D97F9C /* de */, + 1F90341E1EC556CA00D97F9C /* es */, + 1F9034291EC556E400D97F9C /* it-IT */, + 1F9034341EC556EC00D97F9C /* ja */, + 1F90343F1EC556F300D97F9C /* sk */, + 1F90344A1EC5576E00D97F9C /* ar */, ); name = MPDocument.xib; path = ../..; @@ -1119,6 +1203,12 @@ 1FCBDF0F1E536C8400C0F56B /* sv */, 1FCBDF1A1E536CAE00C0F56B /* zh-Hant */, 1FCBDF251E536CB600C0F56B /* zh-Hans */, + 1F9034111EC556A900D97F9C /* de */, + 1F90341C1EC556C900D97F9C /* es */, + 1F9034271EC556E400D97F9C /* it-IT */, + 1F9034321EC556EC00D97F9C /* ja */, + 1F90343D1EC556F300D97F9C /* sk */, + 1F9034481EC5576E00D97F9C /* ar */, ); name = MPEditorPreferencesViewController.xib; path = ../..; @@ -1131,6 +1221,12 @@ 1FCBDF101E536C8500C0F56B /* sv */, 1FCBDF1B1E536CAE00C0F56B /* zh-Hant */, 1FCBDF261E536CB700C0F56B /* zh-Hans */, + 1F9034121EC556A900D97F9C /* de */, + 1F90341D1EC556C900D97F9C /* es */, + 1F9034281EC556E400D97F9C /* it-IT */, + 1F9034331EC556EC00D97F9C /* ja */, + 1F90343E1EC556F300D97F9C /* sk */, + 1F9034491EC5576E00D97F9C /* ar */, ); name = MPHtmlPreferencesViewController.xib; path = ../..; @@ -1143,6 +1239,12 @@ 1FCBDF0E1E536C8400C0F56B /* sv */, 1FCBDF191E536CAE00C0F56B /* zh-Hant */, 1FCBDF241E536CB600C0F56B /* zh-Hans */, + 1F9034101EC556A900D97F9C /* de */, + 1F90341B1EC556C900D97F9C /* es */, + 1F9034261EC556E400D97F9C /* it-IT */, + 1F9034311EC556EC00D97F9C /* ja */, + 1F90343C1EC556F300D97F9C /* sk */, + 1F9034471EC5576E00D97F9C /* ar */, ); name = MPMarkdownPreferencesViewController.xib; path = ../..; @@ -1155,6 +1257,12 @@ 1FCBDF121E536C8500C0F56B /* sv */, 1FCBDF1D1E536CAE00C0F56B /* zh-Hant */, 1FCBDF281E536CB700C0F56B /* zh-Hans */, + 1F9034141EC556AA00D97F9C /* de */, + 1F90341F1EC556CA00D97F9C /* es */, + 1F90342A1EC556E400D97F9C /* it-IT */, + 1F9034351EC556EC00D97F9C /* ja */, + 1F9034401EC556F300D97F9C /* sk */, + 1F90344B1EC5576E00D97F9C /* ar */, ); name = Credits.rtf; sourceTree = ""; @@ -1166,6 +1274,12 @@ 1FCBDF131E536C8500C0F56B /* sv */, 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */, 1FCBDF291E536CB700C0F56B /* zh-Hans */, + 1F9034151EC556AA00D97F9C /* de */, + 1F9034201EC556CA00D97F9C /* es */, + 1F90342B1EC556E500D97F9C /* it-IT */, + 1F9034361EC556EC00D97F9C /* ja */, + 1F9034411EC556F300D97F9C /* sk */, + 1F90344C1EC5576E00D97F9C /* ar */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1177,6 +1291,12 @@ 1FCBDF151E536C9F00C0F56B /* sv */, 1FCBDF1F1E536CAF00C0F56B /* zh-Hant */, 1FCBDF2A1E536CB700C0F56B /* zh-Hans */, + 1F9034161EC556AA00D97F9C /* de */, + 1F9034211EC556CA00D97F9C /* es */, + 1F90342C1EC556E500D97F9C /* it-IT */, + 1F9034371EC556EC00D97F9C /* ja */, + 1F9034421EC556F300D97F9C /* sk */, + 1F90344D1EC5576E00D97F9C /* ar */, ); name = Localizable.strings; sourceTree = ""; @@ -1188,6 +1308,12 @@ 1FCBDF0C1E536C8400C0F56B /* sv */, 1FCBDF171E536CAE00C0F56B /* zh-Hant */, 1FCBDF221E536CB600C0F56B /* zh-Hans */, + 1F90340E1EC556A900D97F9C /* de */, + 1F9034191EC556C900D97F9C /* es */, + 1F9034241EC556E400D97F9C /* it-IT */, + 1F90342F1EC556EC00D97F9C /* ja */, + 1F90343A1EC556F300D97F9C /* sk */, + 1F9034451EC5576E00D97F9C /* ar */, ); name = MPExportPanelAccessoryViewController.xib; sourceTree = ""; @@ -1199,6 +1325,12 @@ 1FCBDF0D1E536C8400C0F56B /* sv */, 1FCBDF181E536CAE00C0F56B /* zh-Hant */, 1FCBDF231E536CB600C0F56B /* zh-Hans */, + 1F90340F1EC556A900D97F9C /* de */, + 1F90341A1EC556C900D97F9C /* es */, + 1F9034251EC556E400D97F9C /* it-IT */, + 1F9034301EC556EC00D97F9C /* ja */, + 1F90343B1EC556F300D97F9C /* sk */, + 1F9034461EC5576E00D97F9C /* ar */, ); name = MPGeneralPreferencesViewController.xib; path = ../..; @@ -1211,6 +1343,12 @@ 1FCBDF141E536C8900C0F56B /* sv */, 1FCBDF201E536CAF00C0F56B /* zh-Hant */, 1FCBDF2B1E536CB700C0F56B /* zh-Hans */, + 1F9034171EC556AA00D97F9C /* de */, + 1F9034221EC556CA00D97F9C /* es */, + 1F90342D1EC556E500D97F9C /* it-IT */, + 1F9034381EC556EC00D97F9C /* ja */, + 1F9034431EC556F300D97F9C /* sk */, + 1F90344E1EC5576E00D97F9C /* ar */, ); name = InfoPlist.strings; sourceTree = ""; diff --git a/MacDown/Localization/ar.lproj/Credits.rtf b/MacDown/Localization/ar.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/ar.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/InfoPlist.strings b/MacDown/Localization/ar.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/Localizable.strings b/MacDown/Localization/ar.lproj/Localizable.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/Localizable.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPDocument.strings b/MacDown/Localization/ar.lproj/MPDocument.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MPDocument.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MainMenu.strings b/MacDown/Localization/ar.lproj/MainMenu.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/MainMenu.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/Credits.rtf b/MacDown/Localization/de.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/de.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/InfoPlist.strings b/MacDown/Localization/de.lproj/InfoPlist.strings new file mode 100644 index 00000000..4331b750 --- /dev/null +++ b/MacDown/Localization/de.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* (No Commment) */ +"CFBundleName" = "${PRODUCT_NAME}"; + +/* (No Commment) */ +"CFBundleShortVersionString" = "0.1"; + +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/de.lproj/Localizable.strings b/MacDown/Localization/de.lproj/Localizable.strings new file mode 100644 index 00000000..a8b89524 --- /dev/null +++ b/MacDown/Localization/de.lproj/Localizable.strings @@ -0,0 +1,36 @@ +/* Prism theme title */ +"(Default)" = "(Standard)"; + +/* Preference pane title. */ +"Editor" = "Editor"; + +/* Preference pane title. */ +"General" = "Generell"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "Verstecke Editor Fenster"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "Verstecke Vorschau Fenster"; + +/* Install shell utility button */ +"Install" = "Installieren"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* Preferences window title. */ +"Preferences" = "Einstellungen"; + +/* Preference pane title. */ +"Terminal" = "Konsole"; + +/* Uninstall shell utility button */ +"Uninstall" = "Deinstallieren"; + +/* default filename if no title can be determined */ +"Untitled" = "Ohne Titel"; + diff --git a/MacDown/Localization/de.lproj/MPDocument.strings b/MacDown/Localization/de.lproj/MPDocument.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/de.lproj/MPDocument.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..81099c0d --- /dev/null +++ b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,18 @@ +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Ändern..."; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Aktualisieren"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Zeilenabstand:"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Basis Schriftart:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Thema:"; + diff --git a/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..df88d1af --- /dev/null +++ b/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,3 @@ +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Aktualisieren"; + diff --git a/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..87e5c951 --- /dev/null +++ b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,6 @@ +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Benutzerdefiniert"; + diff --git a/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..dc9d8bad --- /dev/null +++ b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,3 @@ +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Fußnote"; + diff --git a/MacDown/Localization/de.lproj/MainMenu.strings b/MacDown/Localization/de.lproj/MainMenu.strings new file mode 100644 index 00000000..8c4c5c32 --- /dev/null +++ b/MacDown/Localization/de.lproj/MainMenu.strings @@ -0,0 +1,99 @@ +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimieren"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plugins"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Exportieren"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Fenster"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Bild"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Bearbeiten"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "Neu"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF..."; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Finden..."; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Drucken..."; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Fenster"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plugins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "Datei"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML..."; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "Datei"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Rückgängig"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Einfügen"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Kommentar"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Ungeordnete Liste"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Geordnete Liste"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Formatieren"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Löschen"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Speichern..."; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Kopiere HTML"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Ausschneiden"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Hilfe"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Bereinige Menü"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Hochformat anwenden"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Verstecke Editor Fenster"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Hilfe"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Kopieren"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "Ansicht"; + diff --git a/MacDown/Localization/es.lproj/Credits.rtf b/MacDown/Localization/es.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/es.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/InfoPlist.strings b/MacDown/Localization/es.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/es.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/Localizable.strings b/MacDown/Localization/es.lproj/Localizable.strings new file mode 100644 index 00000000..bb948144 --- /dev/null +++ b/MacDown/Localization/es.lproj/Localizable.strings @@ -0,0 +1,24 @@ +/* Displayed when shell utility is not installed */ +"" = ""; + +/* Preference pane title. */ +"General" = "General"; + +/* Install shell utility button */ +"Install" = "Instalar"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* Preferences window title. */ +"Preferences" = "Preferencias"; + +/* Uninstall shell utility button */ +"Uninstall" = "Desinstalar"; + +/* default filename if no title can be determined */ +"Untitled" = "Sin Título"; + diff --git a/MacDown/Localization/es.lproj/MPDocument.strings b/MacDown/Localization/es.lproj/MPDocument.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/es.lproj/MPDocument.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..7df836df --- /dev/null +++ b/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,6 @@ +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisco)"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + diff --git a/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..e241f583 --- /dev/null +++ b/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,3 @@ +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + diff --git a/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/MainMenu.strings b/MacDown/Localization/es.lproj/MainMenu.strings new file mode 100644 index 00000000..0f4bbaa0 --- /dev/null +++ b/MacDown/Localization/es.lproj/MainMenu.strings @@ -0,0 +1,87 @@ +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Buscar"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "Acerca de MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Exportar"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Rehacer"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Sustituciones"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferencias..."; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Guardar Como..."; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Cerrar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convertir a"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Abrir..."; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Imagen"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF..."; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Buscar..."; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Buscar y Reemplazar..."; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Imprimir..."; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformaciones"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML..."; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Deshacer"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convertir a"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Pegar"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Servicios"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Guardar..."; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copiar HTML"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cortar"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Ayuda"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copiar"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Mostrar Sustituciones"; + diff --git a/MacDown/Localization/it-IT.lproj/Credits.rtf b/MacDown/Localization/it-IT.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/it-IT.lproj/InfoPlist.strings b/MacDown/Localization/it-IT.lproj/InfoPlist.strings new file mode 100644 index 00000000..4b5ff662 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* (No Commment) */ +"CFBundleName" = "${NOME_PRODOTTO}"; + +/* (No Commment) */ +"CFBundleShortVersionString" = "0.1"; + +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014-2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/it-IT.lproj/Localizable.strings b/MacDown/Localization/it-IT.lproj/Localizable.strings new file mode 100644 index 00000000..ab82c23d --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/Localizable.strings @@ -0,0 +1,92 @@ +/* Prism theme title */ +"(Default)" = "(Predefinito)"; + +/* Displayed when shell utility is not installed */ +"" = ""; + +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "Si è verificato un errore nella creazione del file: +%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "Carattere %@ (senza spazi);caratteri %@ (senza spazi)"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "Carattere %@;%@ Caratteri"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "Impossibile create il file +%@"; + +/* Preference pane title. */ +"Editor" = "Editor"; + +/* preview navigation error message */ +"File not found at path: +%@" = "File non trovato all'indirizzo: +%@"; + +/* Preference pane title. */ +"General" = "Generale"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "Nascondi Editor"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "Nascondi Anteprima"; + +/* Install shell utility button */ +"Install" = "Installa"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* preview navigation error information */ +"MacDown can’t create a file for the clicked link because +the current file is not saved anywhere yet. Save the +current file somewhere to enable this feature." = "MacDown non può creare un file per il link perché +questo file non è ancora stato salvato. Salva il file +da qualche parte per abilitare questa funzione."; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* preview navigation error information */ +"Please check the path of your link is correct. Turn on +“Automatically create link targets” If you want MacDown to +create nonexistent link targets for you." = "Controlla che il percorso del link sia corretto. Attiva +\"Crea automaticamente link di destinazione\" se vuoi che MacDown +crei link di destinazione inesistenti per te."; + +/* Preferences window title. */ +"Preferences" = "Preferenze"; + +/* Preference pane title. */ +"Rendering" = "Resa grafica"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "Ripristina Editor"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "Ripristina Anteprima"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "Supporto Shell installato"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "Supporto Shell non installato"; + +/* Preference pane title. */ +"Terminal" = "Terminale"; + +/* Uninstall shell utility button */ +"Uninstall" = "Disinstalla"; + +/* default filename if no title can be determined */ +"Untitled" = "Senza Titolo"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ parola;%@ parole"; + diff --git a/MacDown/Localization/it-IT.lproj/MPDocument.strings b/MacDown/Localization/it-IT.lproj/MPDocument.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MPDocument.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/it-IT.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..7f22e84a --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "Marcatori di lista:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← vai al primo carattere della riga"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Segno meno)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Comportamento"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Modifica..."; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Inserisci una riga vuota alla fine del file al salvataggio"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Box di Testo:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Mostra"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Ricarica"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Interlinea"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Numerazione crescente automatica nelle liste"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Inserisci spazi al posto di tab"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limita larghezza editor a"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisco)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Font predefinito"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "x"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scorri oltre la fine del file"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-completa caratteri corrispondenti"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Tema:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Inserisci automaticamente il prefisso della linea per il blocco corrente"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Segno più)"; + diff --git a/MacDown/Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..66165556 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Evidenzia la sintassi"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Includi stili"; + diff --git a/MacDown/Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..312b1c7c --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sincronizza le barra di scorrimento dell'editor e dell'anteprima"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Comportamento"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Visualizza l'editor a destra"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Aggiorna"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Crea automaticamente file per link di destinazione"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Crea un documento al'apertura"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Aggiorna automaticamente l'anteprima mentre scrivi"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Mostra conta parole"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Includi versioni pre-rilascio"; + diff --git a/MacDown/Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..8965d359 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,51 @@ +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Mostra"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Ricarica"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Il supporto a math richiede la connessione internet"; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "Sintassi matematica in stile TeX"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Blocco di codice con sintassi evidenziata"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Usa il simbolo dollaro ($) come delimitatore di linea"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Personalizzato"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Crea nuova riga con Invio"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Mostra numero linea"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Tema:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Ridimensiona anteprima in base alla dimensione del carattere"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Percorso predefinito:"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Sintassi lista di azioni"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Identifica simboli per sommario"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "Nessuno"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Nome linguaggio"; + diff --git a/MacDown/Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..c6637891 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,39 @@ +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Note a piè pagina"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Citazione"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Evidenzia"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Enfasi tra le parole"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Blocco di codice fenced"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Sottolinea"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Barrato"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Collega automaticamente"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Formattazione del blocco"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Formattazione in linea"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Apice"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Formattazione doocumento"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Tabella"; + diff --git a/MacDown/Localization/it-IT.lproj/MainMenu.strings b/MacDown/Localization/it-IT.lproj/MainMenu.strings new file mode 100644 index 00000000..a866a242 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/MainMenu.strings @@ -0,0 +1,336 @@ +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Titolo 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Trova"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Modalità Schermo Intero"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Evidenzia"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Trasformazioni"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Ortografia"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Comandi vocali"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Trova"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Enfatizza"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Chiudi MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Modifica"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "Informazioni su MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Esporta"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Ripristina"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Controlla aggiornamenti..."; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Barrato"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Sostituzioni"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Copia/Incolla Intelligente"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correggi Ortografia Automaticamente"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Sottolinea"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Menu Principale"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Titolo 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferenze..."; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Salva come..."; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Titolo 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Chiudi"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Ortografia e Grammatica"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "Vista"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Aiuto"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Sostituzioni"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Collegamento"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Sostituzione Testo"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Mostra Ortografia e Grammatica"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Converti in"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Apri..."; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Ripristina File Salvato"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Mostra Tutto"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Porta tutto in primo piano"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Formato"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Titolo 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Servizi"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Sinistra 3:1 Destra"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimizza"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Nascondi MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Trova Precedente"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Interrompi Riproduzione"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Ingrandimento"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Marcato"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Seleziona Tutto"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Vai alla Selezione"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Esporta"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Nascondi Pannello Anteprima"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Finestra"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalizza"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Sinistra 1:3 Destra"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Nascondi Altri"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Crea Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Immagine"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Modifica"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "Nuovo"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF..."; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Trova..."; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Trova e Sostituisci..."; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Inizia Riproduzione"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Stampa..."; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Finestra"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Usa Selezione per Trovare"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Trasformazioni"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Trasforma in Minuscolo"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML..."; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Annulla"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Converti in"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Incolla"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Sinistra-Destra 1:1"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Citazioni Intelligenti "; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Controlla Documento Ora"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Servizi"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Commento"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Codice in Linea"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Elenco Puntato"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Elenco Numerato"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Formatta"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Titolo 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Controlla Grammatica con Ortografia"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Apri Recente"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Elimina"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Salva..."; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Trova Successivo"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Impostazione Pagina..."; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Controlla Ortografia Durante la Scrittura"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Trattini intelligenti"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Identificatore Dati"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Apri Recente"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copia HTML"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Taglia"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "Aiuto MacDown"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Rendi Maiuscolo"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Nascondi Editor"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Titolo 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Aiuto"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copia"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragrafo"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "Vista"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Dettatura"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Mostra Sostituzioni"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "Nuovo Paragrafo"; + diff --git a/MacDown/Localization/ja.lproj/Credits.rtf b/MacDown/Localization/ja.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/ja.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/ja.lproj/InfoPlist.strings b/MacDown/Localization/ja.lproj/InfoPlist.strings new file mode 100644 index 00000000..4878e77b --- /dev/null +++ b/MacDown/Localization/ja.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* (No Commment) */ +"CFBundleName" = "MacDown"; + +/* (No Commment) */ +"CFBundleShortVersionString" = "0.1"; + +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/ja.lproj/Localizable.strings b/MacDown/Localization/ja.lproj/Localizable.strings new file mode 100644 index 00000000..5eb506e8 --- /dev/null +++ b/MacDown/Localization/ja.lproj/Localizable.strings @@ -0,0 +1,92 @@ +/* Prism theme title */ +"(Default)" = "(デフォルト)"; + +/* Displayed when shell utility is not installed */ +"" = "<未インストール>"; + +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "ファイル作成中にエラーが発生しました: +%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ 文字 (スペースなし);%@ 文字列 (スペースなし)"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ 文字;%@ 文字列"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "ファイルを作成できません: +%@"; + +/* Preference pane title. */ +"Editor" = "エディタ"; + +/* preview navigation error message */ +"File not found at path: +%@" = "ファイルが見つかりません: +%@"; + +/* Preference pane title. */ +"General" = "一般"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "エディタペインを隠す"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "プレビューペインを隠す"; + +/* Install shell utility button */ +"Install" = "インストール"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* preview navigation error information */ +"MacDown can’t create a file for the clicked link because +the current file is not saved anywhere yet. Save the +current file somewhere to enable this feature." = "編集中のファイルが保存されていないため,MacDown は +クリックされたファイルを作成できません.この機能を +利用するためには編集中のファイルを保存してください."; + +/* Preference pane title. */ +"Markdown" = "マークダウン"; + +/* preview navigation error information */ +"Please check the path of your link is correct. Turn on +“Automatically create link targets” If you want MacDown to +create nonexistent link targets for you." = "リンクのパスが正しいか確認してください.存在しない +リンク先のファイルを MacDown に作成させるためには +“リンク先のファイルを自動的に作成” をオンにしてください."; + +/* Preferences window title. */ +"Preferences" = "環境設定"; + +/* Preference pane title. */ +"Rendering" = "レンダリング"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "エディタペインを表示"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "プレビューペインを表示"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "コマンドラインツール インストール済み"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "コマンドラインツール 未インストール"; + +/* Preference pane title. */ +"Terminal" = "ターミナル"; + +/* Uninstall shell utility button */ +"Uninstall" = "アンインストール"; + +/* default filename if no title can be determined */ +"Untitled" = "名称未設定"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ word;%@ words"; + diff --git a/MacDown/Localization/ja.lproj/MPDocument.strings b/MacDown/Localization/ja.lproj/MPDocument.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ja.lproj/MPDocument.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ja.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..86a513fb --- /dev/null +++ b/MacDown/Localization/ja.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "リストマーカー:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← で行の最初の非空白文字にジャンプ"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (マイナス)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "動作"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "変更…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "保存時にファイル末尾が必ず改行になるようにする"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "テキスト領域:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "表示"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "リロード"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "行間:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "番号付きリストの数字を自動的にインクリメント"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "タブをスペースに自動的に展開"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "エディタの最大幅を設定"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (アスタリスク)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "フォント:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "最終行の先までスクロール可能にする"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "対応する括弧等を自動的に補完"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "テーマ:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "改行時にリストや引用のプレフィックスを自動挿入"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (プラス)"; + diff --git a/MacDown/Localization/ja.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/ja.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..65faf06a --- /dev/null +++ b/MacDown/Localization/ja.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "シンタックスハイライトを含める"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "スタイルを含める"; + diff --git a/MacDown/Localization/ja.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..9768ca3b --- /dev/null +++ b/MacDown/Localization/ja.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "エディタと連動してプレビューもスクロール"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "動作"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "エディタを右側に表示"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "アップデート"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "リンク先のファイルを自動的に作成"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "起動時に必ずドキュメントを開く"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "プレビューを自動的に更新"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "単語数を表示"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "プレリリースを含める"; + diff --git a/MacDown/Localization/ja.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..1bd36bac --- /dev/null +++ b/MacDown/Localization/ja.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "表示"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "リロード"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "数式のサポートにはインターネット接続が必要です."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "LaTeX 風の数式シンタックス"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "コードブロックをシンタックスハイライト"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "ドルマーク ($) をインラインデリミタとして使用"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "カスタム"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "改行をそのまま表示"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "行番号を表示"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "テーマ:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "エディタのフォントサイズに応じてプレビューを拡大"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "デフォルトパス:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Jekyll のフロントマッタを検出"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "チェックリストシンタックス"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "目次シンタックス"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "なし"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "言語名"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "アクセサリ:"; + diff --git a/MacDown/Localization/ja.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..1b3cda32 --- /dev/null +++ b/MacDown/Localization/ja.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "脚注"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "引用"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "ハイライト"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "単語内強調"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "別行立てコードブロック"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "下線"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "打ち消し線"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "自動リンク"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "ブロックフォーマット"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "インラインフォーマット"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "上付き文字"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "ドキュメントフォーマット"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "表組み"; + diff --git a/MacDown/Localization/ja.lproj/MainMenu.strings b/MacDown/Localization/ja.lproj/MainMenu.strings new file mode 100644 index 00000000..2568a7f1 --- /dev/null +++ b/MacDown/Localization/ja.lproj/MainMenu.strings @@ -0,0 +1,348 @@ +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "見出し 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "検索"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "フルスクリーンにする"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "ハイライト"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "変換"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "スペル"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "スピーチ"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "検索"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "強調"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "MacDown を終了"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "編集"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "MacDown について"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "エクスポート"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "やり直す"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "アップデートを確認…"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "打ち消し線"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "置換"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "スマートコピー/ペースト"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "スペルを自動的に修正"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "下線"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "メインメニュー"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "見出し 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "環境設定…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "別名で保存…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "見出し 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "閉じる"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "スペルと文法"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "表示"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "ヘルプ"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "置換"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "リンク"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "テキスト置換"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "スペルと文法を表示"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "見出しレベルを変更"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "開く…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "左へシフト"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "保存時の状態に戻す"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "すべてを表示"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "すべてを前面に"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "フォーマット"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "見出し 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "サービス"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "左ペイン 3:1 右ペイン"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "最小化"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "MacDown を隠す"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "前を検索"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "読み上げを停止"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "プラグイン"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "拡大/縮小"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "強い強調"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "すべてを選択"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "選択部分へ移動"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "エクスポート"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "プレビューペインを隠す"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "ウィンドウ"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "語頭を大文字にする"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "左ペイン 1:3 右ペイン"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "ほかを隠す"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "レンダリング"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "画像"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "編集"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "新規"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "検索…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "検索と置換…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "読み上げを開始"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "印刷…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "ウィンドウ"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "プラグイン"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "ファイル"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "選択部分を検索"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "変換"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "小文字にする"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "ファイル"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "取り消す"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "見出しレベルを変更"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "右へシフト"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "ペースト"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "左ペイン 1:1 右ペイン"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "スマート引用符"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "書類を今すぐチェック"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "サービス"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "コメント"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "インラインコード"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "箇条書きリスト"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "番号付きリスト"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "フォーマット"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "見出し 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "スペルと一緒に文法をチェック"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "最近使った項目を開く"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "削除"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "保存…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "次を検索"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "ページ設定…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "入力中にスペルチェック"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "スマートダッシュ記号"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "データ検出"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "最近使った項目を開く"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "HTML をコピー"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "ブロック引用"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "カット"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown ヘルプ"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "メニューをクリア"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "大文字にする"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "エディタペインを隠す"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "見出し 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "ヘルプ"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "コピー"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "段落"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "表示"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "スピーチ"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "置換を表示"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "新しい段落"; + diff --git a/MacDown/Localization/sk.lproj/Credits.rtf b/MacDown/Localization/sk.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/sk.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/sk.lproj/InfoPlist.strings b/MacDown/Localization/sk.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sk.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sk.lproj/Localizable.strings b/MacDown/Localization/sk.lproj/Localizable.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sk.lproj/Localizable.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sk.lproj/MPDocument.strings b/MacDown/Localization/sk.lproj/MPDocument.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sk.lproj/MPDocument.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sk.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..8f5c6079 --- /dev/null +++ b/MacDown/Localization/sk.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "Značka zoznamu:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← skočí na prvý znak v riadku"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Znak mínus)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Správanie"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Zmeniť..."; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Zabezpečiť nový riadok na konci súboru po uložení"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Odsadenia textu:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Odhaliť"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Načítať"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Riadkovanie:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Automatické zvyšovanie číslovania v usporiadaných zoznamoch"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Vkladať medzery namiesto tabov"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Obmedziť šírku editora na"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Hviezdička)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Základné písmo:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Rolovať za koniec"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Automatické dopĺňanie zodpovedajúcich znakov"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Téma:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automaticky vložiť odsadenie riadku pre aktuálny blok"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Znak plus)"; + diff --git a/MacDown/Localization/sk.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/sk.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..c39919f9 --- /dev/null +++ b/MacDown/Localization/sk.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Zahrnúť zvýraznenie syntaxe"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Zahrnúť štýly"; + diff --git a/MacDown/Localization/sk.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..0a6141e0 --- /dev/null +++ b/MacDown/Localization/sk.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,12 @@ +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Synchronizovať posuvník ukážky pri rolovaní editora"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Správanie"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Editor umiestniť na pravú stranu"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Aktualizovať"; + diff --git a/MacDown/Localization/sk.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..cf751377 --- /dev/null +++ b/MacDown/Localization/sk.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,21 @@ +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Odhaliť"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Načítať"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Podpora matematiky vyžaduje internetové pripojenie."; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntakticky zvýraznený blok kódov"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Použite znak dolára ($) ako oddeľovač v riadku"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Téma:"; + diff --git a/MacDown/Localization/sk.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sk.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sk.lproj/MainMenu.strings b/MacDown/Localization/sk.lproj/MainMenu.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sk.lproj/MainMenu.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/InfoPlist.strings b/MacDown/Localization/sv.lproj/InfoPlist.strings index 477b28ff..dc62739d 100644 --- a/MacDown/Localization/sv.lproj/InfoPlist.strings +++ b/MacDown/Localization/sv.lproj/InfoPlist.strings @@ -1,2 +1 @@ -/* Localized versions of Info.plist keys */ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/Localizable.strings b/MacDown/Localization/sv.lproj/Localizable.strings index 89733c24..b7286295 100644 --- a/MacDown/Localization/sv.lproj/Localizable.strings +++ b/MacDown/Localization/sv.lproj/Localizable.strings @@ -1,15 +1,44 @@ -/* - Localizable.strings - MacDown +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (inga mellanslag);%@ tecken (inga mellanslag)"; - Created by Tzu-ping Chung on 14/7. - Copyright (c) 2014 Tzu-ping Chung . All rights reserved. -*/ +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ tecken;%@ tecken"; -"JJ_PLURAL_FORM_RULE" = "1"; +/* Preference pane title. */ +"Editor" = "Redigering"; -"WORDS_PLURAL_STRING" = "%@ word;%@ words"; +/* preview navigation error message */ +"File not found at path: +%@" = "Fil kunde inte hittas på sökväg: +%@"; -"CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; +/* Preference pane title. */ +"General" = "Allmänt"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "Dölj redigerings-vy"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "Dölj förhandsvisnings-vy"; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* Preferences window title. */ +"Preferences" = "Inställningar"; + +/* Preference pane title. */ +"Rendering" = "Rendering"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "Återställ redigerings-vy"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "Återställ förhandsvisnings-vy"; + +/* default filename if no title can be determined */ +"Untitled" = "Namnlöst"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ ord;%@ ord"; -"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; diff --git a/MacDown/Localization/sv.lproj/MPDocument.strings b/MacDown/Localization/sv.lproj/MPDocument.strings index 8b137891..dc62739d 100644 --- a/MacDown/Localization/sv.lproj/MPDocument.strings +++ b/MacDown/Localization/sv.lproj/MPDocument.strings @@ -1 +1 @@ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings index 52b99009..05ccacdf 100644 --- a/MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings @@ -1,72 +1,30 @@ - -/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ -"0Bc-iD-VCh.title" = "List marker:"; - -/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ -"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; - /* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ -"2yJ-j5-PLm.title" = "- (Minus sign)"; +"2yJ-j5-PLm.title" = "- (minus)"; /* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ -"6JP-Pc-JFd.title" = "Behavior"; +"6JP-Pc-JFd.title" = "Beteende"; /* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ -"8bz-cc-gLF.title" = "Change…"; - -/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ -"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; - -/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "BmJ-Oh-va6"; */ -"BmJ-Oh-va6.title" = "Item 2"; - -/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ -"Ee6-Cj-SWW.title" = "Text insets:"; +"8bz-cc-gLF.title" = "Ändra…"; /* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; +"GHX-3h-1HI.ibShadowedLabels[0]" = "Visa"; /* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; - -/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "Ia1-VG-EWI"; */ -"Ia1-VG-EWI.title" = "OtherViews"; +"GHX-3h-1HI.ibShadowedLabels[1]" = "Ladda om"; /* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ -"InD-Fc-CTS.title" = "Line spacing:"; - -/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ -"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; - -/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ -"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; +"InD-Fc-CTS.title" = "Rad-avstånd:"; /* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ -"bhL-NA-9No.title" = "Limit editor width to"; +"bhL-NA-9No.title" = "Begränsa redigerings-vyn's bredd till"; /* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ -"bnJ-BQ-mHV.title" = "* (Asterisk)"; - -/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ -"eXF-SL-hBq.title" = "Base font:"; - -/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ -"g5w-Qw-Khw.title" = "×"; - -/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ -"nBR-LK-G9a.title" = "Scroll past end"; - -/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ -"o4K-iG-sGA.title" = "Auto-complete matching characters"; - -/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "qML-FL-WrV"; */ -"qML-FL-WrV.title" = "Item 3"; +"bnJ-BQ-mHV.title" = "* (asterisk)"; /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ -"vA9-IT-8Z7.title" = "Theme:"; - -/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ -"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; +"vA9-IT-8Z7.title" = "Tema:"; /* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ -"zX4-JY-wTT.title" = "+ (Plus sign)"; +"zX4-JY-wTT.title" = "+ (plus)"; + diff --git a/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings index 6b790377..dc62739d 100644 --- a/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings @@ -1,6 +1 @@ - -/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ -"1f7-JB-VR1.title" = "Include syntax highlighting"; - -/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ -"fod-Ff-UTI.title" = "Include styles"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings index 46298ad4..f1cbb2bc 100644 --- a/MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings @@ -1,27 +1,21 @@ - /* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ -"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; - -/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ -"Nma-PL-ZvX.title" = "Behavior"; +"2Uj-Sx-FjV.title" = "Synkronisera förhandsvisnings-scrollning med regierings-vyn's scrollning"; /* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ -"bUn-PQ-5Ez.title" = "Put editor on the right"; +"bUn-PQ-5Ez.title" = "Redigerings-vy till höger"; /* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ -"eLn-fW-Agu.title" = "Update"; - -/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ -"hpF-zP-3cM.title" = "Automatically create files for link targets"; +"eLn-fW-Agu.title" = "Uppdatera"; /* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ -"l9N-wk-WRY.title" = "Ensure open document on launch"; +"l9N-wk-WRY.title" = "Öppna dokument vid start"; /* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ -"npz-xj-plX.title" = "Update preview automatically as you type"; +"npz-xj-plX.title" = "Uppdatera förhandsvisning automatiskt när du skriver"; /* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ -"oeW-bF-ybW.title" = "Show word count"; +"oeW-bF-ybW.title" = "Visa antal ord"; /* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ -"vbz-fv-8BX.title" = "Include pre-releases"; +"vbz-fv-8BX.title" = "Inkludera förhands-versioner"; + diff --git a/MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings index adb2c73b..5518c78d 100644 --- a/MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings @@ -1,57 +1,39 @@ - /* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Visa fil"; /* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Ladda om"; /* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ -"5Ch-dG-juL.title" = "Math support requires Internet connection."; +"5Ch-dG-juL.title" = "Matematik-stöd kräver Internet-uppkoppling"; /* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ -"6vg-3f-KWk.title" = "TeX-like math syntax"; +"6vg-3f-KWk.title" = "Matematik-synax liknande TeX"; /* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ "9I3-I7-HLu.title" = "CSS:"; -/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ -"BuQ-02-oQB.title" = "Syntax highlighted code block"; - /* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ -"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; - -/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ -"Jmq-wq-Dux.title" = "Custom"; - -/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ -"Sty-qG-J6K.title" = "Render newline literally"; +"GF9-Dm-IoB.title" = "Använd dollar-tecken ($) som inline delimiter"; /* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ -"WZa-V6-vvf.title" = "Show line numbers"; +"WZa-V6-vvf.title" = "Visa radnummer"; /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ -"a6o-qD-AIp.title" = "Theme:"; +"a6o-qD-AIp.title" = "Tema:"; /* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ -"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; +"aWw-Wb-pBl.title" = "Förhandsvisning skalas baserat på redigeraren's font-storlek"; /* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ -"e1A-Mm-svq.title" = "Default path:"; - -/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ -"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; +"e1A-Mm-svq.title" = "Standard-sökväg:"; /* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ -"kBf-iW-HlH.title" = "Task list syntax"; - -/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ -"nvS-dZ-eHT.title" = "Detect table of contents token"; +"kBf-iW-HlH.title" = "Checklist-syntax"; /* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ -"pWW-vM-8JK.title" = "None"; +"pWW-vM-8JK.title" = "Ingen"; /* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ -"qFd-cs-OtZ.title" = "Language name"; +"qFd-cs-OtZ.title" = "Språknamn"; -/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ -"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings index 0236c34b..c2b70f4f 100644 --- a/MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings @@ -1,33 +1,20 @@ - /* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ -"0yU-vT-72e.title" = "Footnote"; +"0yU-vT-72e.title" = "Fotnot"; /* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ -"2lB-hq-5eX.title" = "Quote"; - -/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ -"8kI-gm-5Lo.title" = "Highlight"; - -/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ -"D7l-nP-P0y.title" = "Intra-word emphasis"; - -/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ -"ELg-sx-vIf.title" = "Fenced code block"; +"2lB-hq-5eX.title" = "Citat"; /* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ -"Gdr-Ro-ZnW.title" = "Underline"; +"Gdr-Ro-ZnW.title" = "Understrykning"; /* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ -"RjP-zE-c6b.title" = "Strikethrough"; - -/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ -"Roe-rh-8f9.title" = "Autolink"; +"RjP-zE-c6b.title" = "Genomstrykning"; /* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ -"TXy-fD-S4Y.title" = "Block formatting"; +"TXy-fD-S4Y.title" = "Block-formattering"; /* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ -"Ycc-Px-jbu.title" = "Inline formatting"; +"Ycc-Px-jbu.title" = "Inline-formattering"; /* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ "aSK-nR-xMr.title" = "Smartypants"; @@ -36,7 +23,8 @@ "k2n-VN-cKT.title" = "Superscript"; /* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ -"x36-52-U0p.title" = "Document formatting"; +"x36-52-U0p.title" = "Dokument-formattering"; /* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ -"z8g-3M-hbc.title" = "Table"; +"z8g-3M-hbc.title" = "Tabell"; + diff --git a/MacDown/Localization/sv.lproj/MainMenu.strings b/MacDown/Localization/sv.lproj/MainMenu.strings index 2dcaf262..5774ae0e 100644 --- a/MacDown/Localization/sv.lproj/MainMenu.strings +++ b/MacDown/Localization/sv.lproj/MainMenu.strings @@ -1,348 +1,249 @@ - /* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ -"0WP-T5-QxP.title" = "Header 2"; +"0WP-T5-QxP.title" = "Rubrik 2"; /* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ "1Xt-HY-uBw.title" = "MacDown"; /* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ -"1b7-l0-nxx.title" = "Find"; +"1b7-l0-nxx.title" = "Sök"; /* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ -"1gz-YB-DZE.title" = "Enter Full Screen"; - -/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ -"2Os-ij-Aup.title" = "Highlight"; - -/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ -"2oI-Rn-ZJC.title" = "Transformations"; +"1gz-YB-DZE.title" = "Helskärmsläge"; /* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ -"3IN-sU-3Bg.title" = "Spelling"; +"3IN-sU-3Bg.title" = "Stavning"; /* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ -"3rS-ZA-NoH.title" = "Speech"; +"3rS-ZA-NoH.title" = "Tal"; /* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ -"4EN-yA-p0u.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ -"4UH-k2-fgy.title" = "Emphasize"; +"4EN-yA-p0u.title" = "Sök"; /* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ -"4sb-4s-VLi.title" = "Quit MacDown"; +"4sb-4s-VLi.title" = "Avsluta MacDown"; /* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ -"5QF-Oa-p0T.title" = "Edit"; +"5QF-Oa-p0T.title" = "Redigera"; /* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ -"5kV-Vb-QxS.title" = "About MacDown"; +"5kV-Vb-QxS.title" = "Om MacDown"; /* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ -"5mp-ev-1el.title" = "Export"; +"5mp-ev-1el.title" = "Exportera"; /* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ -"6dh-zS-Vam.title" = "Redo"; - -/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ -"78Y-hA-62v.title" = "Correct Spelling Automatically"; +"6dh-zS-Vam.title" = "Gör om"; /* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ -"8xL-1V-VPX.title" = "Check for Updates…"; - -/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ -"98U-cK-P7J.title" = "Underline"; +"8xL-1V-VPX.title" = "Kolla efter uppdateringar..."; /* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ -"9CN-Qi-Fln.title" = "Strikethrough"; +"9CN-Qi-Fln.title" = "Genomstrykt"; -/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ -"9ic-FL-obx.title" = "Substitutions"; +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Rätta stavning automatiskt"; -/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ -"9yt-4B-nSM.title" = "Smart Copy/Paste"; +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Understrykt"; /* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ -"AYu-sK-qS6.title" = "Main Menu"; +"AYu-sK-qS6.title" = "Huvudmeny"; /* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ -"B98-b8-che.title" = "Header 4"; +"B98-b8-che.title" = "Rubrik 4"; /* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ -"BOF-NM-1cW.title" = "Preferences…"; +"BOF-NM-1cW.title" = "Inställningar..."; /* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ -"Bw7-FT-i3A.title" = "Save As…"; +"Bw7-FT-i3A.title" = "Spara som"; /* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ -"D4C-PE-qJi.title" = "Header 6"; +"D4C-PE-qJi.title" = "Rubrik 6"; /* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ -"DVo-aG-piG.title" = "Close"; +"DVo-aG-piG.title" = "Stäng"; /* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ -"Dv1-io-Yv7.title" = "Spelling and Grammar"; - -/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ -"EQZ-Zp-VNE.title" = "View"; +"Dv1-io-Yv7.title" = "Stavning och grammatik"; /* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ -"F2S-fz-NVQ.title" = "Help"; - -/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ -"FeM-D8-WVr.title" = "Substitutions"; +"F2S-fz-NVQ.title" = "Hjälp"; /* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ -"GIg-Wo-P8m.title" = "Link"; - -/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ -"HFQ-gK-NFA.title" = "Text Replacement"; +"GIg-Wo-P8m.title" = "Länk"; /* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ -"HFo-cy-zxI.title" = "Show Spelling and Grammar"; +"HFo-cy-zxI.title" = "Visa stavning och grammatik"; /* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ -"I8Y-e8-XDx.title" = "Convert To"; +"I8Y-e8-XDx.title" = "Konvertera till"; /* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ -"IAo-SY-fd9.title" = "Open…"; - -/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ -"Jzs-tR-jkL.title" = "Shift Left"; - -/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ -"KaW-ft-85H.title" = "Revert to Saved"; - -/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ -"Kd2-mp-pUS.title" = "Show All"; +"IAo-SY-fd9.title" = "Öppna…"; /* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ -"LE2-aR-0XJ.title" = "Bring All to Front"; +"LE2-aR-0XJ.title" = "Lägg alla överst"; /* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ -"N43-55-MPb.title" = "Format"; +"N43-55-MPb.title" = "Formattera"; /* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ -"NLm-rz-EyT.title" = "Header 1"; - -/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ -"NMo-om-nkz.title" = "Services"; +"NLm-rz-EyT.title" = "Rubrik 1"; /* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ -"NZX-Ev-sWt.title" = "Left 3:1 Right"; +"NZX-Ev-sWt.title" = "Vänster 3:1 höger"; /* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ -"OY7-WF-poV.title" = "Minimize"; +"OY7-WF-poV.title" = "Minimera"; /* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ -"Olw-nP-bQN.title" = "Hide MacDown"; +"Olw-nP-bQN.title" = "Göm MacDown"; /* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ -"OwM-mh-QMV.title" = "Find Previous"; - -/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ -"Oyz-dy-DGm.title" = "Stop Speaking"; - -/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ -"Ppl-BS-KtG.title" = "Plug-ins"; +"OwM-mh-QMV.title" = "Sök föregående"; /* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ -"R4o-n2-Eq4.title" = "Zoom"; - -/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ -"Rb9-MG-IjX.title" = "Strong"; - -/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ -"Ruw-6m-B2m.title" = "Select All"; - -/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ -"S0p-oC-mLd.title" = "Jump to Selection"; +"R4o-n2-Eq4.title" = "Zooma"; /* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ -"SJM-Pp-ywb.title" = "Export"; - -/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ -"T74-vt-YUA.title" = "Hide Preview Pane"; +"SJM-Pp-ywb.title" = "Exportera"; /* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ -"Td7-aD-5lo.title" = "Window"; +"Td7-aD-5lo.title" = "Fönster"; /* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ -"UEZ-Bs-lqG.title" = "Capitalize"; +"UEZ-Bs-lqG.title" = "Börja med stor bokstav"; /* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ -"VW7-VH-9yl.title" = "Left 1:3 Right"; +"VW7-VH-9yl.title" = "Vänster 1:3 höger"; /* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ -"Vdr-fp-XzO.title" = "Hide Others"; +"Vdr-fp-XzO.title" = "Dölj andra"; /* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ -"Vh1-jg-bbV.title" = "Render Markdown"; +"Vh1-jg-bbV.title" = "Rendera Markdown"; /* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ -"VkR-aw-5AU.title" = "Image"; +"VkR-aw-5AU.title" = "Bild"; /* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ -"W48-6f-4Dl.title" = "Edit"; +"W48-6f-4Dl.title" = "Redigera"; /* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ -"Was-JA-tGl.title" = "New"; +"Was-JA-tGl.title" = "Ny"; /* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ -"XFN-MJ-RrW.title" = "PDF…"; +"XFN-MJ-RrW.title" = "PDF..."; /* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ -"Xz5-n4-O0W.title" = "Find…"; +"Xz5-n4-O0W.title" = "Sök…"; /* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ -"YEy-JH-Tfz.title" = "Find and Replace…"; - -/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ -"Ynk-f8-cLZ.title" = "Start Speaking"; +"YEy-JH-Tfz.title" = "Sök och ersätt…"; /* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ -"aTl-1u-JFS.title" = "Print…"; +"aTl-1u-JFS.title" = "Skriv ut…"; /* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ -"aUF-d1-5bR.title" = "Window"; +"aUF-d1-5bR.title" = "Fönster"; /* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ -"bMu-UN-Yfx.title" = "Plug-ins"; +"bMu-UN-Yfx.title" = "Plugins"; /* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ -"bib-Uj-vzu.title" = "File"; +"bib-Uj-vzu.title" = "Arkiv"; /* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ -"buJ-ug-pKt.title" = "Use Selection for Find"; - -/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ -"c8a-y6-VQd.title" = "Transformations"; +"buJ-ug-pKt.title" = "Använd markering för sökning"; /* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ -"d9M-CD-aMd.title" = "Make Lower Case"; +"d9M-CD-aMd.title" = "Små bokstäver"; /* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ "dGm-Yl-i3Z.title" = "HTML…"; /* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ -"dMs-cI-mzQ.title" = "File"; +"dMs-cI-mzQ.title" = "Arkiv"; /* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ -"dRJ-4n-Yzg.title" = "Undo"; - -/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ -"e8h-vX-NQb.title" = "Convert To"; - -/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ -"g9Y-GM-gdh.title" = "Shift Right"; +"dRJ-4n-Yzg.title" = "Ångra"; /* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ -"gVA-U4-sdL.title" = "Paste"; +"gVA-U4-sdL.title" = "Klistra in"; /* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ -"hOV-YQ-vzy.title" = "Left 1:1 Right"; - -/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ -"hQb-2v-fYv.title" = "Smart Quotes"; - -/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ -"hz2-CU-CR7.title" = "Check Document Now"; +"hOV-YQ-vzy.title" = "Vänster 1:1 höger"; /* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ -"hz9-B4-Xy5.title" = "Services"; +"hz9-B4-Xy5.title" = "Tjänster"; /* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ -"i8c-gf-w29.title" = "Comment"; - -/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ -"iRQ-Q6-N4K.title" = "Inline Code"; +"i8c-gf-w29.title" = "Kommentar"; /* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ -"jn0-Kb-yH6.title" = "Unordered List"; +"jn0-Kb-yH6.title" = "Onumrerad lista"; /* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ -"jn0-Kb-yH7.title" = "Ordered List"; - -/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ -"jxT-CU-nIS.title" = "Format"; +"jn0-Kb-yH7.title" = "Numrerad lista"; /* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ -"kSO-QG-dHa.title" = "Header 3"; +"kSO-QG-dHa.title" = "Rubrik 3"; /* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ -"mK6-2p-4JG.title" = "Check Grammar With Spelling"; +"mK6-2p-4JG.title" = "Kontrollera grammatik tillsammans med stavning"; /* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ -"oas-Oc-fiZ.title" = "Open Recent"; +"oas-Oc-fiZ.title" = "Öppna senaste"; /* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ -"pa3-QI-u2k.title" = "Delete"; +"pa3-QI-u2k.title" = "Ta bort"; /* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ -"pxx-59-PXV.title" = "Save…"; +"pxx-59-PXV.title" = "Spara…"; /* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ -"q09-fT-Sye.title" = "Find Next"; - -/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ -"qIS-W8-SiK.title" = "Page Setup…"; +"q09-fT-Sye.title" = "Sök nästa"; /* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ -"rbD-Rh-wIN.title" = "Check Spelling While Typing"; - -/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ -"rgM-f4-ycn.title" = "Smart Dashes"; - -/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ -"tRr-pd-1PS.title" = "Data Detectors"; +"rbD-Rh-wIN.title" = "Kontrollera stavning medan jag skriver"; /* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ -"tXI-mr-wws.title" = "Open Recent"; +"tXI-mr-wws.title" = "Öppna senaste"; /* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ -"ts7-v5-Htm.title" = "Copy HTML"; - -/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ -"twd-Mb-qNx.title" = "Blockquote"; +"ts7-v5-Htm.title" = "Kopiera HTML"; /* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ "uQy-DD-JDr.title" = "MacDown"; /* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ -"uRl-iY-unG.title" = "Cut"; +"uRl-iY-unG.title" = "Klipp ut"; /* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ -"ugx-EN-xKu.title" = "MacDown Help"; - -/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ -"vNY-rz-j42.title" = "Clear Menu"; +"ugx-EN-xKu.title" = "MacDown hjälp"; /* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ -"vmV-6d-7jI.title" = "Make Upper Case"; +"vmV-6d-7jI.title" = "Stora bokstäver"; /* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ -"wHk-AQ-iOQ.title" = "Hide Editor Pane"; +"wHk-AQ-iOQ.title" = "Dölj redigerings-vy"; /* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ -"wlq-BA-PKH.title" = "Header 5"; +"wlq-BA-PKH.title" = "Rubrik 5"; /* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ -"wpr-3q-Mcd.title" = "Help"; +"wpr-3q-Mcd.title" = "Hjälp"; /* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ -"x3v-GG-iWU.title" = "Copy"; +"x3v-GG-iWU.title" = "Kopiera"; /* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ -"xN5-GU-ASF.title" = "Paragraph"; +"xN5-GU-ASF.title" = "Paragraf"; /* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ -"xSb-2f-W1r.title" = "View"; - -/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ -"xrE-MZ-jX0.title" = "Speech"; - -/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ -"z6F-FW-3nz.title" = "Show Substitutions"; +"xSb-2f-W1r.title" = "Innehåll"; /* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ -"zHE-JL-8eu.title" = "New Paragraph"; +"zHE-JL-8eu.title" = "Ny paragraf"; + diff --git a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings index 477b28ff..2809b900 100644 --- a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings +++ b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings @@ -1,2 +1,3 @@ -/* Localized versions of Info.plist keys */ +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; diff --git a/MacDown/Localization/zh-Hans.lproj/Localizable.strings b/MacDown/Localization/zh-Hans.lproj/Localizable.strings index 89733c24..69314388 100644 --- a/MacDown/Localization/zh-Hans.lproj/Localizable.strings +++ b/MacDown/Localization/zh-Hans.lproj/Localizable.strings @@ -1,15 +1,30 @@ -/* - Localizable.strings - MacDown +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "隐藏编辑窗口"; - Created by Tzu-ping Chung on 14/7. - Copyright (c) 2014 Tzu-ping Chung . All rights reserved. -*/ +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "隐藏预览窗口"; -"JJ_PLURAL_FORM_RULE" = "1"; +/* Install shell utility button */ +"Install" = "安装"; -"WORDS_PLURAL_STRING" = "%@ word;%@ words"; +/* Preference pane title. */ +"Markdown" = "Markdown"; -"CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; +/* Preferences window title. */ +"Preferences" = "偏好设置"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "Shell 工具已安装"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "Shell 工具未安装"; + +/* Preference pane title. */ +"Terminal" = "终端"; + +/* Uninstall shell utility button */ +"Uninstall" = "卸载"; + +/* default filename if no title can be determined */ +"Untitled" = "未命名"; -"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPDocument.strings b/MacDown/Localization/zh-Hans.lproj/MPDocument.strings index 8b137891..dc62739d 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPDocument.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPDocument.strings @@ -1 +1 @@ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings index 52b99009..b5ceb00f 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings @@ -1,72 +1,36 @@ - -/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ -"0Bc-iD-VCh.title" = "List marker:"; - /* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ -"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; +"2Yf-FT-MDH.title" = "⌘← 跳至本行的第一个非空白字符"; /* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ -"2yJ-j5-PLm.title" = "- (Minus sign)"; - -/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ -"6JP-Pc-JFd.title" = "Behavior"; - -/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ -"8bz-cc-gLF.title" = "Change…"; +"2yJ-j5-PLm.title" = "- (减号)"; /* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ -"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; - -/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "BmJ-Oh-va6"; */ -"BmJ-Oh-va6.title" = "Item 2"; - -/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ -"Ee6-Cj-SWW.title" = "Text insets:"; +"9Wp-5V-GeQ.title" = "在保存时确保文末有换行符"; /* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; +"GHX-3h-1HI.ibShadowedLabels[0]" = "文件夹"; /* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; - -/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "Ia1-VG-EWI"; */ -"Ia1-VG-EWI.title" = "OtherViews"; +"GHX-3h-1HI.ibShadowedLabels[1]" = "重新加载"; /* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ -"InD-Fc-CTS.title" = "Line spacing:"; - -/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ -"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; - -/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ -"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; +"InD-Fc-CTS.title" = "行间距"; /* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ -"bhL-NA-9No.title" = "Limit editor width to"; +"bhL-NA-9No.title" = "限制编辑窗口最大宽度为:"; /* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ -"bnJ-BQ-mHV.title" = "* (Asterisk)"; +"bnJ-BQ-mHV.title" = "* (星号)"; /* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ -"eXF-SL-hBq.title" = "Base font:"; +"eXF-SL-hBq.title" = "默认字体:"; /* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ "g5w-Qw-Khw.title" = "×"; -/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ -"nBR-LK-G9a.title" = "Scroll past end"; - -/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ -"o4K-iG-sGA.title" = "Auto-complete matching characters"; - -/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "qML-FL-WrV"; */ -"qML-FL-WrV.title" = "Item 3"; - /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ -"vA9-IT-8Z7.title" = "Theme:"; - -/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ -"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; +"vA9-IT-8Z7.title" = "主题:"; /* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ -"zX4-JY-wTT.title" = "+ (Plus sign)"; +"zX4-JY-wTT.title" = "+ (加号)"; + diff --git a/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings index 6b790377..dc62739d 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings @@ -1,6 +1 @@ - -/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ -"1f7-JB-VR1.title" = "Include syntax highlighting"; - -/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ -"fod-Ff-UTI.title" = "Include styles"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings index 46298ad4..c22135f1 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings @@ -1,27 +1,12 @@ - /* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ -"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; - -/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ -"Nma-PL-ZvX.title" = "Behavior"; +"2Uj-Sx-FjV.title" = "预览窗口同步滚动"; /* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ -"bUn-PQ-5Ez.title" = "Put editor on the right"; +"bUn-PQ-5Ez.title" = "编辑窗口置于右侧"; /* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ -"eLn-fW-Agu.title" = "Update"; - -/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ -"hpF-zP-3cM.title" = "Automatically create files for link targets"; - -/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ -"l9N-wk-WRY.title" = "Ensure open document on launch"; - -/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ -"npz-xj-plX.title" = "Update preview automatically as you type"; - -/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ -"oeW-bF-ybW.title" = "Show word count"; +"eLn-fW-Agu.title" = "更新"; /* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ -"vbz-fv-8BX.title" = "Include pre-releases"; +"vbz-fv-8BX.title" = "包括预发行版本"; + diff --git a/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings index adb2c73b..b3d0822e 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings @@ -1,57 +1,18 @@ - -/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; - /* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; - -/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ -"5Ch-dG-juL.title" = "Math support requires Internet connection."; - -/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ -"6vg-3f-KWk.title" = "TeX-like math syntax"; +"0rH-I9-Dxr.ibShadowedLabels[1]" = "重新载入"; /* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ "9I3-I7-HLu.title" = "CSS:"; -/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ -"BuQ-02-oQB.title" = "Syntax highlighted code block"; - -/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ -"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; - -/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ -"Jmq-wq-Dux.title" = "Custom"; - -/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ -"Sty-qG-J6K.title" = "Render newline literally"; - /* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ -"WZa-V6-vvf.title" = "Show line numbers"; +"WZa-V6-vvf.title" = "显示行数"; /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ -"a6o-qD-AIp.title" = "Theme:"; - -/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ -"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; +"a6o-qD-AIp.title" = "主题:"; /* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ -"e1A-Mm-svq.title" = "Default path:"; +"e1A-Mm-svq.title" = "默认路径:"; /* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ -"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; - -/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ -"kBf-iW-HlH.title" = "Task list syntax"; - -/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ -"nvS-dZ-eHT.title" = "Detect table of contents token"; - -/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ -"pWW-vM-8JK.title" = "None"; - -/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ -"qFd-cs-OtZ.title" = "Language name"; +"iXi-Pv-mFl.title" = "检测 Jekyll 头部参数"; -/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ -"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings index 0236c34b..431fe323 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings @@ -1,42 +1,9 @@ - -/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ -"0yU-vT-72e.title" = "Footnote"; - -/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ -"2lB-hq-5eX.title" = "Quote"; - /* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ -"8kI-gm-5Lo.title" = "Highlight"; - -/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ -"D7l-nP-P0y.title" = "Intra-word emphasis"; - -/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ -"ELg-sx-vIf.title" = "Fenced code block"; +"8kI-gm-5Lo.title" = "高亮"; /* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ -"Gdr-Ro-ZnW.title" = "Underline"; +"Gdr-Ro-ZnW.title" = "下划线"; /* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ -"RjP-zE-c6b.title" = "Strikethrough"; - -/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ -"Roe-rh-8f9.title" = "Autolink"; - -/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ -"TXy-fD-S4Y.title" = "Block formatting"; - -/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ -"Ycc-Px-jbu.title" = "Inline formatting"; - -/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ -"aSK-nR-xMr.title" = "Smartypants"; - -/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ -"k2n-VN-cKT.title" = "Superscript"; - -/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ -"x36-52-U0p.title" = "Document formatting"; +"RjP-zE-c6b.title" = "删除线"; -/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ -"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/zh-Hans.lproj/MainMenu.strings b/MacDown/Localization/zh-Hans.lproj/MainMenu.strings index 2dcaf262..4451b725 100644 --- a/MacDown/Localization/zh-Hans.lproj/MainMenu.strings +++ b/MacDown/Localization/zh-Hans.lproj/MainMenu.strings @@ -1,348 +1,213 @@ - /* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ -"0WP-T5-QxP.title" = "Header 2"; +"0WP-T5-QxP.title" = "二级标题"; /* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ "1Xt-HY-uBw.title" = "MacDown"; /* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ -"1b7-l0-nxx.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ -"1gz-YB-DZE.title" = "Enter Full Screen"; +"1b7-l0-nxx.title" = "查找"; /* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ -"2Os-ij-Aup.title" = "Highlight"; - -/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ -"2oI-Rn-ZJC.title" = "Transformations"; - -/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ -"3IN-sU-3Bg.title" = "Spelling"; - -/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ -"3rS-ZA-NoH.title" = "Speech"; +"2Os-ij-Aup.title" = "高亮"; /* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ -"4EN-yA-p0u.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ -"4UH-k2-fgy.title" = "Emphasize"; +"4EN-yA-p0u.title" = "查找"; /* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ -"4sb-4s-VLi.title" = "Quit MacDown"; +"4sb-4s-VLi.title" = "退出 MacDown"; /* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ -"5QF-Oa-p0T.title" = "Edit"; +"5QF-Oa-p0T.title" = "编辑"; /* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ -"5kV-Vb-QxS.title" = "About MacDown"; +"5kV-Vb-QxS.title" = "关于 MacDown"; /* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ -"5mp-ev-1el.title" = "Export"; +"5mp-ev-1el.title" = "导出到"; /* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ -"6dh-zS-Vam.title" = "Redo"; - -/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ -"78Y-hA-62v.title" = "Correct Spelling Automatically"; +"6dh-zS-Vam.title" = "重做"; /* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ -"8xL-1V-VPX.title" = "Check for Updates…"; - -/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ -"98U-cK-P7J.title" = "Underline"; +"8xL-1V-VPX.title" = "检查更新…"; /* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ -"9CN-Qi-Fln.title" = "Strikethrough"; - -/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ -"9ic-FL-obx.title" = "Substitutions"; +"9CN-Qi-Fln.title" = "删除线"; -/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ -"9yt-4B-nSM.title" = "Smart Copy/Paste"; - -/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ -"AYu-sK-qS6.title" = "Main Menu"; +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "自动纠正拼写"; /* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ -"B98-b8-che.title" = "Header 4"; +"B98-b8-che.title" = "四级标题"; /* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ -"BOF-NM-1cW.title" = "Preferences…"; - -/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ -"Bw7-FT-i3A.title" = "Save As…"; +"BOF-NM-1cW.title" = "偏好设置…"; /* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ -"D4C-PE-qJi.title" = "Header 6"; +"D4C-PE-qJi.title" = "六级标题"; /* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ -"DVo-aG-piG.title" = "Close"; +"DVo-aG-piG.title" = "关闭"; /* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ -"Dv1-io-Yv7.title" = "Spelling and Grammar"; - -/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ -"EQZ-Zp-VNE.title" = "View"; +"Dv1-io-Yv7.title" = "拼写和语法"; /* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ -"F2S-fz-NVQ.title" = "Help"; - -/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ -"FeM-D8-WVr.title" = "Substitutions"; - -/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ -"GIg-Wo-P8m.title" = "Link"; - -/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ -"HFQ-gK-NFA.title" = "Text Replacement"; - -/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ -"HFo-cy-zxI.title" = "Show Spelling and Grammar"; +"F2S-fz-NVQ.title" = "帮助"; /* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ -"I8Y-e8-XDx.title" = "Convert To"; +"I8Y-e8-XDx.title" = "转换为"; /* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ -"IAo-SY-fd9.title" = "Open…"; - -/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ -"Jzs-tR-jkL.title" = "Shift Left"; - -/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ -"KaW-ft-85H.title" = "Revert to Saved"; - -/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ -"Kd2-mp-pUS.title" = "Show All"; +"IAo-SY-fd9.title" = "打开..."; /* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ -"LE2-aR-0XJ.title" = "Bring All to Front"; +"LE2-aR-0XJ.title" = "前置全部窗口"; /* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ -"N43-55-MPb.title" = "Format"; +"N43-55-MPb.title" = "格式"; /* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ -"NLm-rz-EyT.title" = "Header 1"; +"NLm-rz-EyT.title" = "一级标题"; /* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ -"NMo-om-nkz.title" = "Services"; - -/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ -"NZX-Ev-sWt.title" = "Left 3:1 Right"; +"NMo-om-nkz.title" = "服务"; /* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ -"OY7-WF-poV.title" = "Minimize"; +"OY7-WF-poV.title" = "最小化"; /* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ -"Olw-nP-bQN.title" = "Hide MacDown"; +"Olw-nP-bQN.title" = "隐藏 MacDown"; /* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ -"OwM-mh-QMV.title" = "Find Previous"; +"OwM-mh-QMV.title" = "查找上一个"; /* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ -"Oyz-dy-DGm.title" = "Stop Speaking"; +"Oyz-dy-DGm.title" = "停止朗读"; /* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ -"Ppl-BS-KtG.title" = "Plug-ins"; +"Ppl-BS-KtG.title" = "插件"; /* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ -"R4o-n2-Eq4.title" = "Zoom"; +"R4o-n2-Eq4.title" = "缩放"; /* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ -"Rb9-MG-IjX.title" = "Strong"; +"Rb9-MG-IjX.title" = "加粗"; /* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ -"Ruw-6m-B2m.title" = "Select All"; - -/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ -"S0p-oC-mLd.title" = "Jump to Selection"; +"Ruw-6m-B2m.title" = "全选"; /* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ -"SJM-Pp-ywb.title" = "Export"; - -/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ -"T74-vt-YUA.title" = "Hide Preview Pane"; +"SJM-Pp-ywb.title" = "导出"; /* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ -"Td7-aD-5lo.title" = "Window"; - -/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ -"UEZ-Bs-lqG.title" = "Capitalize"; - -/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ -"VW7-VH-9yl.title" = "Left 1:3 Right"; - -/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ -"Vdr-fp-XzO.title" = "Hide Others"; - -/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ -"Vh1-jg-bbV.title" = "Render Markdown"; +"Td7-aD-5lo.title" = "窗口"; /* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ -"VkR-aw-5AU.title" = "Image"; +"VkR-aw-5AU.title" = "图片"; /* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ -"W48-6f-4Dl.title" = "Edit"; +"W48-6f-4Dl.title" = "编辑"; /* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ -"Was-JA-tGl.title" = "New"; +"Was-JA-tGl.title" = "新建"; /* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ "XFN-MJ-RrW.title" = "PDF…"; /* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ -"Xz5-n4-O0W.title" = "Find…"; +"Xz5-n4-O0W.title" = "查找..."; /* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ -"YEy-JH-Tfz.title" = "Find and Replace…"; +"YEy-JH-Tfz.title" = "查找和替换"; /* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ -"Ynk-f8-cLZ.title" = "Start Speaking"; +"Ynk-f8-cLZ.title" = "开始朗读"; /* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ -"aTl-1u-JFS.title" = "Print…"; +"aTl-1u-JFS.title" = "打印..."; /* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ -"aUF-d1-5bR.title" = "Window"; +"aUF-d1-5bR.title" = "窗口"; /* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ -"bMu-UN-Yfx.title" = "Plug-ins"; +"bMu-UN-Yfx.title" = "插件"; /* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ -"bib-Uj-vzu.title" = "File"; - -/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ -"buJ-ug-pKt.title" = "Use Selection for Find"; - -/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ -"c8a-y6-VQd.title" = "Transformations"; - -/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ -"d9M-CD-aMd.title" = "Make Lower Case"; +"bib-Uj-vzu.title" = "文件"; /* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ "dGm-Yl-i3Z.title" = "HTML…"; /* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ -"dMs-cI-mzQ.title" = "File"; +"dMs-cI-mzQ.title" = "文件"; /* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ -"dRJ-4n-Yzg.title" = "Undo"; +"dRJ-4n-Yzg.title" = "撤消"; /* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ -"e8h-vX-NQb.title" = "Convert To"; - -/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ -"g9Y-GM-gdh.title" = "Shift Right"; +"e8h-vX-NQb.title" = "转换为"; /* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ -"gVA-U4-sdL.title" = "Paste"; - -/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ -"hOV-YQ-vzy.title" = "Left 1:1 Right"; - -/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ -"hQb-2v-fYv.title" = "Smart Quotes"; - -/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ -"hz2-CU-CR7.title" = "Check Document Now"; +"gVA-U4-sdL.title" = "粘贴"; /* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ -"hz9-B4-Xy5.title" = "Services"; - -/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ -"i8c-gf-w29.title" = "Comment"; - -/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ -"iRQ-Q6-N4K.title" = "Inline Code"; - -/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ -"jn0-Kb-yH6.title" = "Unordered List"; - -/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ -"jn0-Kb-yH7.title" = "Ordered List"; +"hz9-B4-Xy5.title" = "服务"; /* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ -"jxT-CU-nIS.title" = "Format"; +"jxT-CU-nIS.title" = "格式"; /* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ -"kSO-QG-dHa.title" = "Header 3"; +"kSO-QG-dHa.title" = "三级标题"; /* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ -"mK6-2p-4JG.title" = "Check Grammar With Spelling"; +"mK6-2p-4JG.title" = "检查拼写和语法"; /* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ -"oas-Oc-fiZ.title" = "Open Recent"; +"oas-Oc-fiZ.title" = "打开最近使用"; /* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ -"pa3-QI-u2k.title" = "Delete"; +"pa3-QI-u2k.title" = "删除"; /* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ -"pxx-59-PXV.title" = "Save…"; +"pxx-59-PXV.title" = "保存…"; /* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ -"q09-fT-Sye.title" = "Find Next"; +"q09-fT-Sye.title" = "查找下一个"; /* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ -"qIS-W8-SiK.title" = "Page Setup…"; - -/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ -"rbD-Rh-wIN.title" = "Check Spelling While Typing"; - -/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ -"rgM-f4-ycn.title" = "Smart Dashes"; - -/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ -"tRr-pd-1PS.title" = "Data Detectors"; +"qIS-W8-SiK.title" = "页面设置…"; /* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ -"tXI-mr-wws.title" = "Open Recent"; +"tXI-mr-wws.title" = "打开最近使用"; /* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ -"ts7-v5-Htm.title" = "Copy HTML"; - -/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ -"twd-Mb-qNx.title" = "Blockquote"; +"ts7-v5-Htm.title" = "拷贝 HTML 代码"; /* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ "uQy-DD-JDr.title" = "MacDown"; /* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ -"uRl-iY-unG.title" = "Cut"; +"uRl-iY-unG.title" = "剪切"; /* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ -"ugx-EN-xKu.title" = "MacDown Help"; - -/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ -"vNY-rz-j42.title" = "Clear Menu"; - -/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ -"vmV-6d-7jI.title" = "Make Upper Case"; +"ugx-EN-xKu.title" = "MacDown 帮助"; /* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ -"wHk-AQ-iOQ.title" = "Hide Editor Pane"; +"wHk-AQ-iOQ.title" = "隐藏编辑窗口"; /* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ -"wlq-BA-PKH.title" = "Header 5"; +"wlq-BA-PKH.title" = "五级标题"; /* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ -"wpr-3q-Mcd.title" = "Help"; +"wpr-3q-Mcd.title" = "帮助"; /* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ -"x3v-GG-iWU.title" = "Copy"; +"x3v-GG-iWU.title" = "拷贝"; /* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ -"xN5-GU-ASF.title" = "Paragraph"; - -/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ -"xSb-2f-W1r.title" = "View"; - -/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ -"xrE-MZ-jX0.title" = "Speech"; - -/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ -"z6F-FW-3nz.title" = "Show Substitutions"; +"xN5-GU-ASF.title" = "段落"; /* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ -"zHE-JL-8eu.title" = "New Paragraph"; +"zHE-JL-8eu.title" = "新段落"; + diff --git a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings index 477b28ff..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings +++ b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings @@ -1,2 +1 @@ -/* Localized versions of Info.plist keys */ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/Localizable.strings b/MacDown/Localization/zh-Hant.lproj/Localizable.strings index 89733c24..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/Localizable.strings +++ b/MacDown/Localization/zh-Hant.lproj/Localizable.strings @@ -1,15 +1 @@ -/* - Localizable.strings - MacDown - - Created by Tzu-ping Chung on 14/7. - Copyright (c) 2014 Tzu-ping Chung . All rights reserved. -*/ - -"JJ_PLURAL_FORM_RULE" = "1"; - -"WORDS_PLURAL_STRING" = "%@ word;%@ words"; - -"CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; - -"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/MPDocument.strings b/MacDown/Localization/zh-Hant.lproj/MPDocument.strings index 8b137891..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPDocument.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPDocument.strings @@ -1 +1 @@ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings index 52b99009..d8cd4ab0 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPEditorPreferencesViewController.strings @@ -1,72 +1,57 @@ - /* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ -"0Bc-iD-VCh.title" = "List marker:"; +"0Bc-iD-VCh.title" = "列表標記:"; /* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ -"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; +"2Yf-FT-MDH.title" = "⌘← 跳至行內第一個非空白字元"; /* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ -"2yJ-j5-PLm.title" = "- (Minus sign)"; +"2yJ-j5-PLm.title" = "- (減號)"; /* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ -"6JP-Pc-JFd.title" = "Behavior"; +"6JP-Pc-JFd.title" = "行為"; /* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ -"8bz-cc-gLF.title" = "Change…"; +"8bz-cc-gLF.title" = "更改⋯"; /* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ -"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; - -/* Class = "NSMenuItem"; title = "Item 2"; ObjectID = "BmJ-Oh-va6"; */ -"BmJ-Oh-va6.title" = "Item 2"; - -/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ -"Ee6-Cj-SWW.title" = "Text insets:"; +"9Wp-5V-GeQ.title" = "儲存時確認檔案末尾包含空行"; /* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; - -/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; - -/* Class = "NSMenu"; title = "OtherViews"; ObjectID = "Ia1-VG-EWI"; */ -"Ia1-VG-EWI.title" = "OtherViews"; +"GHX-3h-1HI.ibShadowedLabels[0]" = "顯示"; /* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ -"InD-Fc-CTS.title" = "Line spacing:"; +"InD-Fc-CTS.title" = "行距:"; /* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ -"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; +"UPm-G1-Bc6.title" = "自動遞增列表數字"; /* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ -"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; +"XSN-mi-gbk.title" = "Tab 鍵插入空白"; /* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ -"bhL-NA-9No.title" = "Limit editor width to"; +"bhL-NA-9No.title" = "限制編輯器寬度"; /* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ -"bnJ-BQ-mHV.title" = "* (Asterisk)"; +"bnJ-BQ-mHV.title" = "* (星號)"; /* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ -"eXF-SL-hBq.title" = "Base font:"; +"eXF-SL-hBq.title" = "基礎字型:"; /* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ "g5w-Qw-Khw.title" = "×"; /* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ -"nBR-LK-G9a.title" = "Scroll past end"; +"nBR-LK-G9a.title" = "捲動超過檔案末端"; /* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ -"o4K-iG-sGA.title" = "Auto-complete matching characters"; - -/* Class = "NSMenuItem"; title = "Item 3"; ObjectID = "qML-FL-WrV"; */ -"qML-FL-WrV.title" = "Item 3"; +"o4K-iG-sGA.title" = "自動補完成對字元"; /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ -"vA9-IT-8Z7.title" = "Theme:"; +"vA9-IT-8Z7.title" = "主題:"; /* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ -"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; +"zGb-kg-2CJ.title" = "根據當下區塊自動插入行前綴"; /* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ -"zX4-JY-wTT.title" = "+ (Plus sign)"; +"zX4-JY-wTT.title" = "+ (加號)"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings index 6b790377..4da6fb96 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings @@ -1,6 +1,6 @@ - /* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ -"1f7-JB-VR1.title" = "Include syntax highlighting"; +"1f7-JB-VR1.title" = "包含語法高亮"; /* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ -"fod-Ff-UTI.title" = "Include styles"; +"fod-Ff-UTI.title" = "包含樣式"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings index 46298ad4..aa9feb64 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings @@ -1,27 +1,27 @@ - /* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ -"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; +"2Uj-Sx-FjV.title" = "編輯器捲動時同步預覽捲軸"; /* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ -"Nma-PL-ZvX.title" = "Behavior"; +"Nma-PL-ZvX.title" = "行為"; /* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ -"bUn-PQ-5Ez.title" = "Put editor on the right"; +"bUn-PQ-5Ez.title" = "將編輯器置於右側"; /* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ -"eLn-fW-Agu.title" = "Update"; +"eLn-fW-Agu.title" = "更新"; /* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ -"hpF-zP-3cM.title" = "Automatically create files for link targets"; +"hpF-zP-3cM.title" = "自動新增檔案於連結目標"; /* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ -"l9N-wk-WRY.title" = "Ensure open document on launch"; +"l9N-wk-WRY.title" = "啟動時永遠開啟文件"; /* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ -"npz-xj-plX.title" = "Update preview automatically as you type"; +"npz-xj-plX.title" = "輸入時自動更新預覽"; /* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ -"oeW-bF-ybW.title" = "Show word count"; +"oeW-bF-ybW.title" = "顯示字數統計"; /* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ -"vbz-fv-8BX.title" = "Include pre-releases"; +"vbz-fv-8BX.title" = "包含預發行版"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings index adb2c73b..a0d3c3da 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings @@ -1,57 +1,30 @@ - /* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; +"0rH-I9-Dxr.ibShadowedLabels[0]" = "顯示"; /* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; +"0rH-I9-Dxr.ibShadowedLabels[1]" = "重讀"; /* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ -"5Ch-dG-juL.title" = "Math support requires Internet connection."; +"5Ch-dG-juL.title" = "數學式支援需要網路連線。"; /* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ -"6vg-3f-KWk.title" = "TeX-like math syntax"; +"6vg-3f-KWk.title" = "類 TeX 數學語法"; /* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ -"9I3-I7-HLu.title" = "CSS:"; +"9I3-I7-HLu.title" = "CSS:"; /* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ -"BuQ-02-oQB.title" = "Syntax highlighted code block"; - -/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ -"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; +"BuQ-02-oQB.title" = "程式碼區塊語法高亮"; /* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ -"Jmq-wq-Dux.title" = "Custom"; - -/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ -"Sty-qG-J6K.title" = "Render newline literally"; +"Jmq-wq-Dux.title" = "自訂"; /* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ -"WZa-V6-vvf.title" = "Show line numbers"; +"WZa-V6-vvf.title" = "顯示行數"; /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ -"a6o-qD-AIp.title" = "Theme:"; - -/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ -"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; - -/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ -"e1A-Mm-svq.title" = "Default path:"; - -/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ -"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; - -/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ -"kBf-iW-HlH.title" = "Task list syntax"; - -/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ -"nvS-dZ-eHT.title" = "Detect table of contents token"; +"a6o-qD-AIp.title" = "主題:"; /* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ -"pWW-vM-8JK.title" = "None"; - -/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ -"qFd-cs-OtZ.title" = "Language name"; +"pWW-vM-8JK.title" = "無"; -/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ -"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings index 0236c34b..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings @@ -1,42 +1 @@ - -/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ -"0yU-vT-72e.title" = "Footnote"; - -/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ -"2lB-hq-5eX.title" = "Quote"; - -/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ -"8kI-gm-5Lo.title" = "Highlight"; - -/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ -"D7l-nP-P0y.title" = "Intra-word emphasis"; - -/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ -"ELg-sx-vIf.title" = "Fenced code block"; - -/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ -"Gdr-Ro-ZnW.title" = "Underline"; - -/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ -"RjP-zE-c6b.title" = "Strikethrough"; - -/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ -"Roe-rh-8f9.title" = "Autolink"; - -/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ -"TXy-fD-S4Y.title" = "Block formatting"; - -/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ -"Ycc-Px-jbu.title" = "Inline formatting"; - -/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ -"aSK-nR-xMr.title" = "Smartypants"; - -/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ -"k2n-VN-cKT.title" = "Superscript"; - -/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ -"x36-52-U0p.title" = "Document formatting"; - -/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ -"z8g-3M-hbc.title" = "Table"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings index 2dcaf262..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings +++ b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings @@ -1,348 +1 @@ - -/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ -"0WP-T5-QxP.title" = "Header 2"; - -/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ -"1Xt-HY-uBw.title" = "MacDown"; - -/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ -"1b7-l0-nxx.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ -"1gz-YB-DZE.title" = "Enter Full Screen"; - -/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ -"2Os-ij-Aup.title" = "Highlight"; - -/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ -"2oI-Rn-ZJC.title" = "Transformations"; - -/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ -"3IN-sU-3Bg.title" = "Spelling"; - -/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ -"3rS-ZA-NoH.title" = "Speech"; - -/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ -"4EN-yA-p0u.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ -"4UH-k2-fgy.title" = "Emphasize"; - -/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ -"4sb-4s-VLi.title" = "Quit MacDown"; - -/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ -"5QF-Oa-p0T.title" = "Edit"; - -/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ -"5kV-Vb-QxS.title" = "About MacDown"; - -/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ -"5mp-ev-1el.title" = "Export"; - -/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ -"6dh-zS-Vam.title" = "Redo"; - -/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ -"78Y-hA-62v.title" = "Correct Spelling Automatically"; - -/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ -"8xL-1V-VPX.title" = "Check for Updates…"; - -/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ -"98U-cK-P7J.title" = "Underline"; - -/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ -"9CN-Qi-Fln.title" = "Strikethrough"; - -/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ -"9ic-FL-obx.title" = "Substitutions"; - -/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ -"9yt-4B-nSM.title" = "Smart Copy/Paste"; - -/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ -"AYu-sK-qS6.title" = "Main Menu"; - -/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ -"B98-b8-che.title" = "Header 4"; - -/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ -"BOF-NM-1cW.title" = "Preferences…"; - -/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ -"Bw7-FT-i3A.title" = "Save As…"; - -/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ -"D4C-PE-qJi.title" = "Header 6"; - -/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ -"DVo-aG-piG.title" = "Close"; - -/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ -"Dv1-io-Yv7.title" = "Spelling and Grammar"; - -/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ -"EQZ-Zp-VNE.title" = "View"; - -/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ -"F2S-fz-NVQ.title" = "Help"; - -/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ -"FeM-D8-WVr.title" = "Substitutions"; - -/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ -"GIg-Wo-P8m.title" = "Link"; - -/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ -"HFQ-gK-NFA.title" = "Text Replacement"; - -/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ -"HFo-cy-zxI.title" = "Show Spelling and Grammar"; - -/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ -"I8Y-e8-XDx.title" = "Convert To"; - -/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ -"IAo-SY-fd9.title" = "Open…"; - -/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ -"Jzs-tR-jkL.title" = "Shift Left"; - -/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ -"KaW-ft-85H.title" = "Revert to Saved"; - -/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ -"Kd2-mp-pUS.title" = "Show All"; - -/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ -"LE2-aR-0XJ.title" = "Bring All to Front"; - -/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ -"N43-55-MPb.title" = "Format"; - -/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ -"NLm-rz-EyT.title" = "Header 1"; - -/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ -"NMo-om-nkz.title" = "Services"; - -/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ -"NZX-Ev-sWt.title" = "Left 3:1 Right"; - -/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ -"OY7-WF-poV.title" = "Minimize"; - -/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ -"Olw-nP-bQN.title" = "Hide MacDown"; - -/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ -"OwM-mh-QMV.title" = "Find Previous"; - -/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ -"Oyz-dy-DGm.title" = "Stop Speaking"; - -/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ -"Ppl-BS-KtG.title" = "Plug-ins"; - -/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ -"R4o-n2-Eq4.title" = "Zoom"; - -/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ -"Rb9-MG-IjX.title" = "Strong"; - -/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ -"Ruw-6m-B2m.title" = "Select All"; - -/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ -"S0p-oC-mLd.title" = "Jump to Selection"; - -/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ -"SJM-Pp-ywb.title" = "Export"; - -/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ -"T74-vt-YUA.title" = "Hide Preview Pane"; - -/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ -"Td7-aD-5lo.title" = "Window"; - -/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ -"UEZ-Bs-lqG.title" = "Capitalize"; - -/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ -"VW7-VH-9yl.title" = "Left 1:3 Right"; - -/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ -"Vdr-fp-XzO.title" = "Hide Others"; - -/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ -"Vh1-jg-bbV.title" = "Render Markdown"; - -/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ -"VkR-aw-5AU.title" = "Image"; - -/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ -"W48-6f-4Dl.title" = "Edit"; - -/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ -"Was-JA-tGl.title" = "New"; - -/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ -"XFN-MJ-RrW.title" = "PDF…"; - -/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ -"Xz5-n4-O0W.title" = "Find…"; - -/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ -"YEy-JH-Tfz.title" = "Find and Replace…"; - -/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ -"Ynk-f8-cLZ.title" = "Start Speaking"; - -/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ -"aTl-1u-JFS.title" = "Print…"; - -/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ -"aUF-d1-5bR.title" = "Window"; - -/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ -"bMu-UN-Yfx.title" = "Plug-ins"; - -/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ -"bib-Uj-vzu.title" = "File"; - -/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ -"buJ-ug-pKt.title" = "Use Selection for Find"; - -/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ -"c8a-y6-VQd.title" = "Transformations"; - -/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ -"d9M-CD-aMd.title" = "Make Lower Case"; - -/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ -"dGm-Yl-i3Z.title" = "HTML…"; - -/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ -"dMs-cI-mzQ.title" = "File"; - -/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ -"dRJ-4n-Yzg.title" = "Undo"; - -/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ -"e8h-vX-NQb.title" = "Convert To"; - -/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ -"g9Y-GM-gdh.title" = "Shift Right"; - -/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ -"gVA-U4-sdL.title" = "Paste"; - -/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ -"hOV-YQ-vzy.title" = "Left 1:1 Right"; - -/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ -"hQb-2v-fYv.title" = "Smart Quotes"; - -/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ -"hz2-CU-CR7.title" = "Check Document Now"; - -/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ -"hz9-B4-Xy5.title" = "Services"; - -/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ -"i8c-gf-w29.title" = "Comment"; - -/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ -"iRQ-Q6-N4K.title" = "Inline Code"; - -/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ -"jn0-Kb-yH6.title" = "Unordered List"; - -/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ -"jn0-Kb-yH7.title" = "Ordered List"; - -/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ -"jxT-CU-nIS.title" = "Format"; - -/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ -"kSO-QG-dHa.title" = "Header 3"; - -/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ -"mK6-2p-4JG.title" = "Check Grammar With Spelling"; - -/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ -"oas-Oc-fiZ.title" = "Open Recent"; - -/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ -"pa3-QI-u2k.title" = "Delete"; - -/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ -"pxx-59-PXV.title" = "Save…"; - -/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ -"q09-fT-Sye.title" = "Find Next"; - -/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ -"qIS-W8-SiK.title" = "Page Setup…"; - -/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ -"rbD-Rh-wIN.title" = "Check Spelling While Typing"; - -/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ -"rgM-f4-ycn.title" = "Smart Dashes"; - -/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ -"tRr-pd-1PS.title" = "Data Detectors"; - -/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ -"tXI-mr-wws.title" = "Open Recent"; - -/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ -"ts7-v5-Htm.title" = "Copy HTML"; - -/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ -"twd-Mb-qNx.title" = "Blockquote"; - -/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ -"uQy-DD-JDr.title" = "MacDown"; - -/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ -"uRl-iY-unG.title" = "Cut"; - -/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ -"ugx-EN-xKu.title" = "MacDown Help"; - -/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ -"vNY-rz-j42.title" = "Clear Menu"; - -/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ -"vmV-6d-7jI.title" = "Make Upper Case"; - -/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ -"wHk-AQ-iOQ.title" = "Hide Editor Pane"; - -/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ -"wlq-BA-PKH.title" = "Header 5"; - -/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ -"wpr-3q-Mcd.title" = "Help"; - -/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ -"x3v-GG-iWU.title" = "Copy"; - -/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ -"xN5-GU-ASF.title" = "Paragraph"; - -/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ -"xSb-2f-W1r.title" = "View"; - -/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ -"xrE-MZ-jX0.title" = "Speech"; - -/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ -"z6F-FW-3nz.title" = "Show Substitutions"; - -/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ -"zHE-JL-8eu.title" = "New Paragraph"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/ar.lproj/InfoPlist.strings b/MacDownTests/ar.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/ar.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/de.lproj/InfoPlist.strings b/MacDownTests/de.lproj/InfoPlist.strings new file mode 100644 index 00000000..8331148b --- /dev/null +++ b/MacDownTests/de.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"CFBundleShortVersionString" = "1.0"; + diff --git a/MacDownTests/es.lproj/InfoPlist.strings b/MacDownTests/es.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/es.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/it-IT.lproj/InfoPlist.strings b/MacDownTests/it-IT.lproj/InfoPlist.strings new file mode 100644 index 00000000..8331148b --- /dev/null +++ b/MacDownTests/it-IT.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"CFBundleShortVersionString" = "1.0"; + diff --git a/MacDownTests/ja.lproj/InfoPlist.strings b/MacDownTests/ja.lproj/InfoPlist.strings new file mode 100644 index 00000000..8331148b --- /dev/null +++ b/MacDownTests/ja.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"CFBundleShortVersionString" = "1.0"; + diff --git a/MacDownTests/sk.lproj/InfoPlist.strings b/MacDownTests/sk.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/sk.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/sv.lproj/InfoPlist.strings b/MacDownTests/sv.lproj/InfoPlist.strings index 477b28ff..dc62739d 100644 --- a/MacDownTests/sv.lproj/InfoPlist.strings +++ b/MacDownTests/sv.lproj/InfoPlist.strings @@ -1,2 +1 @@ -/* Localized versions of Info.plist keys */ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/zh-Hans.lproj/InfoPlist.strings b/MacDownTests/zh-Hans.lproj/InfoPlist.strings index 477b28ff..dc62739d 100644 --- a/MacDownTests/zh-Hans.lproj/InfoPlist.strings +++ b/MacDownTests/zh-Hans.lproj/InfoPlist.strings @@ -1,2 +1 @@ -/* Localized versions of Info.plist keys */ - +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/zh-Hant.lproj/InfoPlist.strings b/MacDownTests/zh-Hant.lproj/InfoPlist.strings index 477b28ff..dc62739d 100644 --- a/MacDownTests/zh-Hant.lproj/InfoPlist.strings +++ b/MacDownTests/zh-Hant.lproj/InfoPlist.strings @@ -1,2 +1 @@ -/* Localized versions of Info.plist keys */ - +/* No Localized Strings */ \ No newline at end of file From 7d3b2ef095f798d3454923bfc961a73a39155485 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 12 May 2017 11:56:38 +0800 Subject: [PATCH 290/439] Fix build script for Xcode 8 Xcode 8 removes -exportFormat app in favour of -exportOptionsPlist, but does not offer a way to export the .app bundle without code signing. Let's just copy that damned thing out instead of fighting with Xcode. --- Tools/build_for_release.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Tools/build_for_release.py b/Tools/build_for_release.py index 6ae3cb01..a4c6d353 100755 --- a/Tools/build_for_release.py +++ b/Tools/build_for_release.py @@ -89,11 +89,12 @@ def main(argv): re.MULTILINE, ) archive_path = match.group(1) + print('Exporting application bundle...') - execute( - XCODEBUILD, '-exportArchive', '-exportFormat', 'app', - '-archivePath', archive_path, '-exportPath', APP_NAME, + source_app_path = os.path.join( + archive_path, 'Products', 'Applications', APP_NAME, ) + shutil.copytree(source_app_path, APP_NAME) # Zip. with zipfile.ZipFile(ZIP_NAME, 'w') as f: From e8c77d65e2d1e28124cecb79949ed2dc5f31fd24 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 12 May 2017 18:04:02 +0800 Subject: [PATCH 291/439] Do not translate Info.plist --- MacDown.xcodeproj/project.pbxproj | 60 ------------------- .../Localization/ar.lproj/InfoPlist.strings | 1 - .../Localization/de.lproj/InfoPlist.strings | 9 --- .../Localization/en.lproj/InfoPlist.strings | 2 - .../Localization/es.lproj/InfoPlist.strings | 1 - .../it-IT.lproj/InfoPlist.strings | 9 --- .../Localization/ja.lproj/InfoPlist.strings | 9 --- .../Localization/sk.lproj/InfoPlist.strings | 1 - .../Localization/sv.lproj/InfoPlist.strings | 1 - .../zh-Hans.lproj/InfoPlist.strings | 3 - .../zh-Hant.lproj/InfoPlist.strings | 1 - MacDownTests/ar.lproj/InfoPlist.strings | 1 - MacDownTests/de.lproj/InfoPlist.strings | 3 - MacDownTests/en.lproj/InfoPlist.strings | 2 - MacDownTests/es.lproj/InfoPlist.strings | 1 - MacDownTests/it-IT.lproj/InfoPlist.strings | 3 - MacDownTests/ja.lproj/InfoPlist.strings | 3 - MacDownTests/sk.lproj/InfoPlist.strings | 1 - MacDownTests/sv.lproj/InfoPlist.strings | 1 - MacDownTests/zh-Hans.lproj/InfoPlist.strings | 1 - MacDownTests/zh-Hant.lproj/InfoPlist.strings | 1 - 21 files changed, 114 deletions(-) delete mode 100644 MacDown/Localization/ar.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/de.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/en.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/es.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/it-IT.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/ja.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/sk.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/sv.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/zh-Hans.lproj/InfoPlist.strings delete mode 100644 MacDown/Localization/zh-Hant.lproj/InfoPlist.strings delete mode 100644 MacDownTests/ar.lproj/InfoPlist.strings delete mode 100644 MacDownTests/de.lproj/InfoPlist.strings delete mode 100644 MacDownTests/en.lproj/InfoPlist.strings delete mode 100644 MacDownTests/es.lproj/InfoPlist.strings delete mode 100644 MacDownTests/it-IT.lproj/InfoPlist.strings delete mode 100644 MacDownTests/ja.lproj/InfoPlist.strings delete mode 100644 MacDownTests/sk.lproj/InfoPlist.strings delete mode 100644 MacDownTests/sv.lproj/InfoPlist.strings delete mode 100644 MacDownTests/zh-Hans.lproj/InfoPlist.strings delete mode 100644 MacDownTests/zh-Hant.lproj/InfoPlist.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 6e59beef..5e56cfc2 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -18,7 +18,6 @@ 1F0D9D7D194AC7F7008E1856 /* MPPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D9D75194AC7F7008E1856 /* MPPreferencesViewController.m */; }; 1F0D9D93194AC852008E1856 /* MPDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D9D92194AC852008E1856 /* MPDocument.m */; }; 1F0D9DAA194AC8CB008E1856 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9DA6194AC8CB008E1856 /* Credits.rtf */; }; - 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9DA8194AC8CB008E1856 /* InfoPlist.strings */; }; 1F0D9DAD194AC8EF008E1856 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9DAC194AC8EF008E1856 /* Images.xcassets */; }; 1F0D9DAF194AC905008E1856 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D9DAE194AC905008E1856 /* main.m */; }; 1F0D9DB0194AC9EE008E1856 /* MPDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9D83194AC83C008E1856 /* MPDocument.xib */; }; @@ -67,7 +66,6 @@ 1FBDFEA51962A27300BEEA70 /* MPGeneralPreferencesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FBDFEA31962A27300BEEA70 /* MPGeneralPreferencesViewController.xib */; }; 1FBE8E0F1A11DB1E003E1EF4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FBE8E0E1A11DB1E003E1EF4 /* main.m */; }; 1FC29F5C1944FC2600D616C7 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FC29F5B1944FC2600D616C7 /* XCTest.framework */; }; - 1FC29F5E1944FC4F00D616C7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */; }; 1FCE066419633D6C00DC83B4 /* Data in Resources */ = {isa = PBXBuildFile; fileRef = 1FCE066319633D6B00DC83B4 /* Data */; }; 1FEAFEA21DCE762C008C4E8C /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F847BC51DCC9DB600A47385 /* NSUserDefaults+Suite.m */; }; 1FF1420219A8987500CF8A6A /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF1420119A8987500CF8A6A /* JavaScriptCore.framework */; }; @@ -175,7 +173,6 @@ 1F0D9D92194AC852008E1856 /* MPDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDocument.m; sourceTree = ""; }; 1F0D9DA3194AC8B3008E1856 /* MacDown-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MacDown-Info.plist"; sourceTree = ""; }; 1F0D9DA7194AC8CB008E1856 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = Localization/en.lproj/Credits.rtf; sourceTree = ""; }; - 1F0D9DA9194AC8CB008E1856 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/InfoPlist.strings; sourceTree = ""; }; 1F0D9DAC194AC8EF008E1856 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 1F0D9DAE194AC905008E1856 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Code/main.m; sourceTree = ""; }; 1F0D9DB5194ACA33008E1856 /* MacDown-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MacDown-Prefix.pch"; path = "Code/MacDown-Prefix.pch"; sourceTree = ""; }; @@ -232,9 +229,7 @@ 1F9034121EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F9034131EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPDocument.strings; sourceTree = ""; }; 1F9034141EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = de; path = Localization/de.lproj/Credits.rtf; sourceTree = ""; }; - 1F9034151EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034161EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/Localizable.strings; sourceTree = ""; }; - 1F9034171EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034181EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MainMenu.strings; sourceTree = ""; }; 1F9034191EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F90341A1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -243,9 +238,7 @@ 1F90341D1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F90341E1EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPDocument.strings; sourceTree = ""; }; 1F90341F1EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = Localization/es.lproj/Credits.rtf; sourceTree = ""; }; - 1F9034201EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034211EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/Localizable.strings; sourceTree = ""; }; - 1F9034221EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034231EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MainMenu.strings"; sourceTree = ""; }; 1F9034241EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; 1F9034251EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; @@ -254,9 +247,7 @@ 1F9034281EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; 1F9034291EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPDocument.strings"; sourceTree = ""; }; 1F90342A1EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "it-IT"; path = "Localization/it-IT.lproj/Credits.rtf"; sourceTree = ""; }; - 1F90342B1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/InfoPlist.strings"; sourceTree = ""; }; 1F90342C1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/Localizable.strings"; sourceTree = ""; }; - 1F90342D1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/InfoPlist.strings"; sourceTree = ""; }; 1F90342E1EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MainMenu.strings; sourceTree = ""; }; 1F90342F1EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F9034301EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -265,9 +256,7 @@ 1F9034331EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F9034341EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPDocument.strings; sourceTree = ""; }; 1F9034351EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ja; path = Localization/ja.lproj/Credits.rtf; sourceTree = ""; }; - 1F9034361EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034371EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/Localizable.strings; sourceTree = ""; }; - 1F9034381EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034391EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MainMenu.strings; sourceTree = ""; }; 1F90343A1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F90343B1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -276,9 +265,7 @@ 1F90343E1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F90343F1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPDocument.strings; sourceTree = ""; }; 1F9034401EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sk; path = Localization/sk.lproj/Credits.rtf; sourceTree = ""; }; - 1F9034411EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034421EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/Localizable.strings; sourceTree = ""; }; - 1F9034431EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034441EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MainMenu.strings; sourceTree = ""; }; 1F9034451EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F9034461EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -287,9 +274,7 @@ 1F9034491EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F90344A1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPDocument.strings; sourceTree = ""; }; 1F90344B1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ar; path = Localization/ar.lproj/Credits.rtf; sourceTree = ""; }; - 1F90344C1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/InfoPlist.strings; sourceTree = ""; }; 1F90344D1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/Localizable.strings; sourceTree = ""; }; - 1F90344E1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; 1F96BD7E1E584A03005E0456 /* MPHomebrewSubprocessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHomebrewSubprocessController.h; sourceTree = ""; }; 1F96BD7F1E584A03005E0456 /* MPHomebrewSubprocessController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHomebrewSubprocessController.m; sourceTree = ""; }; 1F9A14E8194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPExportPanelAccessoryViewController.h; path = Code/Application/MPExportPanelAccessoryViewController.h; sourceTree = ""; }; @@ -323,8 +308,6 @@ 1FCBDF101E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1FCBDF111E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPDocument.strings; sourceTree = ""; }; 1FCBDF121E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sv; path = Localization/sv.lproj/Credits.rtf; sourceTree = ""; }; - 1FCBDF131E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; - 1FCBDF141E536C8900C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; 1FCBDF151E536C9F00C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/Localizable.strings; sourceTree = ""; }; 1FCBDF161E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MainMenu.strings"; sourceTree = ""; }; 1FCBDF171E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; @@ -334,9 +317,7 @@ 1FCBDF1B1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; 1FCBDF1C1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPDocument.strings"; sourceTree = ""; }; 1FCBDF1D1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Credits.rtf"; sourceTree = ""; }; - 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCBDF1F1E536CAF00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - 1FCBDF201E536CAF00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCBDF211E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MainMenu.strings"; sourceTree = ""; }; 1FCBDF221E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; 1FCBDF231E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; @@ -345,14 +326,11 @@ 1FCBDF261E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; 1FCBDF271E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPDocument.strings"; sourceTree = ""; }; 1FCBDF281E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/Credits.rtf"; sourceTree = ""; }; - 1FCBDF291E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCBDF2A1E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 1FCBDF2B1E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCD71131A20BA3A00C028B5 /* version.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = version.xcodeproj; sourceTree = ""; }; 1FCD711A1A20BE2F00C028B5 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = Dependency/version/version.h; sourceTree = SOURCE_ROOT; }; 1FCDCA301944F96E00B1F966 /* MacDownTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MacDownTests-Info.plist"; sourceTree = ""; }; 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPreferencesTests.m; sourceTree = ""; }; - 1FCDCA331944F96E00B1F966 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 1FCE066319633D6B00DC83B4 /* Data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Data; path = Resources/Data; sourceTree = ""; }; 1FF1420119A8987500CF8A6A /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; 1FF1420319A8A24800CF8A6A /* MPUtilityTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUtilityTests.m; sourceTree = ""; }; @@ -681,7 +659,6 @@ 1F4C8E9C194AE0CE004BF82E /* Additional Sources */, 1F4C8E9B194AE0C3004BF82E /* Resources */, 1F0D9DA3194AC8B3008E1856 /* MacDown-Info.plist */, - 1F0D9DA8194AC8CB008E1856 /* InfoPlist.strings */, 1F2789691973BEB100EE696A /* Localizable.strings */, 1F0D9DAC194AC8EF008E1856 /* Images.xcassets */, ); @@ -706,7 +683,6 @@ isa = PBXGroup; children = ( 1FCDCA301944F96E00B1F966 /* MacDownTests-Info.plist */, - 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */, 1FFEB31F1972B04D00B2254F /* test.txt */, 1FFEB31A19729FD500B2254F /* test.js */, 1FFEB31C19729FEF00B2254F /* test.css */, @@ -897,7 +873,6 @@ 852D523D1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */, - 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */, 1FB3C0241E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib in Resources */, @@ -908,7 +883,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1FC29F5E1944FC4F00D616C7 /* InfoPlist.strings in Resources */, 1FFEB31D19729FEF00B2254F /* test.css in Resources */, 1FFEB3201972B04D00B2254F /* test.txt in Resources */, 1FFEB31E1972A28400B2254F /* test.js in Resources */, @@ -1267,23 +1241,6 @@ name = Credits.rtf; sourceTree = ""; }; - 1F0D9DA8194AC8CB008E1856 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 1F0D9DA9194AC8CB008E1856 /* en */, - 1FCBDF131E536C8500C0F56B /* sv */, - 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */, - 1FCBDF291E536CB700C0F56B /* zh-Hans */, - 1F9034151EC556AA00D97F9C /* de */, - 1F9034201EC556CA00D97F9C /* es */, - 1F90342B1EC556E500D97F9C /* it-IT */, - 1F9034361EC556EC00D97F9C /* ja */, - 1F9034411EC556F300D97F9C /* sk */, - 1F90344C1EC5576E00D97F9C /* ar */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; 1F2789691973BEB100EE696A /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -1336,23 +1293,6 @@ path = ../..; sourceTree = ""; }; - 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 1FCDCA331944F96E00B1F966 /* en */, - 1FCBDF141E536C8900C0F56B /* sv */, - 1FCBDF201E536CAF00C0F56B /* zh-Hant */, - 1FCBDF2B1E536CB700C0F56B /* zh-Hans */, - 1F9034171EC556AA00D97F9C /* de */, - 1F9034221EC556CA00D97F9C /* es */, - 1F90342D1EC556E500D97F9C /* it-IT */, - 1F9034381EC556EC00D97F9C /* ja */, - 1F9034431EC556F300D97F9C /* sk */, - 1F90344E1EC5576E00D97F9C /* ar */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/MacDown/Localization/ar.lproj/InfoPlist.strings b/MacDown/Localization/ar.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDown/Localization/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/InfoPlist.strings b/MacDown/Localization/de.lproj/InfoPlist.strings deleted file mode 100644 index 4331b750..00000000 --- a/MacDown/Localization/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* (No Commment) */ -"CFBundleName" = "${PRODUCT_NAME}"; - -/* (No Commment) */ -"CFBundleShortVersionString" = "0.1"; - -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; - diff --git a/MacDown/Localization/en.lproj/InfoPlist.strings b/MacDown/Localization/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff..00000000 --- a/MacDown/Localization/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/MacDown/Localization/es.lproj/InfoPlist.strings b/MacDown/Localization/es.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDown/Localization/es.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/it-IT.lproj/InfoPlist.strings b/MacDown/Localization/it-IT.lproj/InfoPlist.strings deleted file mode 100644 index 4b5ff662..00000000 --- a/MacDown/Localization/it-IT.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* (No Commment) */ -"CFBundleName" = "${NOME_PRODOTTO}"; - -/* (No Commment) */ -"CFBundleShortVersionString" = "0.1"; - -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014-2016 Tzu-ping Chung."; - diff --git a/MacDown/Localization/ja.lproj/InfoPlist.strings b/MacDown/Localization/ja.lproj/InfoPlist.strings deleted file mode 100644 index 4878e77b..00000000 --- a/MacDown/Localization/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* (No Commment) */ -"CFBundleName" = "MacDown"; - -/* (No Commment) */ -"CFBundleShortVersionString" = "0.1"; - -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; - diff --git a/MacDown/Localization/sk.lproj/InfoPlist.strings b/MacDown/Localization/sk.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDown/Localization/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/InfoPlist.strings b/MacDown/Localization/sv.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDown/Localization/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index 2809b900..00000000 --- a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; - diff --git a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/ar.lproj/InfoPlist.strings b/MacDownTests/ar.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDownTests/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/de.lproj/InfoPlist.strings b/MacDownTests/de.lproj/InfoPlist.strings deleted file mode 100644 index 8331148b..00000000 --- a/MacDownTests/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* (No Commment) */ -"CFBundleShortVersionString" = "1.0"; - diff --git a/MacDownTests/en.lproj/InfoPlist.strings b/MacDownTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff..00000000 --- a/MacDownTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/MacDownTests/es.lproj/InfoPlist.strings b/MacDownTests/es.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDownTests/es.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/it-IT.lproj/InfoPlist.strings b/MacDownTests/it-IT.lproj/InfoPlist.strings deleted file mode 100644 index 8331148b..00000000 --- a/MacDownTests/it-IT.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* (No Commment) */ -"CFBundleShortVersionString" = "1.0"; - diff --git a/MacDownTests/ja.lproj/InfoPlist.strings b/MacDownTests/ja.lproj/InfoPlist.strings deleted file mode 100644 index 8331148b..00000000 --- a/MacDownTests/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* (No Commment) */ -"CFBundleShortVersionString" = "1.0"; - diff --git a/MacDownTests/sk.lproj/InfoPlist.strings b/MacDownTests/sk.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDownTests/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/sv.lproj/InfoPlist.strings b/MacDownTests/sv.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDownTests/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/zh-Hans.lproj/InfoPlist.strings b/MacDownTests/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDownTests/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/zh-Hant.lproj/InfoPlist.strings b/MacDownTests/zh-Hant.lproj/InfoPlist.strings deleted file mode 100644 index dc62739d..00000000 --- a/MacDownTests/zh-Hant.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file From fe16a145e3c53fd94fa745b465496a4660b1f510 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 12 May 2017 18:55:02 +0800 Subject: [PATCH 292/439] Add extra script to avoid Info.plist translation --- .travis.yml | 5 ++-- Tools/import_translations.py | 3 +-- Tools/macdown_utils.py | 2 ++ Tools/travis_push_transifex.py | 48 +++++++++++++++++++++++++++++++++- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index ab8a6032..d5fafa69 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,8 @@ cache: - cocoapods env: global: - secure: Vyar5YYP3n5CXQWiGxxT2QGYCcZgrSECmMb0BxeaG60KrKfDuXIoj6+rL/VqSImIlaF7qiVHkhHQba8Gf9QHhktUtfK4PQLfE0DzogoFVp8IXaTVEg9wBDnHAiqdadMmY3Vt2blnIIBLiV5+lFWxuSYlX27TTlr1ieev9Z+fMC0= + - LOCALIZATION_OUT=Build/Localizations + - secure: Vyar5YYP3n5CXQWiGxxT2QGYCcZgrSECmMb0BxeaG60KrKfDuXIoj6+rL/VqSImIlaF7qiVHkhHQba8Gf9QHhktUtfK4PQLfE0DzogoFVp8IXaTVEg9wBDnHAiqdadMmY3Vt2blnIIBLiV5+lFWxuSYlX27TTlr1ieev9Z+fMC0= install: - bundle install - travis_wait bundle exec pod install @@ -14,6 +15,6 @@ before_script: - set -o pipefail script: - xcodebuild -workspace MacDown.xcworkspace -scheme MacDown test | xcpretty -- xcodebuild -exportLocalizations -localizationPath Build/Localizations +- xcodebuild -exportLocalizations -localizationPath "$LOCALIZATION_OUT" after_success: - python Tools/travis_push_transifex.py diff --git a/Tools/import_translations.py b/Tools/import_translations.py index 72471f7e..f0786527 100755 --- a/Tools/import_translations.py +++ b/Tools/import_translations.py @@ -7,11 +7,10 @@ from xml.etree import ElementTree from compat import ConfigParser -from macdown_utils import ROOT_DIR, XCODEBUILD, execute +from macdown_utils import ROOT_DIR, XCODEBUILD, XLIFF_URL, execute TX_CONFIG_FILE = os.path.join(ROOT_DIR, '.tx', 'config') -XLIFF_URL = 'urn:oasis:names:tc:xliff:document:1.2' logger = logging.getLogger() diff --git a/Tools/macdown_utils.py b/Tools/macdown_utils.py index ec1be6cf..29d3e6fb 100644 --- a/Tools/macdown_utils.py +++ b/Tools/macdown_utils.py @@ -7,6 +7,8 @@ XCODEBUILD = '/usr/bin/xcodebuild' +XLIFF_URL = 'urn:oasis:names:tc:xliff:document:1.2' + ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) diff --git a/Tools/travis_push_transifex.py b/Tools/travis_push_transifex.py index 9198c5fa..0ff8db88 100755 --- a/Tools/travis_push_transifex.py +++ b/Tools/travis_push_transifex.py @@ -6,7 +6,24 @@ import os import sys -from macdown_utils import execute +from xml.etree import ElementTree + +from macdown_utils import XLIFF_URL, execute + + +# Translations of these keys will be dropped. +NO_TRANSLATE_KEYS = { + 'MacDown/MacDown-Info.plist': [ + 'CFBundleName', + 'CFBundleShortVersionString', + ], + 'MacDownTests/MacDownTests-Info.plist': [ + 'CFBundleShortVersionString', + ], +} + + +ElementTree.register_namespace('', XLIFF_URL) def write_transifex_config(): @@ -27,6 +44,34 @@ def write_transifex_config(): ).format(password=os.environ['TRANSIFEX_PASSWORD'])) +PREFIX_MAP = {'xliff': XLIFF_URL} + + +def clean_xliff(): + xliff_dirpath = os.getenv('LOCALIZATION_OUT') + assert xliff_dirpath + for fn in os.listdir(xliff_dirpath): + if os.path.splitext(fn)[-1] != '.xliff': + continue + xliff_filepath = os.path.join(xliff_dirpath, fn) + tree = ElementTree.parse(xliff_filepath) + + # Remove keys that should not be translated. + for source, keys in NO_TRANSLATE_KEYS.items(): + bodyxpath = 'xliff:file[@original="{}"]/xliff:body'.format(source) + bodynode = tree.find(bodyxpath, PREFIX_MAP) + for key in keys: + nodexpath = '*[@id="{}"]'.format(key) + node = bodynode.find(nodexpath, PREFIX_MAP) + if node: + bodynode.remove(node) + + tree.write( + xliff_filepath, + encoding='UTF-8', xml_declaration=True, method='xml', + ) + + def main(): if os.getenv('TRAVIS_PULL_REQUEST') != 'false': print('Build triggered by a pull request. Transifex push skipped.', @@ -39,6 +84,7 @@ def main(): cur=current_branch, target=target_branch, ), file=sys.stderr) return + clean_xliff() write_transifex_config() execute(os.path.expanduser('~/Library/Python/2.7/bin/tx'), 'push', '-s') From e68aa42883bf7ee7b5cd734c6f8db78c478f5236 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 13 May 2017 01:20:18 +0800 Subject: [PATCH 293/439] Guard against non-existent BUild/Locations directory --- Tools/import_translations.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Tools/import_translations.py b/Tools/import_translations.py index f0786527..8a13441a 100755 --- a/Tools/import_translations.py +++ b/Tools/import_translations.py @@ -25,8 +25,9 @@ def pull_translations(parser): parser.get('macdown.macdownxliff', 'file_filter'), '..', )) - for fn in os.listdir(xliff_dirpath): - os.remove(os.path.join(xliff_dirpath, fn)) + if os.path.exists(xliff_dirpath): + for fn in os.listdir(xliff_dirpath): + os.remove(os.path.join(xliff_dirpath, fn)) logger.info('Connecting...') os.system('tx pull -a') From 4773ce83e5d7098d90a2d1a143a26204b37132c6 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 13 May 2017 01:50:53 +0800 Subject: [PATCH 294/439] Tweak translatable trimming logic --- Tools/travis_push_transifex.py | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/Tools/travis_push_transifex.py b/Tools/travis_push_transifex.py index 0ff8db88..6fdc6c05 100755 --- a/Tools/travis_push_transifex.py +++ b/Tools/travis_push_transifex.py @@ -12,14 +12,9 @@ # Translations of these keys will be dropped. -NO_TRANSLATE_KEYS = { - 'MacDown/MacDown-Info.plist': [ - 'CFBundleName', - 'CFBundleShortVersionString', - ], - 'MacDownTests/MacDownTests-Info.plist': [ - 'CFBundleShortVersionString', - ], +NO_TRANSLATE_FILES = { + 'MacDown/MacDown-Info.plist', + 'MacDownTests/MacDownTests-Info.plist', } @@ -49,22 +44,20 @@ def write_transifex_config(): def clean_xliff(): xliff_dirpath = os.getenv('LOCALIZATION_OUT') - assert xliff_dirpath + assert xliff_dirpath, 'LOCALIZATION_OUT not set' for fn in os.listdir(xliff_dirpath): if os.path.splitext(fn)[-1] != '.xliff': continue xliff_filepath = os.path.join(xliff_dirpath, fn) tree = ElementTree.parse(xliff_filepath) - - # Remove keys that should not be translated. - for source, keys in NO_TRANSLATE_KEYS.items(): - bodyxpath = 'xliff:file[@original="{}"]/xliff:body'.format(source) - bodynode = tree.find(bodyxpath, PREFIX_MAP) - for key in keys: - nodexpath = '*[@id="{}"]'.format(key) - node = bodynode.find(nodexpath, PREFIX_MAP) - if node: - bodynode.remove(node) + root = tree.getroot() + + # Remove files that should not be translated. + for source in NO_TRANSLATE_FILES: + source_xpath = 'xliff:file[@original="{}"]'.format(source) + source_node = tree.find(source_xpath, PREFIX_MAP) + if source_node: + root.remove(source_node) tree.write( xliff_filepath, From 1bff9743b13c92f6997d87739f869747107ef0cf Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 14 May 2017 18:33:08 +0800 Subject: [PATCH 295/439] Revert "Do not translate Info.plist" This reverts commit e8c77d65e2d1e28124cecb79949ed2dc5f31fd24. --- MacDown.xcodeproj/project.pbxproj | 60 +++++++++++++++++++ .../Localization/ar.lproj/InfoPlist.strings | 1 + .../Localization/de.lproj/InfoPlist.strings | 9 +++ .../Localization/en.lproj/InfoPlist.strings | 2 + .../Localization/es.lproj/InfoPlist.strings | 1 + .../it-IT.lproj/InfoPlist.strings | 9 +++ .../Localization/ja.lproj/InfoPlist.strings | 9 +++ .../Localization/sk.lproj/InfoPlist.strings | 1 + .../Localization/sv.lproj/InfoPlist.strings | 1 + .../zh-Hans.lproj/InfoPlist.strings | 3 + .../zh-Hant.lproj/InfoPlist.strings | 1 + MacDownTests/ar.lproj/InfoPlist.strings | 1 + MacDownTests/de.lproj/InfoPlist.strings | 3 + MacDownTests/en.lproj/InfoPlist.strings | 2 + MacDownTests/es.lproj/InfoPlist.strings | 1 + MacDownTests/it-IT.lproj/InfoPlist.strings | 3 + MacDownTests/ja.lproj/InfoPlist.strings | 3 + MacDownTests/sk.lproj/InfoPlist.strings | 1 + MacDownTests/sv.lproj/InfoPlist.strings | 1 + MacDownTests/zh-Hans.lproj/InfoPlist.strings | 1 + MacDownTests/zh-Hant.lproj/InfoPlist.strings | 1 + 21 files changed, 114 insertions(+) create mode 100644 MacDown/Localization/ar.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/de.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/en.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/es.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/it-IT.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/ja.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/sk.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/sv.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/zh-Hans.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/zh-Hant.lproj/InfoPlist.strings create mode 100644 MacDownTests/ar.lproj/InfoPlist.strings create mode 100644 MacDownTests/de.lproj/InfoPlist.strings create mode 100644 MacDownTests/en.lproj/InfoPlist.strings create mode 100644 MacDownTests/es.lproj/InfoPlist.strings create mode 100644 MacDownTests/it-IT.lproj/InfoPlist.strings create mode 100644 MacDownTests/ja.lproj/InfoPlist.strings create mode 100644 MacDownTests/sk.lproj/InfoPlist.strings create mode 100644 MacDownTests/sv.lproj/InfoPlist.strings create mode 100644 MacDownTests/zh-Hans.lproj/InfoPlist.strings create mode 100644 MacDownTests/zh-Hant.lproj/InfoPlist.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 5e56cfc2..6e59beef 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 1F0D9D7D194AC7F7008E1856 /* MPPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D9D75194AC7F7008E1856 /* MPPreferencesViewController.m */; }; 1F0D9D93194AC852008E1856 /* MPDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D9D92194AC852008E1856 /* MPDocument.m */; }; 1F0D9DAA194AC8CB008E1856 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9DA6194AC8CB008E1856 /* Credits.rtf */; }; + 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9DA8194AC8CB008E1856 /* InfoPlist.strings */; }; 1F0D9DAD194AC8EF008E1856 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9DAC194AC8EF008E1856 /* Images.xcassets */; }; 1F0D9DAF194AC905008E1856 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D9DAE194AC905008E1856 /* main.m */; }; 1F0D9DB0194AC9EE008E1856 /* MPDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F0D9D83194AC83C008E1856 /* MPDocument.xib */; }; @@ -66,6 +67,7 @@ 1FBDFEA51962A27300BEEA70 /* MPGeneralPreferencesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FBDFEA31962A27300BEEA70 /* MPGeneralPreferencesViewController.xib */; }; 1FBE8E0F1A11DB1E003E1EF4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FBE8E0E1A11DB1E003E1EF4 /* main.m */; }; 1FC29F5C1944FC2600D616C7 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FC29F5B1944FC2600D616C7 /* XCTest.framework */; }; + 1FC29F5E1944FC4F00D616C7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */; }; 1FCE066419633D6C00DC83B4 /* Data in Resources */ = {isa = PBXBuildFile; fileRef = 1FCE066319633D6B00DC83B4 /* Data */; }; 1FEAFEA21DCE762C008C4E8C /* NSUserDefaults+Suite.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F847BC51DCC9DB600A47385 /* NSUserDefaults+Suite.m */; }; 1FF1420219A8987500CF8A6A /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FF1420119A8987500CF8A6A /* JavaScriptCore.framework */; }; @@ -173,6 +175,7 @@ 1F0D9D92194AC852008E1856 /* MPDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDocument.m; sourceTree = ""; }; 1F0D9DA3194AC8B3008E1856 /* MacDown-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MacDown-Info.plist"; sourceTree = ""; }; 1F0D9DA7194AC8CB008E1856 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = Localization/en.lproj/Credits.rtf; sourceTree = ""; }; + 1F0D9DA9194AC8CB008E1856 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/InfoPlist.strings; sourceTree = ""; }; 1F0D9DAC194AC8EF008E1856 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 1F0D9DAE194AC905008E1856 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Code/main.m; sourceTree = ""; }; 1F0D9DB5194ACA33008E1856 /* MacDown-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MacDown-Prefix.pch"; path = "Code/MacDown-Prefix.pch"; sourceTree = ""; }; @@ -229,7 +232,9 @@ 1F9034121EC556A900D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F9034131EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/MPDocument.strings; sourceTree = ""; }; 1F9034141EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = de; path = Localization/de.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034151EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034161EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localization/de.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034171EC556AA00D97F9C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034181EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MainMenu.strings; sourceTree = ""; }; 1F9034191EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F90341A1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -238,7 +243,9 @@ 1F90341D1EC556C900D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F90341E1EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/MPDocument.strings; sourceTree = ""; }; 1F90341F1EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = Localization/es.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034201EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034211EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localization/es.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034221EC556CA00D97F9C /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034231EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MainMenu.strings"; sourceTree = ""; }; 1F9034241EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; 1F9034251EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; @@ -247,7 +254,9 @@ 1F9034281EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; 1F9034291EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/MPDocument.strings"; sourceTree = ""; }; 1F90342A1EC556E400D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "it-IT"; path = "Localization/it-IT.lproj/Credits.rtf"; sourceTree = ""; }; + 1F90342B1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/InfoPlist.strings"; sourceTree = ""; }; 1F90342C1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "Localization/it-IT.lproj/Localizable.strings"; sourceTree = ""; }; + 1F90342D1EC556E500D97F9C /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/InfoPlist.strings"; sourceTree = ""; }; 1F90342E1EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MainMenu.strings; sourceTree = ""; }; 1F90342F1EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F9034301EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -256,7 +265,9 @@ 1F9034331EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F9034341EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/MPDocument.strings; sourceTree = ""; }; 1F9034351EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ja; path = Localization/ja.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034361EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034371EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localization/ja.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034381EC556EC00D97F9C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034391EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MainMenu.strings; sourceTree = ""; }; 1F90343A1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F90343B1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -265,7 +276,9 @@ 1F90343E1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F90343F1EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/MPDocument.strings; sourceTree = ""; }; 1F9034401EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sk; path = Localization/sk.lproj/Credits.rtf; sourceTree = ""; }; + 1F9034411EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034421EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = Localization/sk.lproj/Localizable.strings; sourceTree = ""; }; + 1F9034431EC556F300D97F9C /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; 1F9034441EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MainMenu.strings; sourceTree = ""; }; 1F9034451EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; 1F9034461EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; @@ -274,7 +287,9 @@ 1F9034491EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1F90344A1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/MPDocument.strings; sourceTree = ""; }; 1F90344B1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ar; path = Localization/ar.lproj/Credits.rtf; sourceTree = ""; }; + 1F90344C1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/InfoPlist.strings; sourceTree = ""; }; 1F90344D1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localization/ar.lproj/Localizable.strings; sourceTree = ""; }; + 1F90344E1EC5576E00D97F9C /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; 1F96BD7E1E584A03005E0456 /* MPHomebrewSubprocessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPHomebrewSubprocessController.h; sourceTree = ""; }; 1F96BD7F1E584A03005E0456 /* MPHomebrewSubprocessController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPHomebrewSubprocessController.m; sourceTree = ""; }; 1F9A14E8194EEE9900D1C6A9 /* MPExportPanelAccessoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MPExportPanelAccessoryViewController.h; path = Code/Application/MPExportPanelAccessoryViewController.h; sourceTree = ""; }; @@ -308,6 +323,8 @@ 1FCBDF101E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; 1FCBDF111E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/MPDocument.strings; sourceTree = ""; }; 1FCBDF121E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sv; path = Localization/sv.lproj/Credits.rtf; sourceTree = ""; }; + 1FCBDF131E536C8500C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/InfoPlist.strings; sourceTree = ""; }; + 1FCBDF141E536C8900C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; 1FCBDF151E536C9F00C0F56B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localization/sv.lproj/Localizable.strings; sourceTree = ""; }; 1FCBDF161E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MainMenu.strings"; sourceTree = ""; }; 1FCBDF171E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; @@ -317,7 +334,9 @@ 1FCBDF1B1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; 1FCBDF1C1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/MPDocument.strings"; sourceTree = ""; }; 1FCBDF1D1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Credits.rtf"; sourceTree = ""; }; + 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCBDF1F1E536CAF00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "Localization/zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + 1FCBDF201E536CAF00C0F56B /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCBDF211E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MainMenu.strings"; sourceTree = ""; }; 1FCBDF221E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; 1FCBDF231E536CB600C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; @@ -326,11 +345,14 @@ 1FCBDF261E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; 1FCBDF271E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/MPDocument.strings"; sourceTree = ""; }; 1FCBDF281E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/Credits.rtf"; sourceTree = ""; }; + 1FCBDF291E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCBDF2A1E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "Localization/zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 1FCBDF2B1E536CB700C0F56B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; 1FCD71131A20BA3A00C028B5 /* version.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = version.xcodeproj; sourceTree = ""; }; 1FCD711A1A20BE2F00C028B5 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = Dependency/version/version.h; sourceTree = SOURCE_ROOT; }; 1FCDCA301944F96E00B1F966 /* MacDownTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MacDownTests-Info.plist"; sourceTree = ""; }; 1FCDCA311944F96E00B1F966 /* MPPreferencesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPreferencesTests.m; sourceTree = ""; }; + 1FCDCA331944F96E00B1F966 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 1FCE066319633D6B00DC83B4 /* Data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Data; path = Resources/Data; sourceTree = ""; }; 1FF1420119A8987500CF8A6A /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; 1FF1420319A8A24800CF8A6A /* MPUtilityTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPUtilityTests.m; sourceTree = ""; }; @@ -659,6 +681,7 @@ 1F4C8E9C194AE0CE004BF82E /* Additional Sources */, 1F4C8E9B194AE0C3004BF82E /* Resources */, 1F0D9DA3194AC8B3008E1856 /* MacDown-Info.plist */, + 1F0D9DA8194AC8CB008E1856 /* InfoPlist.strings */, 1F2789691973BEB100EE696A /* Localizable.strings */, 1F0D9DAC194AC8EF008E1856 /* Images.xcassets */, ); @@ -683,6 +706,7 @@ isa = PBXGroup; children = ( 1FCDCA301944F96E00B1F966 /* MacDownTests-Info.plist */, + 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */, 1FFEB31F1972B04D00B2254F /* test.txt */, 1FFEB31A19729FD500B2254F /* test.js */, 1FFEB31C19729FEF00B2254F /* test.css */, @@ -873,6 +897,7 @@ 852D523D1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */, + 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, 1FCE066419633D6C00DC83B4 /* Data in Resources */, 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */, 1FB3C0241E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib in Resources */, @@ -883,6 +908,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1FC29F5E1944FC4F00D616C7 /* InfoPlist.strings in Resources */, 1FFEB31D19729FEF00B2254F /* test.css in Resources */, 1FFEB3201972B04D00B2254F /* test.txt in Resources */, 1FFEB31E1972A28400B2254F /* test.js in Resources */, @@ -1241,6 +1267,23 @@ name = Credits.rtf; sourceTree = ""; }; + 1F0D9DA8194AC8CB008E1856 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 1F0D9DA9194AC8CB008E1856 /* en */, + 1FCBDF131E536C8500C0F56B /* sv */, + 1FCBDF1E1E536CAE00C0F56B /* zh-Hant */, + 1FCBDF291E536CB700C0F56B /* zh-Hans */, + 1F9034151EC556AA00D97F9C /* de */, + 1F9034201EC556CA00D97F9C /* es */, + 1F90342B1EC556E500D97F9C /* it-IT */, + 1F9034361EC556EC00D97F9C /* ja */, + 1F9034411EC556F300D97F9C /* sk */, + 1F90344C1EC5576E00D97F9C /* ar */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; 1F2789691973BEB100EE696A /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -1293,6 +1336,23 @@ path = ../..; sourceTree = ""; }; + 1FCDCA321944F96E00B1F966 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 1FCDCA331944F96E00B1F966 /* en */, + 1FCBDF141E536C8900C0F56B /* sv */, + 1FCBDF201E536CAF00C0F56B /* zh-Hant */, + 1FCBDF2B1E536CB700C0F56B /* zh-Hans */, + 1F9034171EC556AA00D97F9C /* de */, + 1F9034221EC556CA00D97F9C /* es */, + 1F90342D1EC556E500D97F9C /* it-IT */, + 1F9034381EC556EC00D97F9C /* ja */, + 1F9034431EC556F300D97F9C /* sk */, + 1F90344E1EC5576E00D97F9C /* ar */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/MacDown/Localization/ar.lproj/InfoPlist.strings b/MacDown/Localization/ar.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ar.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/InfoPlist.strings b/MacDown/Localization/de.lproj/InfoPlist.strings new file mode 100644 index 00000000..4331b750 --- /dev/null +++ b/MacDown/Localization/de.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* (No Commment) */ +"CFBundleName" = "${PRODUCT_NAME}"; + +/* (No Commment) */ +"CFBundleShortVersionString" = "0.1"; + +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/en.lproj/InfoPlist.strings b/MacDown/Localization/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDown/Localization/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/MacDown/Localization/es.lproj/InfoPlist.strings b/MacDown/Localization/es.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/es.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/it-IT.lproj/InfoPlist.strings b/MacDown/Localization/it-IT.lproj/InfoPlist.strings new file mode 100644 index 00000000..4b5ff662 --- /dev/null +++ b/MacDown/Localization/it-IT.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* (No Commment) */ +"CFBundleName" = "${NOME_PRODOTTO}"; + +/* (No Commment) */ +"CFBundleShortVersionString" = "0.1"; + +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014-2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/ja.lproj/InfoPlist.strings b/MacDown/Localization/ja.lproj/InfoPlist.strings new file mode 100644 index 00000000..4878e77b --- /dev/null +++ b/MacDown/Localization/ja.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* (No Commment) */ +"CFBundleName" = "MacDown"; + +/* (No Commment) */ +"CFBundleShortVersionString" = "0.1"; + +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/sk.lproj/InfoPlist.strings b/MacDown/Localization/sk.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sk.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/InfoPlist.strings b/MacDown/Localization/sv.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/sv.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 00000000..2809b900 --- /dev/null +++ b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; + diff --git a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/ar.lproj/InfoPlist.strings b/MacDownTests/ar.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/ar.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/de.lproj/InfoPlist.strings b/MacDownTests/de.lproj/InfoPlist.strings new file mode 100644 index 00000000..8331148b --- /dev/null +++ b/MacDownTests/de.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"CFBundleShortVersionString" = "1.0"; + diff --git a/MacDownTests/en.lproj/InfoPlist.strings b/MacDownTests/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/MacDownTests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/MacDownTests/es.lproj/InfoPlist.strings b/MacDownTests/es.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/es.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/it-IT.lproj/InfoPlist.strings b/MacDownTests/it-IT.lproj/InfoPlist.strings new file mode 100644 index 00000000..8331148b --- /dev/null +++ b/MacDownTests/it-IT.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"CFBundleShortVersionString" = "1.0"; + diff --git a/MacDownTests/ja.lproj/InfoPlist.strings b/MacDownTests/ja.lproj/InfoPlist.strings new file mode 100644 index 00000000..8331148b --- /dev/null +++ b/MacDownTests/ja.lproj/InfoPlist.strings @@ -0,0 +1,3 @@ +/* (No Commment) */ +"CFBundleShortVersionString" = "1.0"; + diff --git a/MacDownTests/sk.lproj/InfoPlist.strings b/MacDownTests/sk.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/sk.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/sv.lproj/InfoPlist.strings b/MacDownTests/sv.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/sv.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/zh-Hans.lproj/InfoPlist.strings b/MacDownTests/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/zh-Hant.lproj/InfoPlist.strings b/MacDownTests/zh-Hant.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/zh-Hant.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file From 56ba798633b4764cabda1c404809dde02550c44a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 14 May 2017 18:38:00 +0800 Subject: [PATCH 296/439] Update translations --- .../Localization/de.lproj/Localizable.strings | 43 ++- .../MPEditorPreferencesViewController.strings | 40 ++- ...MPGeneralPreferencesViewController.strings | 20 +- .../MPHtmlPreferencesViewController.strings | 39 +++ ...PMarkdownPreferencesViewController.strings | 21 ++ .../Localization/de.lproj/MainMenu.strings | 259 +++++++++++++++++- 6 files changed, 404 insertions(+), 18 deletions(-) diff --git a/MacDown/Localization/de.lproj/Localizable.strings b/MacDown/Localization/de.lproj/Localizable.strings index a8b89524..b23f509f 100644 --- a/MacDown/Localization/de.lproj/Localizable.strings +++ b/MacDown/Localization/de.lproj/Localizable.strings @@ -1,17 +1,32 @@ /* Prism theme title */ "(Default)" = "(Standard)"; +/* Displayed when shell utility is not installed */ +"" = ""; + +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "Bei der Erstellung des Dokumentes ist ein Fehler aufgetreten:
%@"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "Dokument konnte nicht erstellt werden:
%@"; + /* Preference pane title. */ "Editor" = "Editor"; +/* preview navigation error message */ +"File not found at path: +%@" = "Das Dokument konnte unter folgendem Pfad nicht gefunden werden:
%@"; + /* Preference pane title. */ -"General" = "Generell"; +"General" = "Allgemein"; /* Toggle editor pane menu item */ -"Hide Editor Pane" = "Verstecke Editor Fenster"; +"Hide Editor Pane" = "Editor ausblenden"; /* Toggle preview pane menu item */ -"Hide Preview Pane" = "Verstecke Vorschau Fenster"; +"Hide Preview Pane" = "Vorschau ausblenden"; /* Install shell utility button */ "Install" = "Installieren"; @@ -19,6 +34,11 @@ /* (No Commment) */ "JJ_PLURAL_FORM_RULE" = "1"; +/* preview navigation error information */ +"MacDown can’t create a file for the clicked link because +the current file is not saved anywhere yet. Save the +current file somewhere to enable this feature." = "MacDown kann für den geklickten Link kein neues Dokument erstellen,
da das jetzige Dokument noch nicht gespeichert wurde. Speichere das jetzige 
Dokument um diese Funktion zu aktivieren."; + /* Preference pane title. */ "Markdown" = "Markdown"; @@ -26,7 +46,22 @@ "Preferences" = "Einstellungen"; /* Preference pane title. */ -"Terminal" = "Konsole"; +"Rendering" = "Vorschau"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "Editor einblenden"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "Vorschau einblenden"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "Shell Erweiterung installiert"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "Shell Erweiterung nicht installiert"; + +/* Preference pane title. */ +"Terminal" = "Terminal"; /* Uninstall shell utility button */ "Uninstall" = "Deinstallieren"; diff --git a/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings index 81099c0d..09b7786e 100644 --- a/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings @@ -1,5 +1,23 @@ +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "Zeichen für Listen:"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus Zeichen)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Verhalten"; + /* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ -"8bz-cc-gLF.title" = "Ändern..."; +"8bz-cc-gLF.title" = "Ändern… "; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Beim Speichern Zeilenumbruch am Ende hinzufügen"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Abstand zum Rand:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Öffnen"; /* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ "GHX-3h-1HI.ibShadowedLabels[1]" = "Aktualisieren"; @@ -7,12 +25,30 @@ /* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ "InD-Fc-CTS.title" = "Zeilenabstand:"; +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Nummerierung in geordneten Listen automatisch erhöhen"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Leerzeichen anstelle von Tabs einfügen"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Breite des Editors beschränken auf"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Sternchen)"; + /* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ "eXF-SL-hBq.title" = "Basis Schriftart:"; /* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ "g5w-Qw-Khw.title" = "×"; +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Über letzte Zeile hinaus scrollen"; + /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ -"vA9-IT-8Z7.title" = "Thema:"; +"vA9-IT-8Z7.title" = "Design:"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus Zeichen)"; diff --git a/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings index df88d1af..fbb7087b 100644 --- a/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings @@ -1,3 +1,21 @@ +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Vorschau mit dem Editor scrollen"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Verhalten"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Editor auf der rechten Seite"; + /* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ -"eLn-fW-Agu.title" = "Aktualisieren"; +"eLn-fW-Agu.title" = "Aktualisierungen"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Vorschau während des Tippens aktualisieren"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Wortanzahl einblenden"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Vorabversionen nutzen"; diff --git a/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings index 87e5c951..77e2733a 100644 --- a/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings @@ -1,6 +1,45 @@ +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Öffnen"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Neu laden"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Vorschau benötigt Internetverbindung"; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-ähnliche Mathe Syntax"; + /* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ "9I3-I7-HLu.title" = "CSS:"; +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax Highlighting für Code Blöcke"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Dollar Zeichen ($) als Trennzeichen innerhalb einer Zeile"; + /* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ "Jmq-wq-Dux.title" = "Benutzerdefiniert"; +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Zeilennummer anzeigen"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Design:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Schriftgröße der Vorschau an Editor anpassen"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Standartpfad:"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Token für Inhaltsverzeichniss erkennen"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "Keine"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Sprachenname"; + diff --git a/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings index dc9d8bad..01d6f9d7 100644 --- a/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings @@ -1,3 +1,24 @@ /* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ "0yU-vT-72e.title" = "Fußnote"; +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Zitat"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Unterstrichen"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Durchgestrichen"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Blockformatierung"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Intelligente Anführungszeichen"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Hochgestellt"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Tabellen"; + diff --git a/MacDown/Localization/de.lproj/MainMenu.strings b/MacDown/Localization/de.lproj/MainMenu.strings index 8c4c5c32..d126815f 100644 --- a/MacDown/Localization/de.lproj/MainMenu.strings +++ b/MacDown/Localization/de.lproj/MainMenu.strings @@ -1,8 +1,155 @@ +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Überschrift 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Suchen"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Vollbildmodus"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformationen"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Rechtscheibung"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Sprachausgabe"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Suchen"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Kursiv"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "MacDown beenden"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Bearbeiten"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "Über MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Exportieren"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Wiederholen"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Auf Aktualisierungen prüfen…"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Durchgestrichen"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Ersetzungen"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Intelligentes Kopieren/Einfügen"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Rechtschreibung automatisch korrigieren"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Unterstrichen"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Hauptmenü"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Überschrift 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Einstellungen…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Sichern als…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Überschrift 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Schließen"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Rechtschreibung und Grammatik"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "Darstellung"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Hilfe"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Ersetzungen"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Textersetzung"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Rechtschreibung und Grammatik einblenden"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Ändern in"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Öffnen… "; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Nach links verschieben"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Alle einblenden"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Alle nach vorne bringen"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Überschrift 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Dienste"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Links 3:1 Rechts"; + /* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ "OY7-WF-poV.title" = "Minimieren"; +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "MacDown ausblenden"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Weitersuchen (rückwärts)"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Sprachausgabe stoppen"; + /* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ -"Ppl-BS-KtG.title" = "Plugins"; +"Ppl-BS-KtG.title" = "Plug-Ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoomen"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Fett"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Alles auswählen"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Auswahl anzeigen"; /* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ "SJM-Pp-ywb.title" = "Exportieren"; @@ -10,6 +157,18 @@ /* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ "Td7-aD-5lo.title" = "Fenster"; +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Großbuchstaben"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Links 1:3 Rechts"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Andere ausblenden"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Markdown rendern"; + /* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ "VkR-aw-5AU.title" = "Bild"; @@ -23,7 +182,13 @@ "XFN-MJ-RrW.title" = "PDF..."; /* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ -"Xz5-n4-O0W.title" = "Finden..."; +"Xz5-n4-O0W.title" = "Suchen … "; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Suchen und Ersetzen …"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Sprachausgabe starten"; /* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ "aTl-1u-JFS.title" = "Drucken..."; @@ -32,26 +197,56 @@ "aUF-d1-5bR.title" = "Fenster"; /* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ -"bMu-UN-Yfx.title" = "Plugins"; +"bMu-UN-Yfx.title" = "Plug-Ins"; /* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ -"bib-Uj-vzu.title" = "Datei"; +"bib-Uj-vzu.title" = "Ablage"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Auswahl für Suche übernehmen"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformationen"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Kleinbuchstaben"; /* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ "dGm-Yl-i3Z.title" = "HTML..."; /* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ -"dMs-cI-mzQ.title" = "Datei"; +"dMs-cI-mzQ.title" = "Ablage"; /* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ -"dRJ-4n-Yzg.title" = "Rückgängig"; +"dRJ-4n-Yzg.title" = "Widerrufen"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Ändern in"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Nach rechts verschieben"; /* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ "gVA-U4-sdL.title" = "Einfügen"; +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Links 1:1 Rechts"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Intelligente Anführungszeichen"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Dokument jetzt prüfen"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Dienste"; + /* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ "i8c-gf-w29.title" = "Kommentar"; +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + /* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ "jn0-Kb-yH6.title" = "Ungeordnete Liste"; @@ -61,14 +256,41 @@ /* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ "jxT-CU-nIS.title" = "Formatieren"; +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Überschrift 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Rechtschreib- und Grammatikprüfung"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Benutzte Dokumente"; + /* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ "pa3-QI-u2k.title" = "Löschen"; /* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ -"pxx-59-PXV.title" = "Speichern..."; +"pxx-59-PXV.title" = "Sichern…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Weitersuchen (vorwärts)"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Papierformat …"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Während der Texteingabe prüfen"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Intelligente Bindestriche"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Datenerkennung"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Benutzte Dokumente"; /* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ -"ts7-v5-Htm.title" = "Kopiere HTML"; +"ts7-v5-Htm.title" = "HTML kopieren"; /* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ "uQy-DD-JDr.title" = "MacDown"; @@ -83,10 +305,13 @@ "vNY-rz-j42.title" = "Bereinige Menü"; /* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ -"vmV-6d-7jI.title" = "Hochformat anwenden"; +"vmV-6d-7jI.title" = "Großbuchstaben"; /* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ -"wHk-AQ-iOQ.title" = "Verstecke Editor Fenster"; +"wHk-AQ-iOQ.title" = "Editor ausblenden"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Überschrift 5"; /* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ "wpr-3q-Mcd.title" = "Hilfe"; @@ -94,6 +319,18 @@ /* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ "x3v-GG-iWU.title" = "Kopieren"; +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Absatz"; + /* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ -"xSb-2f-W1r.title" = "Ansicht"; +"xSb-2f-W1r.title" = "Darstellung"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Sprachausgabe"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Ersetzungen einblenden"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "Neuer Absatz"; From 54236825baac0b64731b18775e3a522e8263ea54 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 15 May 2017 17:22:35 +0800 Subject: [PATCH 297/439] Remove superfluous translation entries --- MacDown/Localization/de.lproj/InfoPlist.strings | 10 +--------- MacDown/Localization/es.lproj/InfoPlist.strings | 2 +- MacDown/Localization/it-IT.lproj/InfoPlist.strings | 10 +--------- MacDown/Localization/ja.lproj/InfoPlist.strings | 10 +--------- MacDown/Localization/sk.lproj/InfoPlist.strings | 2 +- MacDown/Localization/sv.lproj/InfoPlist.strings | 2 +- MacDown/Localization/zh-Hans.lproj/InfoPlist.strings | 4 +--- MacDown/Localization/zh-Hant.lproj/InfoPlist.strings | 2 +- MacDownTests/de.lproj/InfoPlist.strings | 4 +--- MacDownTests/it-IT.lproj/InfoPlist.strings | 4 +--- MacDownTests/ja.lproj/InfoPlist.strings | 4 +--- 11 files changed, 11 insertions(+), 43 deletions(-) diff --git a/MacDown/Localization/de.lproj/InfoPlist.strings b/MacDown/Localization/de.lproj/InfoPlist.strings index 4331b750..874e8a45 100644 --- a/MacDown/Localization/de.lproj/InfoPlist.strings +++ b/MacDown/Localization/de.lproj/InfoPlist.strings @@ -1,9 +1 @@ -/* (No Commment) */ -"CFBundleName" = "${PRODUCT_NAME}"; - -/* (No Commment) */ -"CFBundleShortVersionString" = "0.1"; - -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; - +/* No Localized Strings */ diff --git a/MacDown/Localization/es.lproj/InfoPlist.strings b/MacDown/Localization/es.lproj/InfoPlist.strings index dc62739d..874e8a45 100644 --- a/MacDown/Localization/es.lproj/InfoPlist.strings +++ b/MacDown/Localization/es.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ \ No newline at end of file +/* No Localized Strings */ diff --git a/MacDown/Localization/it-IT.lproj/InfoPlist.strings b/MacDown/Localization/it-IT.lproj/InfoPlist.strings index 4b5ff662..874e8a45 100644 --- a/MacDown/Localization/it-IT.lproj/InfoPlist.strings +++ b/MacDown/Localization/it-IT.lproj/InfoPlist.strings @@ -1,9 +1 @@ -/* (No Commment) */ -"CFBundleName" = "${NOME_PRODOTTO}"; - -/* (No Commment) */ -"CFBundleShortVersionString" = "0.1"; - -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014-2016 Tzu-ping Chung."; - +/* No Localized Strings */ diff --git a/MacDown/Localization/ja.lproj/InfoPlist.strings b/MacDown/Localization/ja.lproj/InfoPlist.strings index 4878e77b..874e8a45 100644 --- a/MacDown/Localization/ja.lproj/InfoPlist.strings +++ b/MacDown/Localization/ja.lproj/InfoPlist.strings @@ -1,9 +1 @@ -/* (No Commment) */ -"CFBundleName" = "MacDown"; - -/* (No Commment) */ -"CFBundleShortVersionString" = "0.1"; - -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; - +/* No Localized Strings */ diff --git a/MacDown/Localization/sk.lproj/InfoPlist.strings b/MacDown/Localization/sk.lproj/InfoPlist.strings index dc62739d..874e8a45 100644 --- a/MacDown/Localization/sk.lproj/InfoPlist.strings +++ b/MacDown/Localization/sk.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ \ No newline at end of file +/* No Localized Strings */ diff --git a/MacDown/Localization/sv.lproj/InfoPlist.strings b/MacDown/Localization/sv.lproj/InfoPlist.strings index dc62739d..874e8a45 100644 --- a/MacDown/Localization/sv.lproj/InfoPlist.strings +++ b/MacDown/Localization/sv.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ \ No newline at end of file +/* No Localized Strings */ diff --git a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings index 2809b900..874e8a45 100644 --- a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings +++ b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings @@ -1,3 +1 @@ -/* (No Commment) */ -"NSHumanReadableCopyright" = "Copyright © 2014–2016 Tzu-ping Chung."; - +/* No Localized Strings */ diff --git a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings index dc62739d..874e8a45 100644 --- a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings +++ b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ \ No newline at end of file +/* No Localized Strings */ diff --git a/MacDownTests/de.lproj/InfoPlist.strings b/MacDownTests/de.lproj/InfoPlist.strings index 8331148b..874e8a45 100644 --- a/MacDownTests/de.lproj/InfoPlist.strings +++ b/MacDownTests/de.lproj/InfoPlist.strings @@ -1,3 +1 @@ -/* (No Commment) */ -"CFBundleShortVersionString" = "1.0"; - +/* No Localized Strings */ diff --git a/MacDownTests/it-IT.lproj/InfoPlist.strings b/MacDownTests/it-IT.lproj/InfoPlist.strings index 8331148b..874e8a45 100644 --- a/MacDownTests/it-IT.lproj/InfoPlist.strings +++ b/MacDownTests/it-IT.lproj/InfoPlist.strings @@ -1,3 +1 @@ -/* (No Commment) */ -"CFBundleShortVersionString" = "1.0"; - +/* No Localized Strings */ diff --git a/MacDownTests/ja.lproj/InfoPlist.strings b/MacDownTests/ja.lproj/InfoPlist.strings index 8331148b..874e8a45 100644 --- a/MacDownTests/ja.lproj/InfoPlist.strings +++ b/MacDownTests/ja.lproj/InfoPlist.strings @@ -1,3 +1 @@ -/* (No Commment) */ -"CFBundleShortVersionString" = "1.0"; - +/* No Localized Strings */ From f0e3a05906a7af20bb950f9423f21284e0408003 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Mon, 15 May 2017 17:24:54 +0800 Subject: [PATCH 298/439] Update translation --- .../Localization/de.lproj/InfoPlist.strings | 2 +- .../Localization/es.lproj/InfoPlist.strings | 2 +- .../it-IT.lproj/InfoPlist.strings | 2 +- .../Localization/ja.lproj/InfoPlist.strings | 2 +- .../Localization/sk.lproj/InfoPlist.strings | 2 +- .../Localization/sv.lproj/InfoPlist.strings | 2 +- .../zh-Hans.lproj/InfoPlist.strings | 2 +- .../zh-Hant.lproj/InfoPlist.strings | 2 +- .../zh-Hant.lproj/Localizable.strings | 7 +- ...PMarkdownPreferencesViewController.strings | 7 +- .../zh-Hant.lproj/MainMenu.strings | 91 ++++++++++++++++++- MacDownTests/de.lproj/InfoPlist.strings | 2 +- MacDownTests/it-IT.lproj/InfoPlist.strings | 2 +- MacDownTests/ja.lproj/InfoPlist.strings | 2 +- 14 files changed, 113 insertions(+), 14 deletions(-) diff --git a/MacDown/Localization/de.lproj/InfoPlist.strings b/MacDown/Localization/de.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/de.lproj/InfoPlist.strings +++ b/MacDown/Localization/de.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/InfoPlist.strings b/MacDown/Localization/es.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/es.lproj/InfoPlist.strings +++ b/MacDown/Localization/es.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/it-IT.lproj/InfoPlist.strings b/MacDown/Localization/it-IT.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/it-IT.lproj/InfoPlist.strings +++ b/MacDown/Localization/it-IT.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ja.lproj/InfoPlist.strings b/MacDown/Localization/ja.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/ja.lproj/InfoPlist.strings +++ b/MacDown/Localization/ja.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sk.lproj/InfoPlist.strings b/MacDown/Localization/sk.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/sk.lproj/InfoPlist.strings +++ b/MacDown/Localization/sk.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/InfoPlist.strings b/MacDown/Localization/sv.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/sv.lproj/InfoPlist.strings +++ b/MacDown/Localization/sv.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings +++ b/MacDown/Localization/zh-Hans.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings +++ b/MacDown/Localization/zh-Hant.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/Localizable.strings b/MacDown/Localization/zh-Hant.lproj/Localizable.strings index dc62739d..1d4d494e 100644 --- a/MacDown/Localization/zh-Hant.lproj/Localizable.strings +++ b/MacDown/Localization/zh-Hant.lproj/Localizable.strings @@ -1 +1,6 @@ -/* No Localized Strings */ \ No newline at end of file +/* Uninstall shell utility button */ +"Uninstall" = "解除安裝"; + +/* default filename if no title can be determined */ +"Untitled" = "未命名"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings index dc62739d..05d129f2 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings @@ -1 +1,6 @@ -/* No Localized Strings */ \ No newline at end of file +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "底線"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "上標"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings index dc62739d..97a73ae0 100644 --- a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings +++ b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings @@ -1 +1,90 @@ -/* No Localized Strings */ \ No newline at end of file +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "標題 2"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "搜尋"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "進入全螢幕模式"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "大小寫轉換"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "搜尋"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "關於 MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "輸出"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "還原"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "檢查更新"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "刪除線"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "標題 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "偏好設定..."; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "另存新檔..."; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "標題 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "關閉"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "拼字及文法檢查"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "開啟..."; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "格式"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "最小化"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "編輯"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "貼上"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "項目符號"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "編號方式"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "格式"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "開啟最近的檔案"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "刪除"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "另存新檔..."; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "頁面設定..."; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "開啟最近的檔案"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "複製 HTML"; + diff --git a/MacDownTests/de.lproj/InfoPlist.strings b/MacDownTests/de.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDownTests/de.lproj/InfoPlist.strings +++ b/MacDownTests/de.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/it-IT.lproj/InfoPlist.strings b/MacDownTests/it-IT.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDownTests/it-IT.lproj/InfoPlist.strings +++ b/MacDownTests/it-IT.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/ja.lproj/InfoPlist.strings b/MacDownTests/ja.lproj/InfoPlist.strings index 874e8a45..dc62739d 100644 --- a/MacDownTests/ja.lproj/InfoPlist.strings +++ b/MacDownTests/ja.lproj/InfoPlist.strings @@ -1 +1 @@ -/* No Localized Strings */ +/* No Localized Strings */ \ No newline at end of file From 9e9cd06f119e6ad8d5ac2b88ef1ae6a1939b556b Mon Sep 17 00:00:00 2001 From: Peter Gerdes Date: Mon, 24 Jul 2017 15:18:14 +0300 Subject: [PATCH 299/439] Added $ to the list of escapable charachters This lets one write \$ to avoid having text between dollar signs marked up as TeX when not intended. --- Dependency/peg-markdown-highlight/pmh_grammar.leg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/peg-markdown-highlight/pmh_grammar.leg b/Dependency/peg-markdown-highlight/pmh_grammar.leg index a4731a50..1ef7401a 100644 --- a/Dependency/peg-markdown-highlight/pmh_grammar.leg +++ b/Dependency/peg-markdown-highlight/pmh_grammar.leg @@ -407,7 +407,7 @@ Space = Spacechar+ Str = NormalChar (NormalChar | '_'+ &Alphanumeric)* -EscapedChar = '\\' !Newline [-\\`~|*_{}[\]()#+.!><] +EscapedChar = '\\' !Newline [-\\`~|*_{}[\]()#+.!><$] Entity = < s:LocMarker ( HexEntity | DecEntity | CharEntity ) > From 971965580bd493cbb444d12c242e3c642049d2aa Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Fri, 28 Jul 2017 22:22:47 +0800 Subject: [PATCH 300/439] Ran pod install with CocoaPods 1.2.1 --- MacDown.xcodeproj/project.pbxproj | 6 +++--- Podfile.lock | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index f0ff607b..da6a6cf1 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -909,7 +909,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; 6C852F8D7610992AEEA172AE /* [CP] Check Pods Manifest.lock */ = { @@ -924,7 +924,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; 9041D3A827C49F34399D813E /* [CP] Embed Pods Frameworks */ = { @@ -954,7 +954,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; C5B8C48273E72106885CA8C4 /* [CP] Embed Pods Frameworks */ = { diff --git a/Podfile.lock b/Podfile.lock index 47b0e0cb..6c1e7406 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -35,4 +35,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 96c5c597eb1bc6ff129b3ca19cad3a7ca134972d -COCOAPODS: 1.1.1 +COCOAPODS: 1.2.1 From 2083d21a4cf79c8a97bee3a2e71db5dfaf40faed Mon Sep 17 00:00:00 2001 From: Niklas Berglund Date: Sun, 30 Jul 2017 17:44:23 +0800 Subject: [PATCH 301/439] Rewrote toolbar item creation and removed pane toggling buttons Using factory methods for creating toolbar items instead of specifying the items and their attributes in a kinda giant dictionary --- .../Code/Application/MPToolbarController.h | 10 - .../Code/Application/MPToolbarController.m | 540 ++++-------------- MacDown/Code/Document/MPDocument.m | 8 - 3 files changed, 121 insertions(+), 437 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.h b/MacDown/Code/Application/MPToolbarController.h index 80d293d1..96d43a17 100644 --- a/MacDown/Code/Application/MPToolbarController.h +++ b/MacDown/Code/Application/MPToolbarController.h @@ -13,14 +13,4 @@ @property (weak) IBOutlet MPDocument *document; -/** - * Update the highlight states of toolbar items that can be highlighted. - */ -- (void)updateHighlightStates; - -- (void)highlightToggleEditorItem; -- (void)unhighlightToggleEditorItem; -- (void)highlightTogglePreviewItem; -- (void)unhighlightTogglePreviewItem; - @end diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index db99ff70..9ea24e7e 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -13,20 +13,13 @@ #pragma clang diagnostic ignored "-Wundeclared-selector" -static NSString *const kMPToolbarDictKeyIsDefaultItem = @"kMPToolbarDictKeyIsDefaultItem"; -static NSString *const kMPToolbarDictKeyOrder = @"kMPToolbarDictKeyOrder"; -static NSString *const kMPToolbarDictKeyIcon = @"kMPToolbarDictKeyIcon"; -static NSString *const kMPToolbarDictKeyTitle = @"kMPToolbarDictKeyTitle"; -static NSString *const kMPToolbarDictKeySubItems = @"kMPToolbarDictKeySubItems"; -static NSString *const kMPToolbarDictKeySegmentStyleSeparated = @"kMPToolbarDictKeySegmentStyleSeparated"; -static NSString *const kMPToolbarDictKeyAction = @"kMPToolbarDictKeyAction"; -static NSString *const kMPToolbarDictKeyHighlightable = @"kMPToolbarDictKeyHighlightable"; +static CGFloat itemWidth = 42.5; @implementation MPToolbarController { - NSDictionary *toolbarItems; - NSArray *toolbarItemKeysOrder; + NSArray *toolbarItems; + NSArray *toolbarItemIdentifiers; /** * Map toolbar item identifier to it's NSToolbarItem or NSToolbarItemGroup object @@ -43,322 +36,79 @@ - (id)init return nil; } - [self setupToolbarItems]; self->toolbarItemIdentifierObjectDictionary = [NSMutableDictionary new]; + [self setupToolbarItems]; return self; } -- (void)updateHighlightStates -{ - self.document.previewVisible ? - [self highlightTogglePreviewItem] : - [self unhighlightTogglePreviewItem]; - - self.document.editorVisible ? - [self highlightToggleEditorItem] : - [self unhighlightToggleEditorItem]; -} - -- (void)highlightToggleEditorItem -{ - [self highlightItemIdentifier:@"toggle-editor-pane" inGroupWithIdentifier:@"toggle-panes-group"]; -} - -- (void)unhighlightToggleEditorItem -{ - [self unhighlightItemIdentifier:@"toggle-editor-pane" inGroupWithIdentifier:@"toggle-panes-group"]; -} - -- (void)highlightTogglePreviewItem -{ - [self highlightItemIdentifier:@"toggle-preview-pane" inGroupWithIdentifier:@"toggle-panes-group"]; -} - -- (void)unhighlightTogglePreviewItem -{ - [self unhighlightItemIdentifier:@"toggle-preview-pane" inGroupWithIdentifier:@"toggle-panes-group"]; -} - #pragma mark - Private -- (void)highlightItemIdentifier:(NSString *)itemIdentifier inGroupWithIdentifier:(NSString *)groupIdentifier -{ - NSToolbarItemGroup *itemGroup = self->toolbarItemIdentifierObjectDictionary[groupIdentifier]; - - if (!itemGroup) - { - return; - } - - NSSegmentedControl *segmentedControl = (NSSegmentedControl *)itemGroup.view; - - int i = 0; - - for (NSToolbarItem *toolbarItem in itemGroup.subitems) - { - if ([toolbarItem.itemIdentifier isEqualToString:itemIdentifier]) - { - [segmentedControl setSelected:YES forSegment:i]; - break; - } - i++; - } -} - -- (void)unhighlightItemIdentifier:(NSString *)itemIdentifier inGroupWithIdentifier:(NSString *)groupIdentifier -{ - NSToolbarItemGroup *itemGroup = self->toolbarItemIdentifierObjectDictionary[groupIdentifier]; - - if (!itemGroup) - { - return; - } - - NSSegmentedControl *segmentedControl = (NSSegmentedControl *)itemGroup.view; - - int i = 0; - - for (NSToolbarItem *toolbarItem in itemGroup.subitems) - { - if ([toolbarItem.itemIdentifier isEqualToString:itemIdentifier]) - { - [segmentedControl setSelected:NO forSegment:i]; - break; - } - i++; - } -} - - (void)setupToolbarItems { - // NSToolbarItem identifier as key - self->toolbarItems = @{ - @"indent-group": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeySegmentStyleSeparated: @YES, - kMPToolbarDictKeyHighlightable: @NO, - kMPToolbarDictKeySubItems: @{ - @"shift-left": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconShiftLeft", - kMPToolbarDictKeyTitle: @"Shift left", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(unindent:)], - }, - @"shift-right": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconShiftRight", - kMPToolbarDictKeyTitle: @"Shift right", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(indent:)], - }, - } - }, - @"text-formatting-group": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeySegmentStyleSeparated: @NO, - kMPToolbarDictKeyHighlightable: @NO, - kMPToolbarDictKeySubItems: @{ - @"bold": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconBold", - kMPToolbarDictKeyTitle: @"Bold", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrong:)], - }, - @"italic": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconItalic", - kMPToolbarDictKeyTitle: @"Italic", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEmphasis:)], - }, - @"underline": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: @"ToolbarIconUnderlined", - kMPToolbarDictKeyTitle: @"Underline", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnderline:)], - }, - } - }, - @"heading-group": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeySegmentStyleSeparated: @YES, - kMPToolbarDictKeyHighlightable: @NO, - kMPToolbarDictKeySubItems: @{ - @"heading1": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconHeading1", - kMPToolbarDictKeyTitle: @"Heading 1", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH1:)], - }, - @"heading2": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconHeading2", - kMPToolbarDictKeyTitle: @"Heading 2", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH2:)], - }, - @"heading3": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @2, - kMPToolbarDictKeyIcon: @"ToolbarIconHeading3", - kMPToolbarDictKeyTitle: @"Heading 3", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(convertToH3:)], - }, - } - }, - @"list-group": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @3, - kMPToolbarDictKeySegmentStyleSeparated: @YES, - kMPToolbarDictKeyHighlightable: @NO, - kMPToolbarDictKeySubItems: @{ - @"unordered-list": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconUnorderedList", - kMPToolbarDictKeyTitle: @"Unordered list", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleUnorderedList:)], - }, - @"ordered-list": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconOrderedList", - kMPToolbarDictKeyTitle: @"Ordered list", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleOrderedList:)], - } - } - }, - @"blockquote": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @4, - kMPToolbarDictKeyIcon: @"ToolbarIconBlockquote", - kMPToolbarDictKeyTitle: @"Blockquote", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleBlockquote:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"code": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @5, - kMPToolbarDictKeyIcon: @"ToolbarIconInlineCode", - kMPToolbarDictKeyTitle: @"Inline code", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleInlineCode:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"link": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @6, - kMPToolbarDictKeyIcon: @"ToolbarIconLink", - kMPToolbarDictKeyTitle: @"Link", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleLink:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"image": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @7, - kMPToolbarDictKeyIcon: @"ToolbarIconImage", - kMPToolbarDictKeyTitle: @"Inline code", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleImage:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"copy-html": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @8, - kMPToolbarDictKeyIcon: @"ToolbarIconCopyHTML", - kMPToolbarDictKeyTitle: @"Copy HTML", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(copyHtml:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"toggle-panes-group": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @9, - kMPToolbarDictKeySegmentStyleSeparated: @NO, - kMPToolbarDictKeyHighlightable: @YES, - kMPToolbarDictKeySubItems: @{ - @"toggle-editor-pane": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @0, - kMPToolbarDictKeyIcon: @"ToolbarIconHideEditor", - kMPToolbarDictKeyTitle: @"Toggle editor pane", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleEditorPane:)], - }, - @"toggle-preview-pane": @{ - kMPToolbarDictKeyIsDefaultItem: @YES, - kMPToolbarDictKeyOrder: @1, - kMPToolbarDictKeyIcon: @"ToolbarIconHidePreview", - kMPToolbarDictKeyTitle: @"Toggle preview pane", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(togglePreviewPane:)], - }, - } - }, - @"comment": @{ - kMPToolbarDictKeyIsDefaultItem: @NO, - kMPToolbarDictKeyOrder: @10, - kMPToolbarDictKeyIcon: @"ToolbarIconComment", - kMPToolbarDictKeyTitle: @"Comment", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleComment:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"highlight": @{ - kMPToolbarDictKeyIsDefaultItem: @NO, - kMPToolbarDictKeyOrder: @11, - kMPToolbarDictKeyIcon: @"ToolbarIconHighlight", - kMPToolbarDictKeyTitle: @"Highlight", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleHighlight:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - @"strikethrough": @{ - kMPToolbarDictKeyIsDefaultItem: @NO, - kMPToolbarDictKeyOrder: @12, - kMPToolbarDictKeyIcon: @"ToolbarIconStrikethrough", - kMPToolbarDictKeyTitle: @"Strikethrough", - kMPToolbarDictKeyAction: [NSValue valueWithPointer:@selector(toggleStrikethrough:)], - kMPToolbarDictKeyHighlightable: @NO, - }, - }; + self->toolbarItems = @[ + [self toolbarItemGroupWithIdentifier:@"indent-group" separated:YES items:@[ + [self toolbarItemWithIdentifier:@"shift-left" label:@"Shift left" icon:@"ToolbarIconShiftLeft" action:@selector(unindent:)], + [self toolbarItemWithIdentifier:@"shift-right" label:@"Shift right" icon:@"ToolbarIconShiftRight" action:@selector(indent:)] + ] + ], + [self toolbarItemGroupWithIdentifier:@"text-formatting-group" separated:NO items:@[ + [self toolbarItemWithIdentifier:@"bold" label:@"Strong" icon:@"ToolbarIconBold" action:@selector(toggleStrong:)], + [self toolbarItemWithIdentifier:@"italic" label:@"Emphasize" icon:@"ToolbarIconItalic" action:@selector(toggleEmphasis:)], + [self toolbarItemWithIdentifier:@"underline" label:@"Underline" icon:@"ToolbarIconUnderlined" action:@selector(toggleUnderline:)] + ] + ], + [self toolbarItemGroupWithIdentifier:@"heading-group" separated:NO items:@[ + [self toolbarItemWithIdentifier:@"heading1" label:@"Heading 1" icon:@"ToolbarIconHeading1" action:@selector(convertToH1:)], + [self toolbarItemWithIdentifier:@"heading2" label:@"Heading 2" icon:@"ToolbarIconHeading2" action:@selector(convertToH2:)], + [self toolbarItemWithIdentifier:@"heading3" label:@"Heading 3" icon:@"ToolbarIconHeading3" action:@selector(convertToH3:)] + ] + ], + [self toolbarItemGroupWithIdentifier:@"list-group" separated:YES items:@[ + [self toolbarItemWithIdentifier:@"unordered-list" label:@"Unordered list" icon:@"ToolbarIconUnorderedList" action:@selector(toggleUnorderedList:)], + [self toolbarItemWithIdentifier:@"ordered-list" label:@"Ordered list" icon:@"ToolbarIconOrderedList" action:@selector(toggleOrderedList:)] + ] + ], + [self toolbarItemWithIdentifier:@"blockquote" label:@"Blockquote" icon:@"ToolbarIconBlockquote" action:@selector(toggleBlockquote:)], + [self toolbarItemWithIdentifier:@"code" label:@"Inline code" icon:@"ToolbarIconInlineCode" action:@selector(toggleInlineCode:)], + [self toolbarItemWithIdentifier:@"link" label:@"Link" icon:@"ToolbarIconLink" action:@selector(toggleLink:)], + [self toolbarItemWithIdentifier:@"image" label:@"Image" icon:@"ToolbarIconImage" action:@selector(toggleImage:)], + [self toolbarItemWithIdentifier:@"copy-html" label:@"Copy HTML" icon:@"ToolbarIconCopyHTML" action:@selector(copyHTML:)], + [self toolbarItemWithIdentifier:@"comment" label:@"Comment" icon:@"ToolbarIconComment" action:@selector(toggleComment:)], + [self toolbarItemWithIdentifier:@"highlight" label:@"Highlight" icon:@"ToolbarIconHighlight" action:@selector(toggleHighlight:)], + [self toolbarItemWithIdentifier:@"strikethrough" label:@"Strikethrough" icon:@"ToolbarIconStrikethrough" action:@selector(toggleStrikethrough:)] + ]; + + self->toolbarItemIdentifiers = [self toolbarItemIdentifiersFromItemsArray:self->toolbarItems]; } /** - * Creates an array with ordered default item keys from the passed argument dictionary which should be from the hierarchical dictionary produced by setupToolbarItems. - * - * @returns Ordered keys(identifiers) + * Returns an array with all item identifiers for the toolbar items in the passed in _toolbarItemsArray_. */ -- (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictionary -{ - NSMutableArray *orderedKeys = [NSMutableArray new]; +- (NSArray *)toolbarItemIdentifiersFromItemsArray:(NSArray *)toolbarItemsArray { + NSMutableArray *orderedIdentifiers = [NSMutableArray new]; - // Fill with required capacity - for (int i = 0; i < dictionary.count; i++) - { - orderedKeys[i] = [NSNull null]; + for (NSToolbarItem *item in self->toolbarItems) { + [orderedIdentifiers addObject:item.itemIdentifier]; } - int defaultItemCount = 0; - - for (NSDictionary *itemKey in dictionary) - { - NSDictionary *itemDictionary = dictionary[itemKey]; - BOOL isDefaultItem = [itemDictionary[kMPToolbarDictKeyIsDefaultItem] boolValue]; - - if (isDefaultItem) - { - NSInteger index = [itemDictionary[kMPToolbarDictKeyOrder] integerValue]; - orderedKeys[index] = itemKey; - defaultItemCount++; - } - } + return [orderedIdentifiers copy]; +} + +- (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender +{ + NSInteger selectedIndex = sender.selectedSegment; - [orderedKeys removeObjectsInRange:NSMakeRange(defaultItemCount, orderedKeys.count - defaultItemCount)]; + NSToolbarItemGroup *selectedGroup = self->toolbarItemIdentifierObjectDictionary[sender.identifier]; + NSToolbarItem *selectedItem = selectedGroup.subitems[selectedIndex]; - return [orderedKeys copy]; + // Invoke the toolbar item's action + // Must convert to IMP to let the compiler know about the method definition + MPDocument *document = self.document; + IMP imp = [document methodForSelector:selectedItem.action]; + void (*impFunc)(id) = (void *)imp; + impFunc(document); } @@ -366,7 +116,8 @@ - (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictiona - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar { // From toolbar item dictionary(setupToolbarItems) - NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarDefaultItemKeysForDictionary:self->toolbarItems]; + //NSArray *orderedToolbarItemIdentifiers = [self orderedToolbarDefaultItemKeysForDictionary:self->toolbarItems]; + NSArray *orderedToolbarItemIdentifiers = [self toolbarItemIdentifiersFromItemsArray:self->toolbarItems]; // Mixed identifiers from dictionary and space at below specified indices NSMutableArray *defaultItemIdentifiers = [NSMutableArray new]; @@ -402,7 +153,7 @@ - (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictiona - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar { - return [self->toolbarItems allKeys]; + return self->toolbarItemIdentifiers; } - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar @@ -412,126 +163,77 @@ - (NSArray *)orderedToolbarDefaultItemKeysForDictionary:(NSDictionary *)dictiona - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag { - static CGFloat itemWidth = 42.5; + NSToolbarItem *item; + + for (NSToolbarItem *currentItem in self->toolbarItems) { + if ([currentItem.itemIdentifier isEqualToString:itemIdentifier]) { + item = currentItem; + break; + } + } + + return item; +} + + +#pragma mark - Toolbar item factory methods + +/** + * Factory method for creating and configuring a NSToolbarItemGroup object. + */ +- (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifier separated:(BOOL)separated items:(NSArray *)items { + NSToolbarItemGroup *itemGroup = [[NSToolbarItemGroup alloc] initWithItemIdentifier:itemIdentifier]; + itemGroup.subitems = items; + + CGFloat itemGroupWidth = itemWidth * items.count; - NSDictionary *itemDict = self->toolbarItems[itemIdentifier]; + NSSegmentedControl *segmentedControl = [[NSSegmentedControl alloc] init]; + segmentedControl.identifier = itemIdentifier; + segmentedControl.segmentStyle = separated ? NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; + segmentedControl.trackingMode = NSSegmentSwitchTrackingMomentary; + segmentedControl.segmentCount = items.count; + segmentedControl.target = self; + segmentedControl.action = @selector(selectedToolbarItemGroupItem:); - if (itemDict) + int segmentIndex = 0; + + for (NSToolbarItem *subItem in items) { - NSDictionary *subItemDicts = itemDict[kMPToolbarDictKeySubItems]; - - NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; - - BOOL highlightable = [itemDict[kMPToolbarDictKeyHighlightable] boolValue]; + [segmentedControl setImage:subItem.image forSegment:segmentIndex]; + [segmentedControl setWidth:40.0 forSegment:segmentIndex]; - if (subItemDicts == nil) // It's a regular toolbar item - { - NSString *title = itemDict[kMPToolbarDictKeyTitle]; - NSString *iconName = itemDict[kMPToolbarDictKeyIcon]; - SEL itemSelector = [itemDict[kMPToolbarDictKeyAction] pointerValue]; - - item.label = title; - - NSImage *itemImage = [NSImage imageNamed:iconName]; - [itemImage setTemplate:YES]; - NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; - itemButton.image = itemImage; - itemButton.bezelStyle = NSBezelStyleTexturedRounded; - itemButton.focusRingType = NSFocusRingTypeDefault; - itemButton.target = self.document; - itemButton.action = itemSelector; - itemButton.state = NSOffState; - - if (highlightable) - { - [itemButton setButtonType:NSToggleButton]; - } - - item.view = itemButton; - - [self->toolbarItemIdentifierObjectDictionary setObject:item forKey:itemIdentifier]; - - return item; - } - else // It's a segment control - { - NSToolbarItemGroup *itemGroup = [[NSToolbarItemGroup alloc] initWithItemIdentifier:itemIdentifier]; - - BOOL segmentStyleSeparated = [itemDict[kMPToolbarDictKeySegmentStyleSeparated] boolValue]; - - NSSegmentedControl *segmentedControl = [[NSSegmentedControl alloc] init]; - segmentedControl.identifier = itemIdentifier; - segmentedControl.segmentStyle = segmentStyleSeparated ? - NSSegmentStyleSeparated : NSSegmentStyleTexturedRounded; - - if (highlightable) - { - segmentedControl.trackingMode = NSSegmentSwitchTrackingSelectAny; - } - else - { - segmentedControl.trackingMode = NSSegmentSwitchTrackingMomentary; - } - - segmentedControl.segmentCount = subItemDicts.count; - - NSMutableArray *itemGroupItems = [NSMutableArray new]; - - NSArray *orderedSubItemIdentifers = [self orderedToolbarDefaultItemKeysForDictionary:subItemDicts]; - int segmentIndex = 0; - - for (NSString *subItemIdentifier in orderedSubItemIdentifers) - { - NSDictionary *subItemDict = subItemDicts[subItemIdentifier]; - NSString *subItemTitle = subItemDict[kMPToolbarDictKeyTitle]; - NSString *subItemIcon = subItemDict[kMPToolbarDictKeyIcon]; - - NSToolbarItem *subItem = [[NSToolbarItem alloc] initWithItemIdentifier:subItemIdentifier]; - - subItem.label = subItemTitle; - - NSImage *subItemImage = [NSImage imageNamed:subItemIcon]; - [subItemImage setTemplate:YES]; - - [segmentedControl setImage:subItemImage forSegment:segmentIndex]; - [segmentedControl setWidth:40.0 forSegment:segmentIndex]; - - [itemGroupItems addObject:subItem]; - segmentIndex++; - } - - CGFloat itemGroupWidth = itemWidth * itemGroupItems.count; - - itemGroup.subitems = [itemGroupItems copy]; - itemGroup.view = segmentedControl; - itemGroup.maxSize = NSMakeSize(itemGroupWidth, 25); - itemGroup.target = self; - itemGroup.action = @selector(selectedToolbarItemGroupItem:); - - [self->toolbarItemIdentifierObjectDictionary setObject:itemGroup forKey:itemIdentifier]; - - return itemGroup; - } + segmentIndex++; } - return nil; + itemGroup.maxSize = NSMakeSize(itemGroupWidth, 25); + itemGroup.view = segmentedControl; + + [self->toolbarItemIdentifierObjectDictionary setObject:itemGroup forKey:itemIdentifier]; + + return itemGroup; } -- (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender -{ - NSInteger selectedIndex = sender.selectedSegment; +/** + * Factory method for creating and configuring a NSToolbarItem object. + */ +- (NSToolbarItem *)toolbarItemWithIdentifier:(NSString *)itemIdentifier label:(NSString *)label icon:(NSString *)iconImageName action:(SEL)action { + NSToolbarItem *toolbarItem = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; + toolbarItem.label = label; - NSDictionary *groupDictionary = self->toolbarItems[sender.identifier]; - NSDictionary *groupSubItemsDictionary = groupDictionary[kMPToolbarDictKeySubItems]; - NSDictionary *selectedItemDictionary = [groupSubItemsDictionary allValues][selectedIndex]; + NSImage *itemImage = [NSImage imageNamed:iconImageName]; + [itemImage setTemplate:YES]; + NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; + itemButton.image = itemImage; + itemButton.bezelStyle = NSBezelStyleTexturedRounded; + itemButton.focusRingType = NSFocusRingTypeDefault; + itemButton.target = self.document; + itemButton.action = action; - // Invoke the toolbar item's action - // Must convert to IMP to let the compiler know about the method definition - SEL selectedItemAction = [selectedItemDictionary[kMPToolbarDictKeyAction] pointerValue]; - MPDocument *document = self.document; - IMP imp = [document methodForSelector:selectedItemAction]; - void (*impFunc)(id) = (void *)imp; - impFunc(document); + toolbarItem.view = itemButton; + + [self->toolbarItemIdentifierObjectDictionary setObject:toolbarItem forKey:itemIdentifier]; + + return toolbarItem; } diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 2870e342..6259db63 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -442,9 +442,6 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller [self redrawDivider]; [self reloadFromLoadedString]; }]; - - // Set initial highlight states - [self.toolbarController updateHighlightStates]; } - (void)reloadFromLoadedString @@ -1349,19 +1346,16 @@ - (IBAction)insertNewParagraph:(id)sender - (IBAction)setEditorOneQuarter:(id)sender { [self setSplitViewDividerLocation:0.25]; - [self.toolbarController updateHighlightStates]; } - (IBAction)setEditorThreeQuarters:(id)sender { [self setSplitViewDividerLocation:0.75]; - [self.toolbarController updateHighlightStates]; } - (IBAction)setEqualSplit:(id)sender { [self setSplitViewDividerLocation:0.5]; - [self.toolbarController updateHighlightStates]; } - (IBAction)toggleToolbar:(id)sender @@ -1415,8 +1409,6 @@ - (void)toggleSplitterCollapsingEditorPane:(BOOL)forEditorPane [self setSplitViewDividerLocation:self.previousSplitRatio]; } - - [self.toolbarController updateHighlightStates]; } - (void)setupEditor:(NSString *)changedKey From 7f7206a90f210953a35ec91c474f4feebde7e835 Mon Sep 17 00:00:00 2001 From: Christian Tietze Date: Wed, 2 Aug 2017 10:06:05 +0200 Subject: [PATCH 302/439] fix passing NULL paragraph style Does not currently happen in MacDown, but if you play around with HGMarkdownHighlighter in other projects, you're open to a crash here. --- Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m b/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m index ffd41207..4ecacddd 100644 --- a/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m +++ b/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m @@ -258,7 +258,9 @@ - (void) clearHighlightingForRange:(NSRange)range [textStorage applyFontTraits:_clearFontTraitMask range:range]; [textStorage removeAttribute:NSBackgroundColorAttributeName range:range]; [textStorage removeAttribute:NSLinkAttributeName range:range]; - if (self.targetTextView.typingAttributes && self.resetTypingAttributes) + if (self.targetTextView.typingAttributes + && self.resetTypingAttributes + && self.defaultTypingAttributes[NSParagraphStyleAttributeName] != NULL) { [textStorage addAttribute:NSParagraphStyleAttributeName value:self.defaultTypingAttributes[NSParagraphStyleAttributeName] From bd2da12c3e0f936a0bda092614de00d291366374 Mon Sep 17 00:00:00 2001 From: Christian Tietze Date: Sat, 5 Aug 2017 11:17:28 +0200 Subject: [PATCH 303/439] fix wrongly typed NULL check --- Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m b/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m index 4ecacddd..3a4bb445 100644 --- a/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m +++ b/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m @@ -260,7 +260,7 @@ - (void) clearHighlightingForRange:(NSRange)range [textStorage removeAttribute:NSLinkAttributeName range:range]; if (self.targetTextView.typingAttributes && self.resetTypingAttributes - && self.defaultTypingAttributes[NSParagraphStyleAttributeName] != NULL) + && self.defaultTypingAttributes[NSParagraphStyleAttributeName]) { [textStorage addAttribute:NSParagraphStyleAttributeName value:self.defaultTypingAttributes[NSParagraphStyleAttributeName] From ee70afb6845574c65759c61b51fac5ef92d21c28 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Aug 2017 13:02:13 +0800 Subject: [PATCH 304/439] Mark MPTerminalPreferencesViewController ax localizable Fix #838 --- MacDown.xcodeproj/project.pbxproj | 34 ++++++++++++++++--- .../MPTerminalPreferencesViewController.xib | 0 ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ ...PTerminalPreferencesViewController.strings | 18 ++++++++++ 11 files changed, 192 insertions(+), 4 deletions(-) rename MacDown/Code/Preferences/{ => Base.lproj}/MPTerminalPreferencesViewController.xib (100%) create mode 100644 MacDown/Code/Preferences/ar.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/de.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/es.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/it-IT.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/ja.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/sk.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/sv.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/zh-Hans.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Code/Preferences/zh-Hant.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 6e59beef..4d2c61a8 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -34,6 +34,7 @@ 1F3386E61A6B999600FC88C4 /* DOMNode+Text.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3386E51A6B999600FC88C4 /* DOMNode+Text.m */; }; 1F33F2A11A3B4B660001C849 /* MPDocumentSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A01A3B4B660001C849 /* MPDocumentSplitView.m */; }; 1F33F2A41A3B56D20001C849 /* NSColor+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */; }; + 1F3619E61F36DA0F00EDA15A /* MPTerminalPreferencesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F3619E81F36DA0F00EDA15A /* MPTerminalPreferencesViewController.xib */; }; 1F396E6619B0EA17000D3EFC /* MPEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F396E6519B0EA17000D3EFC /* MPEditorView.m */; }; 1F3A47521953E84700293259 /* help.md in Resources */ = {isa = PBXBuildFile; fileRef = 1F3A47511953E84700293259 /* help.md */; }; 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 1F3FC8A91C85AE9F000965E1 /* MacDown.sdef */; }; @@ -83,7 +84,6 @@ 1FFF301D1948A5320009AF24 /* MPStringLookupTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */; }; 770BB49E962A302D0715A6A5 /* libPods-MacDown.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */; }; 852D523C1E260A6400BA7162 /* MPTerminalPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */; }; - 852D523D1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 852D523B1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib */; }; 905EF1A9196164CA00FC3CE9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 905EF1A8196164CA00FC3CE9 /* Foundation.framework */; }; 905EF1B7196164F300FC3CE9 /* macdown in Copy Command Line Utility */ = {isa = PBXBuildFile; fileRef = 905EF1A7196164CA00FC3CE9 /* macdown */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; B5C5C1666A506FEA86435D25 /* libPods-macdown-cmd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */; }; @@ -191,6 +191,16 @@ 1F33F2A01A3B4B660001C849 /* MPDocumentSplitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDocumentSplitView.m; sourceTree = ""; }; 1F33F2A21A3B56D20001C849 /* NSColor+HTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+HTML.h"; sourceTree = ""; }; 1F33F2A31A3B56D20001C849 /* NSColor+HTML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSColor+HTML.m"; sourceTree = ""; }; + 1F3619E71F36DA0F00EDA15A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MPTerminalPreferencesViewController.xib; sourceTree = ""; }; + 1F3619EA1F36DA1300EDA15A /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F3619EC1F36DA1400EDA15A /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F3619EE1F36DA1600EDA15A /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F3619F01F36DA1700EDA15A /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F3619F21F36DA1800EDA15A /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F3619F41F36DA1A00EDA15A /* it-IT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "it-IT"; path = "it-IT.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F3619F61F36DA1C00EDA15A /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F3619F81F36DA1D00EDA15A /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F3619FA1F36DA1F00EDA15A /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; 1F396E6419B0EA17000D3EFC /* MPEditorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPEditorView.h; sourceTree = ""; }; 1F396E6519B0EA17000D3EFC /* MPEditorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPEditorView.m; sourceTree = ""; }; 1F3A47511953E84700293259 /* help.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = help.md; path = Resources/help.md; sourceTree = ""; }; @@ -376,7 +386,6 @@ 7A8EA75FA95818275755F0B6 /* Pods-macdown-cmd.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-macdown-cmd.release.xcconfig"; path = "Pods/Target Support Files/Pods-macdown-cmd/Pods-macdown-cmd.release.xcconfig"; sourceTree = ""; }; 852D52391E260A6400BA7162 /* MPTerminalPreferencesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPTerminalPreferencesViewController.h; sourceTree = ""; }; 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPTerminalPreferencesViewController.m; sourceTree = ""; }; - 852D523B1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPTerminalPreferencesViewController.xib; sourceTree = ""; }; 8CDC5EA0050D2F722FB1AADD /* Pods-MacDownTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDownTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDownTests/Pods-MacDownTests.debug.xcconfig"; sourceTree = ""; }; 905EF1A7196164CA00FC3CE9 /* macdown */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = macdown; sourceTree = BUILT_PRODUCTS_DIR; }; 905EF1A8196164CA00FC3CE9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -480,7 +489,7 @@ 1F0D9D87194AC83C008E1856 /* MPHtmlPreferencesViewController.xib */, 852D52391E260A6400BA7162 /* MPTerminalPreferencesViewController.h */, 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */, - 852D523B1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib */, + 1F3619E81F36DA0F00EDA15A /* MPTerminalPreferencesViewController.xib */, 1F0D9D72194AC7F7008E1856 /* MPPreferences.h */, 1F0D9D73194AC7F7008E1856 /* MPPreferences.m */, ); @@ -894,7 +903,7 @@ 1F0D9DAA194AC8CB008E1856 /* Credits.rtf in Resources */, 1FBDFEA51962A27300BEEA70 /* MPGeneralPreferencesViewController.xib in Resources */, 1F0F3BFC195F75F200FC0B3B /* MathJax in Resources */, - 852D523D1E260A6400BA7162 /* MPTerminalPreferencesViewController.xib in Resources */, + 1F3619E61F36DA0F00EDA15A /* MPTerminalPreferencesViewController.xib in Resources */, 1F4C8E9A194AE0B9004BF82E /* MarkdownDocument.icns in Resources */, 1F59491B1AB57C78007394CB /* syntax_highlighting.json in Resources */, 1F0D9DAB194AC8CB008E1856 /* InfoPlist.strings in Resources */, @@ -1301,6 +1310,23 @@ name = Localizable.strings; sourceTree = ""; }; + 1F3619E81F36DA0F00EDA15A /* MPTerminalPreferencesViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + 1F3619E71F36DA0F00EDA15A /* Base */, + 1F3619EA1F36DA1300EDA15A /* sv */, + 1F3619EC1F36DA1400EDA15A /* zh-Hant */, + 1F3619EE1F36DA1600EDA15A /* zh-Hans */, + 1F3619F01F36DA1700EDA15A /* de */, + 1F3619F21F36DA1800EDA15A /* es */, + 1F3619F41F36DA1A00EDA15A /* it-IT */, + 1F3619F61F36DA1C00EDA15A /* ja */, + 1F3619F81F36DA1D00EDA15A /* sk */, + 1F3619FA1F36DA1F00EDA15A /* ar */, + ); + name = MPTerminalPreferencesViewController.xib; + sourceTree = ""; + }; 1FB3C0221E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/MacDown/Code/Preferences/MPTerminalPreferencesViewController.xib b/MacDown/Code/Preferences/Base.lproj/MPTerminalPreferencesViewController.xib similarity index 100% rename from MacDown/Code/Preferences/MPTerminalPreferencesViewController.xib rename to MacDown/Code/Preferences/Base.lproj/MPTerminalPreferencesViewController.xib diff --git a/MacDown/Code/Preferences/ar.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/ar.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/ar.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/de.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/de.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/de.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/es.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/es.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/es.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/it-IT.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/it-IT.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/it-IT.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/ja.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/ja.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/ja.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/sk.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/sk.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/sk.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/sv.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/sv.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/sv.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/zh-Hans.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/zh-Hans.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/zh-Hans.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Code/Preferences/zh-Hant.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Code/Preferences/zh-Hant.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Code/Preferences/zh-Hant.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; From 0f7c79ba5447ec1d000c591b1f014eb8fd17180c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Aug 2017 13:22:24 +0800 Subject: [PATCH 305/439] Move XIB localization around --- MacDown.xcodeproj/project.pbxproj | 1 + .../Base.lproj/MPTerminalPreferencesViewController.xib | 0 .../ar.lproj/MPTerminalPreferencesViewController.strings | 0 .../de.lproj/MPTerminalPreferencesViewController.strings | 0 .../es.lproj/MPTerminalPreferencesViewController.strings | 0 .../it-IT.lproj/MPTerminalPreferencesViewController.strings | 0 .../ja.lproj/MPTerminalPreferencesViewController.strings | 0 .../sk.lproj/MPTerminalPreferencesViewController.strings | 0 .../sv.lproj/MPTerminalPreferencesViewController.strings | 0 .../zh-Hans.lproj/MPTerminalPreferencesViewController.strings | 0 .../zh-Hant.lproj/MPTerminalPreferencesViewController.strings | 0 11 files changed, 1 insertion(+) rename MacDown/{Code/Preferences => Localization}/Base.lproj/MPTerminalPreferencesViewController.xib (100%) rename MacDown/{Code/Preferences => Localization}/ar.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/de.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/es.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/it-IT.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/ja.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/sk.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/sv.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/zh-Hans.lproj/MPTerminalPreferencesViewController.strings (100%) rename MacDown/{Code/Preferences => Localization}/zh-Hant.lproj/MPTerminalPreferencesViewController.strings (100%) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 4d2c61a8..4f93405b 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -1325,6 +1325,7 @@ 1F3619FA1F36DA1F00EDA15A /* ar */, ); name = MPTerminalPreferencesViewController.xib; + path = ../../Localization; sourceTree = ""; }; 1FB3C0221E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib */ = { diff --git a/MacDown/Code/Preferences/Base.lproj/MPTerminalPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPTerminalPreferencesViewController.xib similarity index 100% rename from MacDown/Code/Preferences/Base.lproj/MPTerminalPreferencesViewController.xib rename to MacDown/Localization/Base.lproj/MPTerminalPreferencesViewController.xib diff --git a/MacDown/Code/Preferences/ar.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/ar.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/de.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/de.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/es.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/es.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/it-IT.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/it-IT.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/ja.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/ja.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/ja.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/sk.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/sk.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/sk.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/sv.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/sv.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/sv.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/zh-Hans.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/zh-Hans.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings diff --git a/MacDown/Code/Preferences/zh-Hant.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings similarity index 100% rename from MacDown/Code/Preferences/zh-Hant.lproj/MPTerminalPreferencesViewController.strings rename to MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings From 677592e34befd8d9711bb505aed75dfe59c42434 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Aug 2017 13:51:04 +0800 Subject: [PATCH 306/439] Import localization from Transifex New languages: * French * Icelandic * Korean (South Korea) * Portuguese (Brazil) --- MacDown.xcodeproj/project.pbxproj | 76 ++++ ...PTerminalPreferencesViewController.strings | 19 +- .../Localization/de.lproj/Localizable.strings | 23 +- .../MPEditorPreferencesViewController.strings | 17 +- ...ExportPanelAccessoryViewController.strings | 7 +- ...MPGeneralPreferencesViewController.strings | 6 + .../MPHtmlPreferencesViewController.strings | 22 +- ...PMarkdownPreferencesViewController.strings | 20 +- ...PTerminalPreferencesViewController.strings | 19 +- .../Localization/de.lproj/MainMenu.strings | 38 +- .../Localization/es.lproj/Localizable.strings | 70 ++- .../MPEditorPreferencesViewController.strings | 57 +++ ...ExportPanelAccessoryViewController.strings | 7 +- ...MPGeneralPreferencesViewController.strings | 28 +- .../MPHtmlPreferencesViewController.strings | 54 +++ ...PMarkdownPreferencesViewController.strings | 43 +- ...PTerminalPreferencesViewController.strings | 19 +- .../Localization/es.lproj/MainMenu.strings | 267 +++++++++++- MacDown/Localization/fr.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/fr.lproj/InfoPlist.strings | 1 + .../Localization/fr.lproj/Localizable.strings | 85 ++++ .../Localization/fr.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ ...PTerminalPreferencesViewController.strings | 18 + .../Localization/fr.lproj/MainMenu.strings | 348 +++++++++++++++ MacDown/Localization/is.lproj/Credits.rtf | 406 ++++++++++++++++++ .../Localization/is.lproj/InfoPlist.strings | 1 + .../Localization/is.lproj/Localizable.strings | 48 +++ .../Localization/is.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ ...PTerminalPreferencesViewController.strings | 18 + .../Localization/is.lproj/MainMenu.strings | 348 +++++++++++++++ ...PTerminalPreferencesViewController.strings | 19 +- ...PTerminalPreferencesViewController.strings | 19 +- MacDown/Localization/ko-KR.lproj/Credits.rtf | 406 ++++++++++++++++++ .../ko-KR.lproj/InfoPlist.strings | 1 + .../ko-KR.lproj/Localizable.strings | 21 + .../ko-KR.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ ...PTerminalPreferencesViewController.strings | 18 + .../Localization/ko-KR.lproj/MainMenu.strings | 348 +++++++++++++++ MacDown/Localization/pt-BR.lproj/Credits.rtf | 406 ++++++++++++++++++ .../pt-BR.lproj/InfoPlist.strings | 1 + .../pt-BR.lproj/Localizable.strings | 92 ++++ .../pt-BR.lproj/MPDocument.strings | 1 + .../MPEditorPreferencesViewController.strings | 63 +++ ...ExportPanelAccessoryViewController.strings | 6 + ...MPGeneralPreferencesViewController.strings | 27 ++ .../MPHtmlPreferencesViewController.strings | 57 +++ ...PMarkdownPreferencesViewController.strings | 42 ++ ...PTerminalPreferencesViewController.strings | 18 + .../Localization/pt-BR.lproj/MainMenu.strings | 348 +++++++++++++++ ...PTerminalPreferencesViewController.strings | 19 +- ...PTerminalPreferencesViewController.strings | 19 +- ...PTerminalPreferencesViewController.strings | 19 +- .../zh-Hant.lproj/Localizable.strings | 39 ++ .../MPHtmlPreferencesViewController.strings | 6 + ...PMarkdownPreferencesViewController.strings | 3 + ...PTerminalPreferencesViewController.strings | 19 +- .../zh-Hant.lproj/MainMenu.strings | 169 +++++++- MacDownTests/fr.lproj/InfoPlist.strings | 1 + MacDownTests/is.lproj/InfoPlist.strings | 1 + MacDownTests/ko-KR.lproj/InfoPlist.strings | 1 + MacDownTests/pt-BR.lproj/InfoPlist.strings | 1 + 76 files changed, 5050 insertions(+), 199 deletions(-) create mode 100644 MacDown/Localization/fr.lproj/Credits.rtf create mode 100644 MacDown/Localization/fr.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/fr.lproj/Localizable.strings create mode 100644 MacDown/Localization/fr.lproj/MPDocument.strings create mode 100644 MacDown/Localization/fr.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/fr.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/fr.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/fr.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/fr.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/fr.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/fr.lproj/MainMenu.strings create mode 100644 MacDown/Localization/is.lproj/Credits.rtf create mode 100644 MacDown/Localization/is.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/is.lproj/Localizable.strings create mode 100644 MacDown/Localization/is.lproj/MPDocument.strings create mode 100644 MacDown/Localization/is.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/is.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/is.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/is.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/is.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/is.lproj/MainMenu.strings create mode 100644 MacDown/Localization/ko-KR.lproj/Credits.rtf create mode 100644 MacDown/Localization/ko-KR.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/ko-KR.lproj/Localizable.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPDocument.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/ko-KR.lproj/MainMenu.strings create mode 100644 MacDown/Localization/pt-BR.lproj/Credits.rtf create mode 100644 MacDown/Localization/pt-BR.lproj/InfoPlist.strings create mode 100644 MacDown/Localization/pt-BR.lproj/Localizable.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPDocument.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/pt-BR.lproj/MainMenu.strings create mode 100644 MacDownTests/fr.lproj/InfoPlist.strings create mode 100644 MacDownTests/is.lproj/InfoPlist.strings create mode 100644 MacDownTests/ko-KR.lproj/InfoPlist.strings create mode 100644 MacDownTests/pt-BR.lproj/InfoPlist.strings diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 4f93405b..7931a4b2 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -150,6 +150,42 @@ 1A198D1BA59D710201DD3BC8 /* Pods-MacDown.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.debug.xcconfig"; sourceTree = ""; }; 1F002A21195B3DAE008B8D93 /* MPRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPRenderer.h; sourceTree = ""; }; 1F002A22195B3DAE008B8D93 /* MPRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPRenderer.m; sourceTree = ""; }; + 1F05E8AB1F36E53B00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MainMenu.strings; sourceTree = ""; }; + 1F05E8AC1F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F05E8AD1F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8AE1F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8AF1F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8B01F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8B11F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8B21F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localization/fr.lproj/MPDocument.strings; sourceTree = ""; }; + 1F05E8B31F36E53C00E4D06C /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = fr; path = Localization/fr.lproj/Credits.rtf; sourceTree = ""; }; + 1F05E8B41F36E56200E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MainMenu.strings; sourceTree = ""; }; + 1F05E8B51F36E56200E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1F05E8B61F36E56200E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8B71F36E56200E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8B81F36E56300E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8B91F36E56300E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8BA1F36E56300E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = is.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1F05E8BB1F36E56300E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = is; path = Localization/is.lproj/MPDocument.strings; sourceTree = ""; }; + 1F05E8BC1F36E56300E4D06C /* is */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = is; path = Localization/is.lproj/Credits.rtf; sourceTree = ""; }; + 1F05E8BD1F36E58700E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MainMenu.strings"; sourceTree = ""; }; + 1F05E8BE1F36E58700E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1F05E8BF1F36E58700E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8C01F36E58700E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8C11F36E58800E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8C21F36E58800E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8C31F36E58800E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "ko-KR.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8C41F36E58800E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "Localization/ko-KR.lproj/MPDocument.strings"; sourceTree = ""; }; + 1F05E8C51F36E58800E4D06C /* ko-KR */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "ko-KR"; path = "Localization/ko-KR.lproj/Credits.rtf"; sourceTree = ""; }; + 1F05E8C61F36E5A900E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MainMenu.strings"; sourceTree = ""; }; + 1F05E8C71F36E5A900E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1F05E8C81F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8C91F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8CA1F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8CB1F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8CC1F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F05E8CD1F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "Localization/pt-BR.lproj/MPDocument.strings"; sourceTree = ""; }; + 1F05E8CE1F36E5AA00E4D06C /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "pt-BR"; path = "Localization/pt-BR.lproj/Credits.rtf"; sourceTree = ""; }; 1F0D9D5E194AC7CF008E1856 /* NSString+Lookup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Lookup.h"; sourceTree = ""; }; 1F0D9D5F194AC7CF008E1856 /* NSString+Lookup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Lookup.m"; sourceTree = ""; }; 1F0D9D60194AC7CF008E1856 /* NSTextView+Autocomplete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTextView+Autocomplete.h"; sourceTree = ""; }; @@ -858,6 +894,10 @@ ja, sk, ar, + fr, + is, + "ko-KR", + "pt-BR", ); mainGroup = 1FA6DE181941CC9E000409FB; productRefGroup = 1FA6DE221941CC9E000409FB /* Products */; @@ -1183,6 +1223,10 @@ 1F90342E1EC556EC00D97F9C /* ja */, 1F9034391EC556F300D97F9C /* sk */, 1F9034441EC5576E00D97F9C /* ar */, + 1F05E8AB1F36E53B00E4D06C /* fr */, + 1F05E8B41F36E56200E4D06C /* is */, + 1F05E8BD1F36E58700E4D06C /* ko-KR */, + 1F05E8C61F36E5A900E4D06C /* pt-BR */, ); name = MainMenu.xib; sourceTree = ""; @@ -1200,6 +1244,10 @@ 1F9034341EC556EC00D97F9C /* ja */, 1F90343F1EC556F300D97F9C /* sk */, 1F90344A1EC5576E00D97F9C /* ar */, + 1F05E8B21F36E53C00E4D06C /* fr */, + 1F05E8BB1F36E56300E4D06C /* is */, + 1F05E8C41F36E58800E4D06C /* ko-KR */, + 1F05E8CD1F36E5AA00E4D06C /* pt-BR */, ); name = MPDocument.xib; path = ../..; @@ -1218,6 +1266,10 @@ 1F9034321EC556EC00D97F9C /* ja */, 1F90343D1EC556F300D97F9C /* sk */, 1F9034481EC5576E00D97F9C /* ar */, + 1F05E8AF1F36E53C00E4D06C /* fr */, + 1F05E8B81F36E56300E4D06C /* is */, + 1F05E8C11F36E58800E4D06C /* ko-KR */, + 1F05E8CA1F36E5AA00E4D06C /* pt-BR */, ); name = MPEditorPreferencesViewController.xib; path = ../..; @@ -1236,6 +1288,10 @@ 1F9034331EC556EC00D97F9C /* ja */, 1F90343E1EC556F300D97F9C /* sk */, 1F9034491EC5576E00D97F9C /* ar */, + 1F05E8B01F36E53C00E4D06C /* fr */, + 1F05E8B91F36E56300E4D06C /* is */, + 1F05E8C21F36E58800E4D06C /* ko-KR */, + 1F05E8CB1F36E5AA00E4D06C /* pt-BR */, ); name = MPHtmlPreferencesViewController.xib; path = ../..; @@ -1254,6 +1310,10 @@ 1F9034311EC556EC00D97F9C /* ja */, 1F90343C1EC556F300D97F9C /* sk */, 1F9034471EC5576E00D97F9C /* ar */, + 1F05E8AE1F36E53C00E4D06C /* fr */, + 1F05E8B71F36E56200E4D06C /* is */, + 1F05E8C01F36E58700E4D06C /* ko-KR */, + 1F05E8C91F36E5AA00E4D06C /* pt-BR */, ); name = MPMarkdownPreferencesViewController.xib; path = ../..; @@ -1272,6 +1332,10 @@ 1F9034351EC556EC00D97F9C /* ja */, 1F9034401EC556F300D97F9C /* sk */, 1F90344B1EC5576E00D97F9C /* ar */, + 1F05E8B31F36E53C00E4D06C /* fr */, + 1F05E8BC1F36E56300E4D06C /* is */, + 1F05E8C51F36E58800E4D06C /* ko-KR */, + 1F05E8CE1F36E5AA00E4D06C /* pt-BR */, ); name = Credits.rtf; sourceTree = ""; @@ -1323,6 +1387,10 @@ 1F3619F61F36DA1C00EDA15A /* ja */, 1F3619F81F36DA1D00EDA15A /* sk */, 1F3619FA1F36DA1F00EDA15A /* ar */, + 1F05E8B11F36E53C00E4D06C /* fr */, + 1F05E8BA1F36E56300E4D06C /* is */, + 1F05E8C31F36E58800E4D06C /* ko-KR */, + 1F05E8CC1F36E5AA00E4D06C /* pt-BR */, ); name = MPTerminalPreferencesViewController.xib; path = ../../Localization; @@ -1341,6 +1409,10 @@ 1F90342F1EC556EC00D97F9C /* ja */, 1F90343A1EC556F300D97F9C /* sk */, 1F9034451EC5576E00D97F9C /* ar */, + 1F05E8AC1F36E53C00E4D06C /* fr */, + 1F05E8B51F36E56200E4D06C /* is */, + 1F05E8BE1F36E58700E4D06C /* ko-KR */, + 1F05E8C71F36E5A900E4D06C /* pt-BR */, ); name = MPExportPanelAccessoryViewController.xib; sourceTree = ""; @@ -1358,6 +1430,10 @@ 1F9034301EC556EC00D97F9C /* ja */, 1F90343B1EC556F300D97F9C /* sk */, 1F9034461EC5576E00D97F9C /* ar */, + 1F05E8AD1F36E53C00E4D06C /* fr */, + 1F05E8B61F36E56200E4D06C /* is */, + 1F05E8BF1F36E58700E4D06C /* ko-KR */, + 1F05E8C81F36E5AA00E4D06C /* pt-BR */, ); name = MPGeneralPreferencesViewController.xib; path = ../..; diff --git a/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/Localizable.strings b/MacDown/Localization/de.lproj/Localizable.strings index b23f509f..60d20053 100644 --- a/MacDown/Localization/de.lproj/Localizable.strings +++ b/MacDown/Localization/de.lproj/Localizable.strings @@ -6,7 +6,14 @@ /* preview navigation error information */ "An error occurred while creating the file: -%@" = "Bei der Erstellung des Dokumentes ist ein Fehler aufgetreten:
%@"; +%@" = "Bei der Erstellung des Dokuments ist ein Fehler aufgetreten: +
%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ Zeichen (ohne Leerzeichen);%@ Zeichen (ohne Leerzeichen)"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ Zeichen;%@ Zeichen"; /* preview navigation error message */ "Can’t create file: @@ -37,11 +44,16 @@ /* preview navigation error information */ "MacDown can’t create a file for the clicked link because the current file is not saved anywhere yet. Save the -current file somewhere to enable this feature." = "MacDown kann für den geklickten Link kein neues Dokument erstellen,
da das jetzige Dokument noch nicht gespeichert wurde. Speichere das jetzige 
Dokument um diese Funktion zu aktivieren."; +current file somewhere to enable this feature." = "MacDown kann für den ausgewählten Link kein neues Dokument erstellen, da das jetzige Dokument noch nicht gespeichert wurde. Speichere das jetzige Dokument, um diese Funktion zu aktivieren."; /* Preference pane title. */ "Markdown" = "Markdown"; +/* preview navigation error information */ +"Please check the path of your link is correct. Turn on +“Automatically create link targets” If you want MacDown to +create nonexistent link targets for you." = "Bitte prüfe den angegebenen Link. Aktiviere „Automatisch Dateien für Links erzeugen“, wenn MacDown Link-Ziele automatisch erstellen soll."; + /* Preferences window title. */ "Preferences" = "Einstellungen"; @@ -55,10 +67,10 @@ current file somewhere to enable this feature." = "MacDown kann für den geklick "Restore Preview Pane" = "Vorschau einblenden"; /* Label stating that shell utility has been installed */ -"Shell utility installed" = "Shell Erweiterung installiert"; +"Shell utility installed" = "Shell-Erweiterung installiert"; /* Label stating that shell utility has not been installed */ -"Shell utility not installed" = "Shell Erweiterung nicht installiert"; +"Shell utility not installed" = "Shell-Erweiterung nicht installiert"; /* Preference pane title. */ "Terminal" = "Terminal"; @@ -69,3 +81,6 @@ current file somewhere to enable this feature." = "MacDown kann für den geklick /* default filename if no title can be determined */ "Untitled" = "Ohne Titel"; +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ Wort;%@ Wörter"; + diff --git a/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings index 09b7786e..6017a9ab 100644 --- a/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings @@ -1,14 +1,17 @@ /* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ "0Bc-iD-VCh.title" = "Zeichen für Listen:"; +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← springt zu erstem Nicht-Whitespace-Zeichen in der Zeile"; + /* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ -"2yJ-j5-PLm.title" = "- (Minus Zeichen)"; +"2yJ-j5-PLm.title" = "- (Minus-Zeichen)"; /* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ "6JP-Pc-JFd.title" = "Verhalten"; /* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ -"8bz-cc-gLF.title" = "Ändern… "; +"8bz-cc-gLF.title" = "Ändern … "; /* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ "9Wp-5V-GeQ.title" = "Beim Speichern Zeilenumbruch am Ende hinzufügen"; @@ -38,7 +41,7 @@ "bnJ-BQ-mHV.title" = "* (Sternchen)"; /* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ -"eXF-SL-hBq.title" = "Basis Schriftart:"; +"eXF-SL-hBq.title" = "Basis-Schriftart:"; /* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ "g5w-Qw-Khw.title" = "×"; @@ -46,9 +49,15 @@ /* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ "nBR-LK-G9a.title" = "Über letzte Zeile hinaus scrollen"; +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Umschließende Zeichen automatisch ergänzen"; + /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ "vA9-IT-8Z7.title" = "Design:"; +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Für aktuellen Block Zeilen-Präfix automatisch einfügen"; + /* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ -"zX4-JY-wTT.title" = "+ (Plus Zeichen)"; +"zX4-JY-wTT.title" = "+ (Plus-Zeichen)"; diff --git a/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings index dc62739d..332fc2b1 100644 --- a/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings @@ -1 +1,6 @@ -/* No Localized Strings */ \ No newline at end of file +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Syntax-Hervorhebung einbinden"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Stile einbinden"; + diff --git a/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings index fbb7087b..b019a675 100644 --- a/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPGeneralPreferencesViewController.strings @@ -10,6 +10,12 @@ /* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ "eLn-fW-Agu.title" = "Aktualisierungen"; +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatisch Dateien für Links erzeugen"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Bei Programmstart neues Dokument erstellen"; + /* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ "npz-xj-plX.title" = "Vorschau während des Tippens aktualisieren"; diff --git a/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings index 77e2733a..5f4db140 100644 --- a/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings @@ -8,20 +8,23 @@ "5Ch-dG-juL.title" = "Vorschau benötigt Internetverbindung"; /* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ -"6vg-3f-KWk.title" = "TeX-ähnliche Mathe Syntax"; +"6vg-3f-KWk.title" = "TeX-ähnliche Mathematik-Syntax"; /* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ "9I3-I7-HLu.title" = "CSS:"; /* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ -"BuQ-02-oQB.title" = "Syntax Highlighting für Code Blöcke"; +"BuQ-02-oQB.title" = "Syntax-Hervorhebung für Code-Blöcke"; /* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ -"GF9-Dm-IoB.title" = "Dollar Zeichen ($) als Trennzeichen innerhalb einer Zeile"; +"GF9-Dm-IoB.title" = "Dollar-Zeichen ($) als Inline-Trennzeichen"; /* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ "Jmq-wq-Dux.title" = "Benutzerdefiniert"; +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Zeilenumbrüche beibehalten"; + /* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ "WZa-V6-vvf.title" = "Zeilennummer anzeigen"; @@ -32,10 +35,16 @@ "aWw-Wb-pBl.title" = "Schriftgröße der Vorschau an Editor anpassen"; /* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ -"e1A-Mm-svq.title" = "Standartpfad:"; +"e1A-Mm-svq.title" = "Standardpfad:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Jekyll Front Matter erkennen"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Aufgabenlisten-Syntax"; /* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ -"nvS-dZ-eHT.title" = "Token für Inhaltsverzeichniss erkennen"; +"nvS-dZ-eHT.title" = "Token für Inhaltsverzeichnis erkennen"; /* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ "pWW-vM-8JK.title" = "Keine"; @@ -43,3 +52,6 @@ /* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ "qFd-cs-OtZ.title" = "Sprachenname"; +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Zusatz:"; + diff --git a/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings index 01d6f9d7..8523d97f 100644 --- a/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings @@ -4,14 +4,29 @@ /* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ "2lB-hq-5eX.title" = "Zitat"; +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Markierung"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Hervorhebung innerhalb von Wörtern"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Abgetrennte (fenced) Code-Blöcke"; + /* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ "Gdr-Ro-ZnW.title" = "Unterstrichen"; /* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ "RjP-zE-c6b.title" = "Durchgestrichen"; +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Automatische Links"; + /* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ -"TXy-fD-S4Y.title" = "Blockformatierung"; +"TXy-fD-S4Y.title" = "Block-Formatierung"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline-Formatierung"; /* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ "aSK-nR-xMr.title" = "Intelligente Anführungszeichen"; @@ -19,6 +34,9 @@ /* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ "k2n-VN-cKT.title" = "Hochgestellt"; +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Dokumentformatierung"; + /* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ "z8g-3M-hbc.title" = "Tabellen"; diff --git a/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/MainMenu.strings b/MacDown/Localization/de.lproj/MainMenu.strings index d126815f..965d9e70 100644 --- a/MacDown/Localization/de.lproj/MainMenu.strings +++ b/MacDown/Localization/de.lproj/MainMenu.strings @@ -10,6 +10,9 @@ /* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ "1gz-YB-DZE.title" = "Vollbildmodus"; +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Markiert"; + /* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ "2oI-Rn-ZJC.title" = "Transformationen"; @@ -41,7 +44,7 @@ "6dh-zS-Vam.title" = "Wiederholen"; /* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ -"8xL-1V-VPX.title" = "Auf Aktualisierungen prüfen…"; +"8xL-1V-VPX.title" = "Auf Aktualisierungen prüfen …"; /* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ "9CN-Qi-Fln.title" = "Durchgestrichen"; @@ -65,10 +68,10 @@ "B98-b8-che.title" = "Überschrift 4"; /* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ -"BOF-NM-1cW.title" = "Einstellungen…"; +"BOF-NM-1cW.title" = "Einstellungen …"; /* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ -"Bw7-FT-i3A.title" = "Sichern als…"; +"Bw7-FT-i3A.title" = "Sichern als …"; /* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ "D4C-PE-qJi.title" = "Überschrift 6"; @@ -101,11 +104,14 @@ "I8Y-e8-XDx.title" = "Ändern in"; /* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ -"IAo-SY-fd9.title" = "Öffnen… "; +"IAo-SY-fd9.title" = "Öffnen … "; /* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ "Jzs-tR-jkL.title" = "Nach links verschieben"; +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Zurück zur letzten Version"; + /* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ "Kd2-mp-pUS.title" = "Alle einblenden"; @@ -137,7 +143,7 @@ "Oyz-dy-DGm.title" = "Sprachausgabe stoppen"; /* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ -"Ppl-BS-KtG.title" = "Plug-Ins"; +"Ppl-BS-KtG.title" = "Plug-ins"; /* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ "R4o-n2-Eq4.title" = "Zoomen"; @@ -154,11 +160,14 @@ /* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ "SJM-Pp-ywb.title" = "Exportieren"; +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Vorschau ausblenden"; + /* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ "Td7-aD-5lo.title" = "Fenster"; /* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ -"UEZ-Bs-lqG.title" = "Großbuchstaben"; +"UEZ-Bs-lqG.title" = "Großschreiben"; /* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ "VW7-VH-9yl.title" = "Links 1:3 Rechts"; @@ -179,7 +188,7 @@ "Was-JA-tGl.title" = "Neu"; /* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ -"XFN-MJ-RrW.title" = "PDF..."; +"XFN-MJ-RrW.title" = "PDF …"; /* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ "Xz5-n4-O0W.title" = "Suchen … "; @@ -191,13 +200,13 @@ "Ynk-f8-cLZ.title" = "Sprachausgabe starten"; /* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ -"aTl-1u-JFS.title" = "Drucken..."; +"aTl-1u-JFS.title" = "Drucken …"; /* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ "aUF-d1-5bR.title" = "Fenster"; /* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ -"bMu-UN-Yfx.title" = "Plug-Ins"; +"bMu-UN-Yfx.title" = "Plug-ins"; /* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ "bib-Uj-vzu.title" = "Ablage"; @@ -212,7 +221,7 @@ "d9M-CD-aMd.title" = "Kleinbuchstaben"; /* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ -"dGm-Yl-i3Z.title" = "HTML..."; +"dGm-Yl-i3Z.title" = "HTML …"; /* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ "dMs-cI-mzQ.title" = "Ablage"; @@ -245,7 +254,7 @@ "i8c-gf-w29.title" = "Kommentar"; /* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ -"iRQ-Q6-N4K.title" = "Inline Code"; +"iRQ-Q6-N4K.title" = "Inline-Code"; /* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ "jn0-Kb-yH6.title" = "Ungeordnete Liste"; @@ -269,7 +278,7 @@ "pa3-QI-u2k.title" = "Löschen"; /* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ -"pxx-59-PXV.title" = "Sichern…"; +"pxx-59-PXV.title" = "Sichern …"; /* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ "q09-fT-Sye.title" = "Weitersuchen (vorwärts)"; @@ -292,6 +301,9 @@ /* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ "ts7-v5-Htm.title" = "HTML kopieren"; +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Block-Zitat"; + /* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ "uQy-DD-JDr.title" = "MacDown"; @@ -299,7 +311,7 @@ "uRl-iY-unG.title" = "Ausschneiden"; /* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ -"ugx-EN-xKu.title" = "MacDown Hilfe"; +"ugx-EN-xKu.title" = "MacDown-Hilfe"; /* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ "vNY-rz-j42.title" = "Bereinige Menü"; diff --git a/MacDown/Localization/es.lproj/Localizable.strings b/MacDown/Localization/es.lproj/Localizable.strings index bb948144..adbfe552 100644 --- a/MacDown/Localization/es.lproj/Localizable.strings +++ b/MacDown/Localization/es.lproj/Localizable.strings @@ -1,24 +1,92 @@ +/* Prism theme title */ +"(Default)" = "(Predeterminado)"; + /* Displayed when shell utility is not installed */ "" = ""; +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "Ha ocurrido un error al crear el archivo: +%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ carácter (sin espacios);%@ caracteres (sin espacios)"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ carácter;%@ caracteres"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "No se puede crear el archivo: +%@"; + +/* Preference pane title. */ +"Editor" = "Editor"; + +/* preview navigation error message */ +"File not found at path: +%@" = "Archivo no encontrado en la ruta: +%@"; + /* Preference pane title. */ "General" = "General"; +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "Ocultar el editor"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "Ocultar la vista previa"; + /* Install shell utility button */ "Install" = "Instalar"; /* (No Commment) */ "JJ_PLURAL_FORM_RULE" = "1"; +/* preview navigation error information */ +"MacDown can’t create a file for the clicked link because +the current file is not saved anywhere yet. Save the +current file somewhere to enable this feature." = "MacDown no ha podido crear un archivo para el enlace pulsado porque +el archivo actual ha sido guardado todavía. Guarde el archivo actual +para activar esta característica."; + /* Preference pane title. */ "Markdown" = "Markdown"; +/* preview navigation error information */ +"Please check the path of your link is correct. Turn on +“Automatically create link targets” If you want MacDown to +create nonexistent link targets for you." = "Compruebe que la ruta del enlace es correcta. Active la opción +“Crear automáticamente los archivos apuntados por los enlaces” +si quiere que MacDown cree nuevos archivos enlazados."; + /* Preferences window title. */ "Preferences" = "Preferencias"; +/* Preference pane title. */ +"Rendering" = "Visualización"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "Volver a mostrar el editor"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "Volver a mostrar la vista previa"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "Utilidad de terminal instalada"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "Utilidad de terminal no instalada"; + +/* Preference pane title. */ +"Terminal" = "Terminal"; + /* Uninstall shell utility button */ "Uninstall" = "Desinstalar"; /* default filename if no title can be determined */ -"Untitled" = "Sin Título"; +"Untitled" = "Sin título"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ palabra;%@ palabras"; diff --git a/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings index 7df836df..b5acc26e 100644 --- a/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings @@ -1,6 +1,63 @@ +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "Símbolo de lista:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← salta al primer carácter de tipo no-espacio-en-blanco"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Signo menos)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Comportamiento"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Modificar..."; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Asegurar un salto de línea en el final del fichero al guardar"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Márgenes del texto:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Mostrar"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Recargar"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Interlineado:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Incrementar automáticamente la numeración en listas ordenadas"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insertar espacios en lugar de tabuladores"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limitar el ancho del editor a"; + /* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ "bnJ-BQ-mHV.title" = "* (Asterisco)"; +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Tipo de letra base:"; + /* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ "g5w-Qw-Khw.title" = "×"; +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Desplazar después del final"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Completar automáticamente caracteres coincidentes"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Tema:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Insertar automáticamente un prefijo de línea para el bloque actual"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Signo más)"; + diff --git a/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings index dc62739d..6534fa04 100644 --- a/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/es.lproj/MPExportPanelAccessoryViewController.strings @@ -1 +1,6 @@ -/* No Localized Strings */ \ No newline at end of file +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Incluir resaltado de sintaxis"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Incluir estilos"; + diff --git a/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings index dc62739d..86720351 100644 --- a/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings @@ -1 +1,27 @@ -/* No Localized Strings */ \ No newline at end of file +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sincronizar la barra de desplazamiento de la vista previa al desplazar el editor"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Comportamiento"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Desplazar el editor a la derecha"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Actualizar"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Crear automáticamente los archivos apuntados por los enlaces"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Asegurar un documento abierto al iniciar"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Actualizar la previsualización automáticamente al teclear"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Mostrar el recuento de palabras"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Incluir versiones preliminares"; + diff --git a/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings index e241f583..5eee0e16 100644 --- a/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings @@ -1,3 +1,57 @@ +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Mostrar"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Recargar"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "El soporte para ecuaciones requiere una conexión a Internet."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "Sintaxis de ecuaciones tipo TeX"; + /* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ "9I3-I7-HLu.title" = "CSS:"; +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Bloque de código con resaltado de sintaxis"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Usar el símbolo del dólar ($) como delimitador en línea"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Personalizado"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Visualizar el salto de línea literalmente"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Mostrar los números de línea"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Tema:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Escalar la previsualización en función del tamaño de letra del editor"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Ruta por defecto:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detectar cabeceras de Jekyll"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Sintaxis de lista de tareas"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detectar token de tabla de contenidos"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "Ninguno"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Nombre del lenguaje"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accesorio:"; + diff --git a/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings index dc62739d..539fef7b 100644 --- a/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings @@ -1 +1,42 @@ -/* No Localized Strings */ \ No newline at end of file +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Nota al pie"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Cita"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Destacar"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Énfasis intra-palabra"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Bloque de código cercado"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Subrayado"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Tachado"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autoenlace"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Formato de bloque"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Formato en línea"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superíndice"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Formato del documento"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Tabla"; + diff --git a/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/MainMenu.strings b/MacDown/Localization/es.lproj/MainMenu.strings index 0f4bbaa0..6294f088 100644 --- a/MacDown/Localization/es.lproj/MainMenu.strings +++ b/MacDown/Localization/es.lproj/MainMenu.strings @@ -1,6 +1,39 @@ +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Encabezado 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Buscar"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Usar pantalla completa"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Destacar"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformaciones"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Ortografía"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Habla"; + /* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ "4EN-yA-p0u.title" = "Buscar"; +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Enfatizar"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Salir de MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Editar"; + /* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ "5kV-Vb-QxS.title" = "Acerca de MacDown"; @@ -10,30 +43,150 @@ /* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ "6dh-zS-Vam.title" = "Rehacer"; +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Buscar actualizaciones..."; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Tachado"; + /* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ "9ic-FL-obx.title" = "Sustituciones"; +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Copiar/Pegar inteligente"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Corregir ortografía automáticamente"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Subrayado"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Menú principal"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Encabezado 4"; + /* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ "BOF-NM-1cW.title" = "Preferencias..."; /* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ -"Bw7-FT-i3A.title" = "Guardar Como..."; +"Bw7-FT-i3A.title" = "Guardar como..."; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Encabezado 6"; /* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ "DVo-aG-piG.title" = "Cerrar"; +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Ortografía y gramática"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "Ver"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Ayuda"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Sustituciones"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Enlace"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Reemplazo de texto"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Mostrar ortografía y gramática"; + /* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ "I8Y-e8-XDx.title" = "Convertir a"; /* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ "IAo-SY-fd9.title" = "Abrir..."; +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Desplazar a la izquierda"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Volver a la versión guardada"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Mostrar todos"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Traer todo al frente"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Formato"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Encabezado 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Servicios"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Izquierda 3:1 Derecha"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimizar"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Ocultar MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Buscar el anterior"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Dejar de hablar"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + /* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ "R4o-n2-Eq4.title" = "Zoom"; +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Negrita"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Seleccionar todo"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Saltar a la selección"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Exportar"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Ocultar la vista previa"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Ventana"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Convertir a mayúsculas"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Izquierda 1:3 Derecha"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Ocultar el resto"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Visualizar Markdown"; + /* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ "VkR-aw-5AU.title" = "Imagen"; +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Editar"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "Nuevo"; + /* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ "XFN-MJ-RrW.title" = "PDF..."; @@ -41,47 +194,155 @@ "Xz5-n4-O0W.title" = "Buscar..."; /* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ -"YEy-JH-Tfz.title" = "Buscar y Reemplazar..."; +"YEy-JH-Tfz.title" = "Buscar y reemplazar..."; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Empezar a hablar"; /* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ "aTl-1u-JFS.title" = "Imprimir..."; +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Ventana"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "Archivo"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Usar la selección para buscar"; + /* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ "c8a-y6-VQd.title" = "Transformaciones"; +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Convertir a minúsculas"; + /* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ "dGm-Yl-i3Z.title" = "HTML..."; +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "Archivo"; + /* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ "dRJ-4n-Yzg.title" = "Deshacer"; /* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ "e8h-vX-NQb.title" = "Convertir a"; +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Desplazar a la derecha"; + /* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ "gVA-U4-sdL.title" = "Pegar"; +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Izquierda 1:1 Derecha"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Comillas inteligentes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Comprobar el documento ahora"; + /* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ "hz9-B4-Xy5.title" = "Servicios"; +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comentario"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Código en línea"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Lista no ordenada"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Lista ordenada"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Formato"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Encabezado 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Comprobar gramática con ortografía"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Abrir reciente"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Borrar"; + /* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ "pxx-59-PXV.title" = "Guardar..."; +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Buscar siguiente"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Configuración de página..."; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Comprobar ortografía al escribir"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Guiones inteligentes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Detectores de datos"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Abrir reciente"; + /* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ "ts7-v5-Htm.title" = "Copiar HTML"; +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = " Cita de bloque"; + /* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ "uQy-DD-JDr.title" = "MacDown"; /* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ "uRl-iY-unG.title" = "Cortar"; +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "Ayuda de MacDown"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Vaciar menú"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Convertir a mayúsculas"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Ocultar el editor"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Encabezado 5"; + /* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ "wpr-3q-Mcd.title" = "Ayuda"; /* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ "x3v-GG-iWU.title" = "Copiar"; +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Párrafo"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "Vista"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Habla"; + /* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ -"z6F-FW-3nz.title" = "Mostrar Sustituciones"; +"z6F-FW-3nz.title" = "Mostrar sustituciones"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "Nuevo párrafo"; diff --git a/MacDown/Localization/fr.lproj/Credits.rtf b/MacDown/Localization/fr.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/fr.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/fr.lproj/InfoPlist.strings b/MacDown/Localization/fr.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/fr.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/fr.lproj/Localizable.strings b/MacDown/Localization/fr.lproj/Localizable.strings new file mode 100644 index 00000000..d3ea0f89 --- /dev/null +++ b/MacDown/Localization/fr.lproj/Localizable.strings @@ -0,0 +1,85 @@ +/* Prism theme title */ +"(Default)" = "(Par défaut)"; + +/* Displayed when shell utility is not installed */ +"" = ""; + +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "Une erreur est survenue pendant la création du fichier : +%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ charactère (sans espaces);%@ charactères (sans espaces)"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ charactère;%@ charactères"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "Impossible de créer le fichier : +%@"; + +/* Preference pane title. */ +"Editor" = "Éditeur"; + +/* preview navigation error message */ +"File not found at path: +%@" = "FIchier non trouvé : +%@"; + +/* Preference pane title. */ +"General" = "Général"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "Masquer l’éditeur"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "Masquer la Prévisualisation"; + +/* Install shell utility button */ +"Install" = "Installer"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* preview navigation error information */ +"MacDown can’t create a file for the clicked link because +the current file is not saved anywhere yet. Save the +current file somewhere to enable this feature." = "MacDown ne peut pas créer de fichier pour le lien cliqué +car le fichier actuel n’est pas sauvegardé. Sauvegardez +d’abord ce fichier quelque part pour activer cette fonction."; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* Preferences window title. */ +"Preferences" = "Préférences"; + +/* Preference pane title. */ +"Rendering" = "Compilation"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "Restaurer l’éditeur"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "Restaurer la prévisualisation"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "Utilitaire Terminal installé"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "Utilitaire Terminal non installé"; + +/* Preference pane title. */ +"Terminal" = "Terminal"; + +/* Uninstall shell utility button */ +"Uninstall" = "Désinstaller"; + +/* default filename if no title can be determined */ +"Untitled" = "Sans titre"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ mot;%@ mots"; + diff --git a/MacDown/Localization/fr.lproj/MPDocument.strings b/MacDown/Localization/fr.lproj/MPDocument.strings new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPDocument.strings @@ -0,0 +1 @@ + diff --git a/MacDown/Localization/fr.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..f6c868e5 --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ + +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "List marker:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus sign)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Change…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Text insets:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Line spacing:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limit editor width to"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisk)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Base font:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scroll past end"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-complete matching characters"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/fr.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/fr.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..6b790377 --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ + +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Include syntax highlighting"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/fr.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..46298ad4 --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ + +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Put editor on the right"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Update"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatically create files for link targets"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Ensure open document on launch"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Update preview automatically as you type"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Show word count"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/fr.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..adb2c73b --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Math support requires Internet connection."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-like math syntax"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax highlighted code block"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Custom"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Render newline literally"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Show line numbers"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Default path:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Task list syntax"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detect table of contents token"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "None"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Language name"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/fr.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..0236c34b --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ + +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Footnote"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Quote"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Highlight"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Intra-word emphasis"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Fenced code block"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Underline"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Strikethrough"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autolink"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Block formatting"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline formatting"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superscript"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Document formatting"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/fr.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Localization/fr.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Localization/fr.lproj/MainMenu.strings b/MacDown/Localization/fr.lproj/MainMenu.strings new file mode 100644 index 00000000..2dcaf262 --- /dev/null +++ b/MacDown/Localization/fr.lproj/MainMenu.strings @@ -0,0 +1,348 @@ + +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Header 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Enter Full Screen"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Highlight"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Emphasize"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Strikethrough"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Header 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Header 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "View"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Shift Left"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Header 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Left 3:1 Right"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Strong"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Hide Preview Pane"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Left 1:3 Right"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Render Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Image"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "New"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Shift Right"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Left 1:1 Right"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comment"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Unordered List"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Ordered List"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Header 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copy HTML"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Blockquote"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Help"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Hide Editor Pane"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Header 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragraph"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "View"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDown/Localization/is.lproj/Credits.rtf b/MacDown/Localization/is.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/is.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/is.lproj/InfoPlist.strings b/MacDown/Localization/is.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/is.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/is.lproj/Localizable.strings b/MacDown/Localization/is.lproj/Localizable.strings new file mode 100644 index 00000000..8a14c3ac --- /dev/null +++ b/MacDown/Localization/is.lproj/Localizable.strings @@ -0,0 +1,48 @@ +/* Prism theme title */ +"(Default)" = "(Sjálfgefið)"; + +/* Displayed when shell utility is not installed */ +"" = ""; + +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "Villa kom upp við að búa til skrána: +%@"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "Gat ekki búið til skrá: +%@"; + +/* Preference pane title. */ +"Editor" = "Ritill"; + +/* preview navigation error message */ +"File not found at path: +%@" = "Skráin fannst ekki: +%@"; + +/* Preference pane title. */ +"General" = "Almennt"; + +/* Install shell utility button */ +"Install" = "Setja upp"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* Preferences window title. */ +"Preferences" = "Stillingar"; + +/* Uninstall shell utility button */ +"Uninstall" = "Fjarlægja"; + +/* default filename if no title can be determined */ +"Untitled" = "Ónefnt"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ orð;%@ orð"; + diff --git a/MacDown/Localization/is.lproj/MPDocument.strings b/MacDown/Localization/is.lproj/MPDocument.strings new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/MacDown/Localization/is.lproj/MPDocument.strings @@ -0,0 +1 @@ + diff --git a/MacDown/Localization/is.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..f6c868e5 --- /dev/null +++ b/MacDown/Localization/is.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ + +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "List marker:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus sign)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Change…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Text insets:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Line spacing:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limit editor width to"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisk)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Base font:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scroll past end"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-complete matching characters"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..6b790377 --- /dev/null +++ b/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ + +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Include syntax highlighting"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/is.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..46298ad4 --- /dev/null +++ b/MacDown/Localization/is.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ + +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Put editor on the right"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Update"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatically create files for link targets"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Ensure open document on launch"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Update preview automatically as you type"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Show word count"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/is.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..adb2c73b --- /dev/null +++ b/MacDown/Localization/is.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Math support requires Internet connection."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-like math syntax"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax highlighted code block"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Custom"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Render newline literally"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Show line numbers"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Default path:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Task list syntax"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detect table of contents token"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "None"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Language name"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/is.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..0236c34b --- /dev/null +++ b/MacDown/Localization/is.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ + +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Footnote"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Quote"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Highlight"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Intra-word emphasis"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Fenced code block"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Underline"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Strikethrough"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autolink"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Block formatting"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline formatting"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superscript"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Document formatting"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/is.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Localization/is.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Localization/is.lproj/MainMenu.strings b/MacDown/Localization/is.lproj/MainMenu.strings new file mode 100644 index 00000000..2dcaf262 --- /dev/null +++ b/MacDown/Localization/is.lproj/MainMenu.strings @@ -0,0 +1,348 @@ + +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Header 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Enter Full Screen"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Highlight"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Emphasize"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Strikethrough"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Header 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Header 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "View"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Shift Left"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Header 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Left 3:1 Right"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Strong"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Hide Preview Pane"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Left 1:3 Right"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Render Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Image"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "New"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Shift Right"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Left 1:1 Right"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comment"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Unordered List"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Ordered List"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Header 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copy HTML"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Blockquote"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Help"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Hide Editor Pane"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Header 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragraph"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "View"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ja.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/ja.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/ja.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ko-KR.lproj/Credits.rtf b/MacDown/Localization/ko-KR.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/ko-KR.lproj/InfoPlist.strings b/MacDown/Localization/ko-KR.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ko-KR.lproj/Localizable.strings b/MacDown/Localization/ko-KR.lproj/Localizable.strings new file mode 100644 index 00000000..8a3e9874 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/Localizable.strings @@ -0,0 +1,21 @@ +/* Preference pane title. */ +"Editor" = "편집기"; + +/* Install shell utility button */ +"Install" = "설치"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* Preference pane title. */ +"Markdown" = "마크다운"; + +/* Preferences window title. */ +"Preferences" = "환경설정"; + +/* Preference pane title. */ +"Terminal" = "터미널"; + +/* default filename if no title can be determined */ +"Untitled" = "제목없음"; + diff --git a/MacDown/Localization/ko-KR.lproj/MPDocument.strings b/MacDown/Localization/ko-KR.lproj/MPDocument.strings new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPDocument.strings @@ -0,0 +1 @@ + diff --git a/MacDown/Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..f6c868e5 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ + +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "List marker:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus sign)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Change…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Text insets:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Line spacing:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limit editor width to"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisk)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Base font:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scroll past end"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-complete matching characters"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..6b790377 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ + +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Include syntax highlighting"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/ko-KR.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..46298ad4 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ + +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Put editor on the right"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Update"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatically create files for link targets"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Ensure open document on launch"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Update preview automatically as you type"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Show word count"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..adb2c73b --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Math support requires Internet connection."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-like math syntax"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax highlighted code block"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Custom"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Render newline literally"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Show line numbers"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Default path:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Task list syntax"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detect table of contents token"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "None"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Language name"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..0236c34b --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ + +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Footnote"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Quote"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Highlight"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Intra-word emphasis"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Fenced code block"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Underline"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Strikethrough"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autolink"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Block formatting"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline formatting"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superscript"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Document formatting"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/ko-KR.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Localization/ko-KR.lproj/MainMenu.strings b/MacDown/Localization/ko-KR.lproj/MainMenu.strings new file mode 100644 index 00000000..2dcaf262 --- /dev/null +++ b/MacDown/Localization/ko-KR.lproj/MainMenu.strings @@ -0,0 +1,348 @@ + +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Header 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Enter Full Screen"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Highlight"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Emphasize"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Strikethrough"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Header 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Header 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "View"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Shift Left"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Header 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Left 3:1 Right"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Strong"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Hide Preview Pane"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Left 1:3 Right"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Render Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Image"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "New"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Shift Right"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Left 1:1 Right"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comment"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Unordered List"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Ordered List"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Header 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copy HTML"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Blockquote"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Help"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Hide Editor Pane"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Header 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragraph"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "View"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDown/Localization/pt-BR.lproj/Credits.rtf b/MacDown/Localization/pt-BR.lproj/Credits.rtf new file mode 100644 index 00000000..1d245060 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/Credits.rtf @@ -0,0 +1,406 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf470 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} +\paperw11900\paperh16840\vieww15960\viewh12940\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\f0\fs24 \cf0 \ +Open source Markdown editor for OS X. +\fs28 \ +\ + +\b\fs32 Contributors +\fs28 \ +{\field{\*\fldinst{HYPERLINK "https://uranusjr.com/"}}{\fldrslt +\b0\fs24 Tzu-ping Chung}} +\b0\fs24 \ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/garrow"}}{\fldrslt \cf0 Garrow Bedrossian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://james-brooks.co.uk/"}}{\fldrslt \cf0 James Brooks}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jcomo"}}{\fldrslt \cf0 Jonathan Como}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hszcg"}}{\fldrslt \cf0 Chenguang Zhang}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mdznr.com/"}}{\fldrslt \cf0 Matt Zanchelli}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://henrian.com/"}}{\fldrslt \cf0 Christopher Brown}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://dlackty.org/"}}{\fldrslt \cf0 Richard Lee}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://aaronraimist.com/"}}{\fldrslt \cf0 Aaron Raimist}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.zoonref.com/"}}{\fldrslt \cf0 Amornchai Kanokpullwad}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.alexkaessner.de/"}}{\fldrslt \cf0 Alexander K\'e4\'dfner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Mowsh"}}{\fldrslt \cf0 Joseph Stevens}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/xcodejam"}}{\fldrslt \cf0 wenbi}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/yangjian"}}{\fldrslt \cf0 Yang Jian}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://kevinsalter.me/"}}{\fldrslt \cf0 Kevin Salter}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/JanX2"}}{\fldrslt \cf0 Jan}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/brovador"}}{\fldrslt \cf0 Jes\'fas Bart\'fas}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/airdrummingfool"}}{\fldrslt \cf0 Tommy Goode}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/sorig"}}{\fldrslt \cf0 Esben S\'f8rig}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/bostaunieux"}}{\fldrslt \cf0 Damien Angelos}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.saurabhg.com/"}}{\fldrslt \cf0 Saurabh Garg}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://type.so/"}}{\fldrslt +\f1 \cf0 \'8f\'ac\'8e\'71\'8c\'87\'9d\'47}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 Cedar McKay}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Jmuccigr"}}{\fldrslt \cf0 John Muccigrosso}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://twitter.com/getaaron"}}{\fldrslt \cf0 Aaron Brager}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tbrannam"}}{\fldrslt \cf0 Todd Brannam}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ohthetrees"}}{\fldrslt \cf0 ohthetrees}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.raizlabs.com/"}}{\fldrslt \cf0 Blake Skinner}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://waldo.jaquith.org/"}}{\fldrslt \cf0 Waldo Jaquith}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://www.fabiancanas.com/"}}{\fldrslt \cf0 Fabian Ca\'f1as}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://yulli.org/"}}{\fldrslt \cf0 Justin Kim}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/ronhippler"}}{\fldrslt \cf0 Andreas Hippler}}\ +{\field{\*\fldinst{HYPERLINK "http://orta.io/"}}{\fldrslt Orta}}\ +{\field{\*\fldinst{HYPERLINK "https://cattail.me/"}}{\fldrslt Chiyu Zhong}}\ +{\field{\*\fldinst{HYPERLINK "https://github.com/timtylin"}}{\fldrslt Tim T.Y. Lin}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/franklinyu"}}{\fldrslt \cf0 Franklin Yu}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mcw0933"}}{\fldrslt \cf0 Matt C. Wilson}}\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://klurig.hk/"}}{\fldrslt \cf0 Niklas Berglund}}\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\fs28 \cf0 \ + +\b\fs32 License +\b0\fs28 \ + +\fs24 The MIT License (MIT)\ +\ +Copyright \'a9 2014 Tzu-ping Chung\ +\ +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.\ +\ + +\b\fs32 Acknowledgement +\b0\fs24 \ +Portions of this software may utilise the following materials, the use of which is hereby acknowledged:\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mierau/DMTemplates"}}{\fldrslt +\b\fs28 \cf0 DMTemplates}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 Dustin Mierau\ +\ +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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Cocoanetics/DTCoreText"}}{\fldrslt +\b\fs28 \cf0 DTCoreText}}\ +Copyright \'a9 2011, Oliver Drobnik All rights reserved.\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\ +\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls1\ilvl0\cf0 - 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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +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 HOLDER 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.\ +\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/tomaz/GBCli"}}{\fldrslt +\b\fs28 \cf0 GBCli}}\ +Copyright \'a9 2012 by Tomaz Kragelj\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 \cf0 Hoedown}}\ +Copyright \'a9 2008, Natacha Port\'e9\ +Copyright \'a9 2011, Vicent Mart\'ed\ +Copyright \'a9 2013, Devin Torres and the Hoedown authors\ +\ +Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.\ +\ +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/hoedown/hoedown"}}{\fldrslt +\b\fs28 Hoextdown}} +\b\fs28 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b0\fs24 \cf0 Copyright \'a9 2014 kjdev\ +\ +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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://pyyaml.org/wiki/LibYAML"}}{\fldrslt +\b\fs28 \cf0 LibYAML}}\ +Copyright \'a9 2006 Kirill Simonov\ +\ +\pard\pardeftab720\partightenfactor0 +\cf0 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/Marxon13/M13OrderedDictionary"}}{\fldrslt +\b\fs28 \cf0 M13OrderedDictionary}}\ +Copyright \'a9 2013 Brandon McQuilkin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/junjie/JJPluralForm"}}{\fldrslt +\b\fs28 \cf0 JJPluralForm}} +\fs28 +\fs24 by Lin Junjie\ +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at {\field{\*\fldinst{HYPERLINK "http://mozilla.org/MPL/2.0/"}}{\fldrslt http://mozilla.org/MPL/2.0/}}.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/shpakovski/MASPreferences"}}{\fldrslt +\b\fs28 \cf0 MASPreferences}} by Vadim Shpakovski\ +MASPreferences is licensed under the 2-clause BSD license.\ +\ +Copyright \'a9 2011-2014, Vadim Shpakovski 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.\ +\ +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 HOLDER 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/dhennessy/PAPreferences"}}{\fldrslt +\b\fs28 \cf0 PAPreferences}}\ +Copyright \'a9 2014, Denis Hennessy (Peer Assembly - {\field{\*\fldinst{HYPERLINK "http://peerassembly.com/"}}{\fldrslt http://peerassembly.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 Peer Assembly, Denis Hennessy 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 PEER ASSEMBLY OR DENIS HENNESSY 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.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://hasseg.org/peg-markdown-highlight/"}}{\fldrslt +\b\fs28 \cf0 PEG Markdown Highlight}}\ +Copyright 2011 Ali Rantakari -- <{\field{\*\fldinst{HYPERLINK "http://hasseg.org/"}}{\fldrslt http://hasseg.org}}>\ +\ +PEG-Markdown-Highlight is licensed under the same terms as peg-markdown (see below for more information).\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/jgm/peg-markdown"}}{\fldrslt +\b\fs28 \cf0 peg-markdown}}\ +markdown in c, implemented using PEG grammar\ +Copyright \'a9 2008-2011 John MacFarlane\ +ODF output code \'a9 2011 Fletcher T. Penney\ +\ +peg-markdown is released under both the GPL and MIT licenses. You may pick the license that best fits your needs.\ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 + +\b \cf0 The GPL +\b0 \ +\ +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 St, Fifth Floor, Boston, MA 02110-1301 USA\ +\ + +\b The MIT License +\b0 \ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://prismjs.com/"}}{\fldrslt +\b\fs28 Prism}}\ +Copyright \'a9 2012-2013 Lea Verou\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org/"}}{\fldrslt +\b\fs28 Sparkle}}\ +\pard\pardeftab720\partightenfactor0 +\cf0 Copyright \'a9 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.\ +\ +\pard\pardeftab720\partightenfactor0 + +\b \cf0 EXTERNAL LICENSES +\b0 \ +\ +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (:\ +\ +Copyright 2003-2005 Colin Percival\ +All rights reserved\ +\ +Redistribution and use in source and binary forms, with or without modification, are permitted providing 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.\ +\ +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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.\ +\ +\pard\pardeftab720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "https://github.com/mirek/YAML.framework"}}{\fldrslt +\b\fs28 \cf0 YAML.framework}}\ +Copyright \'a9 2010 Mirek Rusin\ +\ +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.\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +{\field{\*\fldinst{HYPERLINK "http://mouapp.com/"}}{\fldrslt +\b\fs28 \cf0 Mou}} by Chen Luo\ +The following editor theme and CSS files are extracted from Mou.app:\ +\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\partightenfactor0 +\ls2\ilvl0\cf0 {\listtext \'95 }Mou Fresh Air\ +{\listtext \'95 }Mou Fresh Air+\ +{\listtext \'95 }Mou Night\ +{\listtext \'95 }Mou Night+\ +{\listtext \'95 }Mou Paper\ +{\listtext \'95 }Mou Paper+\ +{\listtext \'95 }Tomorrow\ +{\listtext \'95 }Tomorrow Blue\ +{\listtext \'95 }Tomorrow+\ +{\listtext \'95 }Writer\ +{\listtext \'95 }Writer+\ +{\listtext \'95 }Clearness\ +{\listtext \'95 }Clearness Dark\ +{\listtext \'95 }GitHub\ +{\listtext \'95 }GirHub2\ +\pard\tx566\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 +\cf0 Used under permission.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/CodeCatalyst/mou-theme-solarized"}}{\fldrslt +\b\fs28 Solarized Theme for Mou}} by John Yanarella\ +Copyright \'a9 2012 CodeCatalyst, LLC\ +\ +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.\ +\ + +\b Solarized +\b0 \ +\ +Copyright \'a9 2011 Ethan Schoonover\ +\ +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.\ +\ +{\field{\*\fldinst{HYPERLINK "https://github.com/dcurtis/markdown-mark"}}{\fldrslt +\b\fs28 Markdown Mark}}\ +DEDICATED TO THE PUBLIC DOMAIN\ +\ +The Markdown Mark has been dedicated to the public domain. It is protected by the Creative Commons CC0 Universal Public Domain Dedication license. You can read the entire license below or at http://creativecommons.org/publicdomain/zero/1.0/deed.en.\ +\ +CC0 UNIVERSAL PUBLIC DOMAIN DEDICATION LICENSE\ +\ +Statement of Purpose\ +\ +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").\ +\ +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.\ +\ +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.\ +\ +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:\ +a. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;\ +b. moral rights retained by the original author(s) and/or performer(s);\ +c. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;\ +rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;\ +d. rights protecting the extraction, dissemination, use and reuse of data in a Work;\ +e. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and\ +f. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.\ +\ +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.\ +\ +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.\ +\ +4. Limitations and Disclaimers.\ +\ +a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.\ +b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.\ +c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.\ +d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.} \ No newline at end of file diff --git a/MacDown/Localization/pt-BR.lproj/InfoPlist.strings b/MacDown/Localization/pt-BR.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/pt-BR.lproj/Localizable.strings b/MacDown/Localization/pt-BR.lproj/Localizable.strings new file mode 100644 index 00000000..9eb5b4c9 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/Localizable.strings @@ -0,0 +1,92 @@ +/* Prism theme title */ +"(Default)" = "(Padrão)"; + +/* Displayed when shell utility is not installed */ +"" = ""; + +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "Um erro ocorreu ao criar o arquivo : +%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ caractere (sem espaços);%@ caracteres (sem espaços)"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ caractere;%@ caracteres"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "Não é possível criar o arquivo: +%@"; + +/* Preference pane title. */ +"Editor" = "Editor"; + +/* preview navigation error message */ +"File not found at path: +%@" = "Arquivo não encontrado no caminho: +%@"; + +/* Preference pane title. */ +"General" = "Geral"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "Esconder o Painel de Edição"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "Esconder o Painel de Visualização"; + +/* Install shell utility button */ +"Install" = "Instalar"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* preview navigation error information */ +"MacDown can’t create a file for the clicked link because +the current file is not saved anywhere yet. Save the +current file somewhere to enable this feature." = "MacDown não pode criar um arquivo para o link acionado porque +o arquivo atual não está salvo em nenhum lugar. Salve o arquivo +atual em algum lugar para habilitar esse recurso."; + +/* Preference pane title. */ +"Markdown" = "Markdown"; + +/* preview navigation error information */ +"Please check the path of your link is correct. Turn on +“Automatically create link targets” If you want MacDown to +create nonexistent link targets for you." = "Por favor, verifique se o caminho do link está correto. Habilite +“Criar automaticamente arquivos para os links de destino” se quiser que +o MacDown crie arquivos para os links que não existem. "; + +/* Preferences window title. */ +"Preferences" = "Preferências"; + +/* Preference pane title. */ +"Rendering" = "Renderização"; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "Mostrar o Painel de Edição"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "Mostrar o Painel de Visualização"; + +/* Label stating that shell utility has been installed */ +"Shell utility installed" = "Utilitário do Shell instalado"; + +/* Label stating that shell utility has not been installed */ +"Shell utility not installed" = "Utilitário do Shell não instalado"; + +/* Preference pane title. */ +"Terminal" = "Terminal"; + +/* Uninstall shell utility button */ +"Uninstall" = "Desinstalar"; + +/* default filename if no title can be determined */ +"Untitled" = "Sem Título"; + +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ palavra;%@ palavras"; + diff --git a/MacDown/Localization/pt-BR.lproj/MPDocument.strings b/MacDown/Localization/pt-BR.lproj/MPDocument.strings new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPDocument.strings @@ -0,0 +1 @@ + diff --git a/MacDown/Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..f6c868e5 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings @@ -0,0 +1,63 @@ + +/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ +"0Bc-iD-VCh.title" = "List marker:"; + +/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ +"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; + +/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ +"2yJ-j5-PLm.title" = "- (Minus sign)"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ +"6JP-Pc-JFd.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ +"8bz-cc-gLF.title" = "Change…"; + +/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ +"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; + +/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ +"Ee6-Cj-SWW.title" = "Text insets:"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ +"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ +"InD-Fc-CTS.title" = "Line spacing:"; + +/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ +"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; + +/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ +"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; + +/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ +"bhL-NA-9No.title" = "Limit editor width to"; + +/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ +"bnJ-BQ-mHV.title" = "* (Asterisk)"; + +/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ +"eXF-SL-hBq.title" = "Base font:"; + +/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ +"g5w-Qw-Khw.title" = "×"; + +/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ +"nBR-LK-G9a.title" = "Scroll past end"; + +/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ +"o4K-iG-sGA.title" = "Auto-complete matching characters"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ +"vA9-IT-8Z7.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ +"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; + +/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ +"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/pt-BR.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/pt-BR.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..6b790377 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPExportPanelAccessoryViewController.strings @@ -0,0 +1,6 @@ + +/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ +"1f7-JB-VR1.title" = "Include syntax highlighting"; + +/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ +"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..46298ad4 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings @@ -0,0 +1,27 @@ + +/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ +"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; + +/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ +"Nma-PL-ZvX.title" = "Behavior"; + +/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ +"bUn-PQ-5Ez.title" = "Put editor on the right"; + +/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ +"eLn-fW-Agu.title" = "Update"; + +/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ +"hpF-zP-3cM.title" = "Automatically create files for link targets"; + +/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ +"l9N-wk-WRY.title" = "Ensure open document on launch"; + +/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ +"npz-xj-plX.title" = "Update preview automatically as you type"; + +/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ +"oeW-bF-ybW.title" = "Show word count"; + +/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ +"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/pt-BR.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..adb2c73b --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPHtmlPreferencesViewController.strings @@ -0,0 +1,57 @@ + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; + +/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ +"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; + +/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ +"5Ch-dG-juL.title" = "Math support requires Internet connection."; + +/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ +"6vg-3f-KWk.title" = "TeX-like math syntax"; + +/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ +"9I3-I7-HLu.title" = "CSS:"; + +/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ +"BuQ-02-oQB.title" = "Syntax highlighted code block"; + +/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ +"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; + +/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ +"Jmq-wq-Dux.title" = "Custom"; + +/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ +"Sty-qG-J6K.title" = "Render newline literally"; + +/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ +"WZa-V6-vvf.title" = "Show line numbers"; + +/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ +"a6o-qD-AIp.title" = "Theme:"; + +/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ +"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; + +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "Default path:"; + +/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ +"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; + +/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ +"kBf-iW-HlH.title" = "Task list syntax"; + +/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ +"nvS-dZ-eHT.title" = "Detect table of contents token"; + +/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ +"pWW-vM-8JK.title" = "None"; + +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "Language name"; + +/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ +"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/pt-BR.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..0236c34b --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPMarkdownPreferencesViewController.strings @@ -0,0 +1,42 @@ + +/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ +"0yU-vT-72e.title" = "Footnote"; + +/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ +"2lB-hq-5eX.title" = "Quote"; + +/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ +"8kI-gm-5Lo.title" = "Highlight"; + +/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ +"D7l-nP-P0y.title" = "Intra-word emphasis"; + +/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ +"ELg-sx-vIf.title" = "Fenced code block"; + +/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ +"Gdr-Ro-ZnW.title" = "Underline"; + +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "Strikethrough"; + +/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ +"Roe-rh-8f9.title" = "Autolink"; + +/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ +"TXy-fD-S4Y.title" = "Block formatting"; + +/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ +"Ycc-Px-jbu.title" = "Inline formatting"; + +/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ +"aSK-nR-xMr.title" = "Smartypants"; + +/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ +"k2n-VN-cKT.title" = "Superscript"; + +/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ +"x36-52-U0p.title" = "Document formatting"; + +/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ +"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/pt-BR.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..ec03cf8c --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MPTerminalPreferencesViewController.strings @@ -0,0 +1,18 @@ + +/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ +"0H2-qZ-OjP.title" = ""; + +/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ +"EJe-0p-X4m.title" = "Location:"; + +/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ +"Me9-q2-eWj.title" = "●"; + +/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ +"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; + +/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ +"XiC-FP-TWZ.title" = "Install"; + +/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ +"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Localization/pt-BR.lproj/MainMenu.strings b/MacDown/Localization/pt-BR.lproj/MainMenu.strings new file mode 100644 index 00000000..2dcaf262 --- /dev/null +++ b/MacDown/Localization/pt-BR.lproj/MainMenu.strings @@ -0,0 +1,348 @@ + +/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ +"0WP-T5-QxP.title" = "Header 2"; + +/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "MacDown"; + +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ +"1gz-YB-DZE.title" = "Enter Full Screen"; + +/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ +"2Os-ij-Aup.title" = "Highlight"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "Transformations"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "Spelling"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "Find"; + +/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ +"4UH-k2-fgy.title" = "Emphasize"; + +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "Quit MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "About MacDown"; + +/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ +"5mp-ev-1el.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "Redo"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "Correct Spelling Automatically"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ +"8xL-1V-VPX.title" = "Check for Updates…"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "Underline"; + +/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ +"9CN-Qi-Fln.title" = "Strikethrough"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "Smart Copy/Paste"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "Main Menu"; + +/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ +"B98-b8-che.title" = "Header 4"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "Preferences…"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "Save As…"; + +/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ +"D4C-PE-qJi.title" = "Header 6"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "Close"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "Spelling and Grammar"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "View"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "Help"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "Substitutions"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "Link"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "Text Replacement"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "Show Spelling and Grammar"; + +/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ +"I8Y-e8-XDx.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "Open…"; + +/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ +"Jzs-tR-jkL.title" = "Shift Left"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "Revert to Saved"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "Show All"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "Bring All to Front"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ +"N43-55-MPb.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "Header 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ +"NZX-Ev-sWt.title" = "Left 3:1 Right"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "Minimize"; + +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "Hide MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "Find Previous"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "Stop Speaking"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "Plug-ins"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "Zoom"; + +/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ +"Rb9-MG-IjX.title" = "Strong"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "Select All"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "Jump to Selection"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "Export"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "Hide Preview Pane"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "Capitalize"; + +/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ +"VW7-VH-9yl.title" = "Left 1:3 Right"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "Hide Others"; + +/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ +"Vh1-jg-bbV.title" = "Render Markdown"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "Image"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "Edit"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "New"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF…"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "Find…"; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "Find and Replace…"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "Start Speaking"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "Print…"; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "Window"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "Plug-ins"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "File"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "Use Selection for Find"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "Transformations"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "Make Lower Case"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML…"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "File"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "Undo"; + +/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ +"e8h-vX-NQb.title" = "Convert To"; + +/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ +"g9Y-GM-gdh.title" = "Shift Right"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "Paste"; + +/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ +"hOV-YQ-vzy.title" = "Left 1:1 Right"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "Smart Quotes"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "Check Document Now"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "Services"; + +/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ +"i8c-gf-w29.title" = "Comment"; + +/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ +"iRQ-Q6-N4K.title" = "Inline Code"; + +/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ +"jn0-Kb-yH6.title" = "Unordered List"; + +/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ +"jn0-Kb-yH7.title" = "Ordered List"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "Format"; + +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "Header 3"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "Check Grammar With Spelling"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "Delete"; + +/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "Save…"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "Find Next"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "Page Setup…"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "Check Spelling While Typing"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "Smart Dashes"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "Data Detectors"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "Open Recent"; + +/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ +"ts7-v5-Htm.title" = "Copy HTML"; + +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "Blockquote"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "Cut"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown Help"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "Clear Menu"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "Make Upper Case"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "Hide Editor Pane"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "Header 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "Help"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "Copy"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ +"xN5-GU-ASF.title" = "Paragraph"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "View"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "Speech"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "Show Substitutions"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDown/Localization/sk.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/sk.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/sk.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/sv.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/sv.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/Localizable.strings b/MacDown/Localization/zh-Hant.lproj/Localizable.strings index 1d4d494e..96e0a3d5 100644 --- a/MacDown/Localization/zh-Hant.lproj/Localizable.strings +++ b/MacDown/Localization/zh-Hant.lproj/Localizable.strings @@ -1,6 +1,45 @@ +/* preview navigation error information */ +"An error occurred while creating the file: +%@" = "建立檔案時發生錯誤: +%@"; + +/* No comment provided by engineer. */ +"CHARACTERS_PLURAL_STRING" = "%@ 個字元;%@ 個字元"; + +/* preview navigation error message */ +"Can’t create file: +%@" = "無法建立檔案: +%@"; + +/* preview navigation error message */ +"File not found at path: +%@" = "該路徑找不到檔案: +%@"; + +/* Toggle editor pane menu item */ +"Hide Editor Pane" = "隱藏編輯區"; + +/* Toggle preview pane menu item */ +"Hide Preview Pane" = "隱藏預覽區"; + +/* (No Commment) */ +"JJ_PLURAL_FORM_RULE" = "1"; + +/* Preferences window title. */ +"Preferences" = "偏好設定..."; + +/* Toggle editor pane menu item */ +"Restore Editor Pane" = "顯示編輯區"; + +/* Toggle preview pane menu item */ +"Restore Preview Pane" = "顯示預覽區"; + /* Uninstall shell utility button */ "Uninstall" = "解除安裝"; /* default filename if no title can be determined */ "Untitled" = "未命名"; +/* No comment provided by engineer. */ +"WORDS_PLURAL_STRING" = "%@ 個字;%@ 個字"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings index a0d3c3da..bd565707 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings @@ -25,6 +25,12 @@ /* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ "a6o-qD-AIp.title" = "主題:"; +/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ +"e1A-Mm-svq.title" = "預設路徑:"; + /* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ "pWW-vM-8JK.title" = "無"; +/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ +"qFd-cs-OtZ.title" = "語言名稱"; + diff --git a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings index 05d129f2..bd79fad6 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings @@ -1,6 +1,9 @@ /* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ "Gdr-Ro-ZnW.title" = "底線"; +/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ +"RjP-zE-c6b.title" = "刪除線"; + /* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ "k2n-VN-cKT.title" = "上標"; diff --git a/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..dc62739d 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +1 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings index 97a73ae0..db50374c 100644 --- a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings +++ b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings @@ -10,9 +10,18 @@ /* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ "2oI-Rn-ZJC.title" = "大小寫轉換"; +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "語音"; + /* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ "4EN-yA-p0u.title" = "搜尋"; +/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "離開 MacDown"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "編輯"; + /* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ "5kV-Vb-QxS.title" = "關於 MacDown"; @@ -28,6 +37,9 @@ /* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ "9CN-Qi-Fln.title" = "刪除線"; +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ +"98U-cK-P7J.title" = "底線"; + /* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ "B98-b8-che.title" = "標題 4"; @@ -46,30 +58,141 @@ /* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ "Dv1-io-Yv7.title" = "拼字及文法檢查"; +/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ +"EQZ-Zp-VNE.title" = "檢視"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "說明"; + +/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ +"GIg-Wo-P8m.title" = "超連結"; + /* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ "IAo-SY-fd9.title" = "開啟..."; +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "還原至上次儲存項目"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "顯示全部"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "全部移至最上層"; + /* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ "N43-55-MPb.title" = "格式"; +/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ +"NLm-rz-EyT.title" = "標題 1"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "服務"; + /* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ "OY7-WF-poV.title" = "最小化"; +/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "隱藏 MacDown"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "尋找上一個"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "停止語音"; + +/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ +"Ppl-BS-KtG.title" = "外掛"; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "放大"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "選取全部"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "跳至所選範圍"; + +/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ +"SJM-Pp-ywb.title" = "輸出"; + +/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ +"T74-vt-YUA.title" = "隱藏預覽區"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "視窗"; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "大寫"; + +/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ +"VkR-aw-5AU.title" = "圖片"; + /* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ "W48-6f-4Dl.title" = "編輯"; +/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ +"Was-JA-tGl.title" = "新增文件"; + +/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ +"XFN-MJ-RrW.title" = "PDF..."; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "搜尋..."; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "搜尋並取代..."; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "啟動語音"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "列印..."; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "視窗"; + +/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ +"bMu-UN-Yfx.title" = "外掛"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "檔案"; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "搜尋選取範圍"; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "大小寫轉換"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "小寫"; + +/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ +"dGm-Yl-i3Z.title" = "HTML..."; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "檔案"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "還原"; + /* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ "gVA-U4-sdL.title" = "貼上"; +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "服務"; + /* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ -"jn0-Kb-yH6.title" = "項目符號"; +"jn0-Kb-yH6.title" = "無序清單"; /* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ -"jn0-Kb-yH7.title" = "編號方式"; +"jn0-Kb-yH7.title" = "有序清單"; /* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ "jxT-CU-nIS.title" = "格式"; +/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ +"kSO-QG-dHa.title" = "標題 3"; + /* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ "oas-Oc-fiZ.title" = "開啟最近的檔案"; @@ -79,6 +202,9 @@ /* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ "pxx-59-PXV.title" = "另存新檔..."; +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "尋找下一個"; + /* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ "qIS-W8-SiK.title" = "頁面設定..."; @@ -88,3 +214,42 @@ /* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ "ts7-v5-Htm.title" = "複製 HTML"; +/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ +"twd-Mb-qNx.title" = "引用"; + +/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "MacDown"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "剪下"; + +/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ +"ugx-EN-xKu.title" = "MacDown 說明"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "大寫"; + +/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ +"wHk-AQ-iOQ.title" = "隱藏編輯區"; + +/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ +"wlq-BA-PKH.title" = "標題 5"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "說明"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "複製"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ +"xSb-2f-W1r.title" = "檢視"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "語音"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "顯示同義字"; + +/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ +"zHE-JL-8eu.title" = "新增段落"; + diff --git a/MacDownTests/fr.lproj/InfoPlist.strings b/MacDownTests/fr.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/fr.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/is.lproj/InfoPlist.strings b/MacDownTests/is.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/is.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/ko-KR.lproj/InfoPlist.strings b/MacDownTests/ko-KR.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/ko-KR.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file diff --git a/MacDownTests/pt-BR.lproj/InfoPlist.strings b/MacDownTests/pt-BR.lproj/InfoPlist.strings new file mode 100644 index 00000000..dc62739d --- /dev/null +++ b/MacDownTests/pt-BR.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* No Localized Strings */ \ No newline at end of file From ea1688e38f951a762a9017ee5524300f48204fd4 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Aug 2017 13:59:04 +0800 Subject: [PATCH 307/439] Align sublist item to parent's leading Fix #837. --- .../MPHtmlPreferencesViewController.xib | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index d0516eaa..cb814bf8 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -1,8 +1,8 @@ - - + + - + @@ -20,7 +20,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -124,8 +124,8 @@ - - + + @@ -133,7 +133,7 @@ - + @@ -245,7 +245,7 @@ - + From be7e1119d966a81b62facb843ff8872a64b80645 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 6 Aug 2017 14:00:40 +0800 Subject: [PATCH 308/439] Better sublist alignment --- .../Base.lproj/MPHtmlPreferencesViewController.xib | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib index cb814bf8..398b188b 100644 --- a/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib +++ b/MacDown/Localization/Base.lproj/MPHtmlPreferencesViewController.xib @@ -104,7 +104,7 @@ + + diff --git a/MacDown/Resources/contribute.md b/MacDown/Resources/contribute.md new file mode 100644 index 00000000..18e959c0 --- /dev/null +++ b/MacDown/Resources/contribute.md @@ -0,0 +1,32 @@ +# Contributing to MacDown + +MacDown is open source and is a volunteer effort. This means that it depends on people to give some of their free time to improve it and make it even better. + +If you are reading this, then you are probably curious or want to contribute in some way. Read on to see how you can do so. + +## Getting the Source Code + +MacDown is hosted on GitHub: + +https://github.com/MacDownApp/macdown + +Here you can get the source code, read through the issues and start contributing. + +## But, I am not a Coder + +Contribution is not limited to software developers, since there are other ways you can help. For example, contributing towards documentation, translation and support. Join the room on Gitter to see how you can help (see below). + +If you want to help translate, then you can look at our project page on [Transifex](https://www.transifex.com/macdown/macdown/) and see whether to add a new languages or complete the work of an existing language. + +## Joining the Conversation + +If you are new the project, then a good place to start is Gitter: + +https://gitter.im/MacDownApp/macdown + +Join the room, introduce yourself and find out how you can help out. + +## License + +MacDown is released under the terms of MIT License. For more details take a look at the [README](https://github.com/MacDownApp/macdown/blob/master/README.md). + From 64b9ce710d9e297b865d04cde97df6730119795c Mon Sep 17 00:00:00 2001 From: Andre Mas Date: Wed, 6 Dec 2017 11:17:45 -0500 Subject: [PATCH 332/439] Added contribute.md to xcode project --- MacDown.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index b2b705d6..c1ef6422 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -82,6 +82,7 @@ 1FFEB3271972DAB400B2254F /* MPHTMLTabularizeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFEB3261972DAB400B2254F /* MPHTMLTabularizeTests.m */; }; 1FFEB32B19737D6E00B2254F /* YAMLSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -Wno-unused-variable"; }; }; 1FFF301D1948A5320009AF24 /* MPStringLookupTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */; }; + 3028039E1FD84EAC0055B0DA /* contribute.md in Resources */ = {isa = PBXBuildFile; fileRef = 3028039D1FD84EAB0055B0DA /* contribute.md */; }; 770BB49E962A302D0715A6A5 /* libPods-MacDown.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42F926DD38559C7CEDB6E42F /* libPods-MacDown.a */; }; 852D523C1E260A6400BA7162 /* MPTerminalPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 852D523A1E260A6400BA7162 /* MPTerminalPreferencesViewController.m */; }; 85E24E5C1E5019C00056E696 /* MPToolbarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 85E24E5B1E5019C00056E696 /* MPToolbarController.m */; }; @@ -437,6 +438,7 @@ 1FFEB32A19737D6E00B2254F /* YAMLSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YAMLSerialization.m; sourceTree = ""; }; 1FFF301C1948A5320009AF24 /* MPStringLookupTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPStringLookupTests.m; sourceTree = ""; }; 263367245B2D78A42C2F19D7 /* libPods-macdown-cmd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-macdown-cmd.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3028039D1FD84EAB0055B0DA /* contribute.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; name = contribute.md; path = Resources/contribute.md; sourceTree = ""; }; 39EFCAE04F60154F0C8C5469 /* Pods-MacDown.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MacDown.release.xcconfig"; path = "Pods/Target Support Files/Pods-MacDown/Pods-MacDown.release.xcconfig"; sourceTree = ""; }; 3C949FDE45493AE77DAD9BF4 /* libPods-MacDownTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MacDownTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 3D175F0F1974282400A5EFE8 /* WebView+WebViewPrivateHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WebView+WebViewPrivateHeaders.h"; sourceTree = ""; }; @@ -588,6 +590,7 @@ 1F4C8E9B194AE0C3004BF82E /* Resources */ = { isa = PBXGroup; children = ( + 3028039D1FD84EAB0055B0DA /* contribute.md */, 1FCE066319633D6B00DC83B4 /* Data */, 1F9A14EE194EEEDD00D1C6A9 /* Styles */, 1F9A14F3194EF6A600D1C6A9 /* Themes */, @@ -978,6 +981,7 @@ 1FCE066419633D6C00DC83B4 /* Data in Resources */, 1F3FC8AA1C85AE9F000965E1 /* MacDown.sdef in Resources */, 1FB3C0241E5061A2002AEB6A /* MPExportPanelAccessoryViewController.xib in Resources */, + 3028039E1FD84EAC0055B0DA /* contribute.md in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 2af108ee3e4950ab33bf52fcc6dbbe917ed42466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Tue, 12 Dec 2017 22:40:23 +0100 Subject: [PATCH 333/439] updated layout icons for toolbar --- .../Code/Application/MPToolbarController.m | 2 +- .../Contents.json | 21 ++++++++++++++++++ .../ToolbarIconEditorAndPreview.png | Bin 0 -> 214 bytes .../ToolbarIconEditorAndPreview@2x.png | Bin 0 -> 339 bytes .../ToolbarIconHideEditor.png | Bin 331 -> 333 bytes .../ToolbarIconHideEditor@2x.png | Bin 664 -> 692 bytes .../ToolbarIconHidePreview.png | Bin 317 -> 334 bytes .../ToolbarIconHidePreview@2x.png | Bin 601 -> 698 bytes 8 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/ToolbarIconEditorAndPreview.png create mode 100644 MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/ToolbarIconEditorAndPreview@2x.png diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 2ec62604..5211d2b6 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -83,7 +83,7 @@ - (void)setupToolbarItems [self toolbarItemWithIdentifier:@"comment" label:NSLocalizedString(@"Comment", @"Comment toolbar button") icon:@"ToolbarIconComment" action:@selector(toggleComment:)], [self toolbarItemWithIdentifier:@"highlight" label:NSLocalizedString(@"Highlight", @"Highlight toolbar button") icon:@"ToolbarIconHighlight" action:@selector(toggleHighlight:)], [self toolbarItemWithIdentifier:@"strikethrough" label:NSLocalizedString(@"Strikethrough", @"Strikethrough toolbar button") icon:@"ToolbarIconStrikethrough" action:@selector(toggleStrikethrough:)], - [self toolbarItemDropDownWithIdentifier:@"layout" label:NSLocalizedString(@"Layout", @"Layout toolbar button") icon:@"ToolbarIconHidePreview" menuItems: + [self toolbarItemDropDownWithIdentifier:@"layout" label:NSLocalizedString(@"Layout", @"Layout toolbar button") icon:@"ToolbarIconEditorAndPreview" menuItems: @[ toggleEditorMenuItem, togglePreviewMenuItem ] diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/Contents.json b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/Contents.json new file mode 100644 index 00000000..3cbd8bb2 --- /dev/null +++ b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "mac", + "filename" : "ToolbarIconEditorAndPreview.png", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "ToolbarIconEditorAndPreview@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/ToolbarIconEditorAndPreview.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/ToolbarIconEditorAndPreview.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1bb828eee457cd83d95f01e1ac3028f97b5a77 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S#=yYH8qO94_jhdwGiQKm48J#p$!=ZA+$OUg~8lF9$t_)9V=1 zL@v5au00u(XR}}Jzu+AAx{{ygjJJM{_bEPhZ0+`CdmRsz?>_2%l$AM2N$^)+rWw#- N44$rjF6*2UngGx;Q277= literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/ToolbarIconEditorAndPreview@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconEditorAndPreview.imageset/ToolbarIconEditorAndPreview@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8957bf291380133dc4fa5c3e98cb67cd11162a52 GIT binary patch literal 339 zcmV-Z0j&OsP)7Lk_urC$uEtbBHF((2MQtr$5MrL;*7hu%2mq@; zwG+Z!@ihpmVVO8&L~SI;soKgaTcaXJ;2D^|4NJXeg0?h)D90dUdR|Z;s>K*tlnKgVMHa-#25DW4 zE{kFwND^kIHo8g-J|k4*KZXpd08AYN$gXBoIqW=;!u!~zAfhlwf_Nc7{2n4q4{|He z5|EE^VURpn66A@=APyGrAK3#cSQNm8K-Lt)d6*24JlHxDAZ>>!4;Fzd0=a+b6)r`{ zZVCk|lEI;HFbc!c7|5rfkbnUmAY&sCgHrQTm>?b+q@NKvAYf`iS!^{BTLUpM2Ep{f zX^_dF;0L+xJ`m%IE1(os0MZZ7oG=ykK*k#&J_HjWg+}-00ifm`K)jt4Lttvr4Fid9 x0OC79j8W)-B#8lp@){^i@ZlRR#8^U-8UW?WItHSd!2$pP002ovPDHLkV1iAXah3o8 delta 297 zcmV+^0oMM_0?PuB90dS!P&UkwArpTBNkldO zVsHTBfD9`J;?rHZ7;Ko!DDo!E zCXivUbQS<*d!kv1F9JaNVP=8-3<@(4wgBQ+KnzN-!~$?oU<5LOQW8Cg=E!&^>X00000NkvXXu0mjf5o>P1 diff --git a/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor@2x.png b/MacDown/Images.xcassets/Toolbar Icons/ToolbarIconHideEditor.imageset/ToolbarIconHideEditor@2x.png index 1bf4749896855b863598159d467f076b9898ee23..fa579a83957f4bb654b4e979001053041f2ed017 100644 GIT binary patch delta 661 zcmV;G0&4x31+)c_90dX2I@vgpArpUVNklu#*6`sJ*p|UCUmI)&MZBSlVZ}jtv&;by9LYh%fVjF$ z2D23osP^mygG~ajKt;xPiK>6%prVQYa8cZzaes3jPF~q~K4a3jT?Ot&k_eymb=n(1 z-X^d@ryMgg`<0cWit`03TS9WL97TrPU>tFsf^QUyaJcL5**Hqh!^`Xpu9+KR4w$f0 z)hz2>GlLBw;z_s+yW`aOm-&gBcc9l^t7rX#k;P?R>U4Wl8|)q>yvu)W_R`XBM923`osv!uXc#7L_cgrl>fPO&BT1z!t!5;si*|!h})C z4zLf50;Yp-leH*sB^7J{t-v(Ef7UDjiCR=)6tN0W+&u6ItOJQzlv^n$pTmb6U=83` vz*LOC>v)LrZTt;zZs)fpt~L8V9ryvg70YShgrQXc0000 zMhn40Fr9^k5KuuI1)CK54+ODD5fniLi75I5G-53&qD5k15p2{(#1I=nMbPJL=H$-( z*xVh++_l&P=f3Z}A2a99%aMkp3Gr*1>P&IN>6zGLeq}Keun z(_7x(&$F9V-Oe*Y?v1TP8S>+teLYNuW5u}FS-VhH#X|f|-H5b)UDJPxY_n&@-Z5Dp z<(nIhj$9F}SK89Yf&*3gO z3E#o3pqJ<+cp8p{!jIUO@Bv&6u}QjbpE0Oxf=!z3vkn zeZbGbLk{M&RfT;)#4Bj15BW?^L7uy+FxAh8rpws9!Ovz=gndB8BHRtHW>XX=%5-5HLuB`AmQ4w@Fu@4caWwHgh)&(&J;?Nh)miYzCQrBnV=AQ%nHc9CpCrkhU N002ovPDHLkV1o9ih(`bb delta 298 zcmV+_0oDG_0=)u|9De|EP&Ui}000DMK}|sb0I`n?{9y$E008t!L_t(I5o2H&>|iU< zf&VGMApH!CAOZ+L2AP0a_z6*<^a>zW0OAio3?d3T_5r$O;cy7TF5pM9!k8G- z4{U`oF=&@X9Seh9!e7t6Fs5Nca;3QChMOinNT>TWDV@yEgiVAJ>uK_CGudZ0WF!eB zv?U|q67a-^SlB}$F+p_~oGX7oi`r>J)(V0{KyIGO=d^PuIjKqDBmL)&kA(B(toL$9 zIPpR2m_CQ2a0~%lkyK;8yZpx`BSA^u%>xkbkyW>1FH`b$b-nT>j1$w@TL;6Z9{){guK9SoMOou zK-2`>0!HJlO#&{iRjbZG^bC|@8&2}1GS_`tWo4vncF^K%QTfQ|lJDLzz~yBSI0sB7 z<2#y)eaTIvCjS>Y#(+=Y4Cn!3S-FK##5*t!a4qH8vJ;53G=x#a3or?Aw|M}3I|qCo zOG_9BeFkQMX5bNM1dM-{rZ9@&rv%Rp?Z6#i9N*Z1q;lDGfp`tI=c_^;Fl}KQ7`z+c z0f}EJMoUxJDpU*r>p<41sL+v?utki=!^S?aP#8P3N<-KT6ifgo0RNVXW#tye)72bs z1vtmESgN!jCMG=_a=)_$H*jn5+O<@FR?ZCk0l7}Zf#8)Xx&R9R002ovPDHLkV1ggw BH_HG3 delta 569 zcmV-90>=Hi1=$3U90dTVJ?XBIArpTPNkl%Up zR=^$T3W=!s9Zpptga7M3Bfv9|FWXm4u&9ZBLFU*cv|LWagv$x|00W>66eQJ_QCs+W zEPm5N)fqf7twu)Ix?M5^YPhb+mq1D>K_G#EXO*60(Ddm6rn3=GJ&JlP6 zP2dHXqWNP#mD4VZJ#;=Plc3YK?XgWp^m=C44RYfz_zY>p)(_-CE^$M}w#Pyz7cpRh zu~GzC%7;Sc#j(fgA#x7tKs&exeiHj08-az8x&T3>JVc{j${I3`x>?sf*)4{si4Bok z-o0+YrG Date: Tue, 12 Dec 2017 23:20:20 +0100 Subject: [PATCH 334/439] improved labels for Toolbar now showing labels in customize mode; groups now have extra labels --- .../Code/Application/MPToolbarController.m | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 5211d2b6..3f2e7485 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -53,30 +53,30 @@ - (void)setupToolbarItems // Set up all available toolbar items self->toolbarItems = @[ - [self toolbarItemGroupWithIdentifier:@"indent-group" separated:YES items:@[ - [self toolbarItemWithIdentifier:@"shift-left" label:NSLocalizedString(@"Shift left", @"Shift text to the left toolbar button") icon:@"ToolbarIconShiftLeft" action:@selector(unindent:)], - [self toolbarItemWithIdentifier:@"shift-right" label:NSLocalizedString(@"Shift right", @"Shift text to the right toolbar button") icon:@"ToolbarIconShiftRight" action:@selector(indent:)] + [self toolbarItemGroupWithIdentifier:@"indent-group" separated:YES label:NSLocalizedString(@"Shift Left/Right", @"") items:@[ + [self toolbarItemWithIdentifier:@"shift-left" label:NSLocalizedString(@"Shift Left", @"Shift text to the left toolbar button") icon:@"ToolbarIconShiftLeft" action:@selector(unindent:)], + [self toolbarItemWithIdentifier:@"shift-right" label:NSLocalizedString(@"Shift Right", @"Shift text to the right toolbar button") icon:@"ToolbarIconShiftRight" action:@selector(indent:)] ] ], - [self toolbarItemGroupWithIdentifier:@"text-formatting-group" separated:NO items:@[ + [self toolbarItemGroupWithIdentifier:@"text-formatting-group" separated:NO label:NSLocalizedString(@"Text Styles", @"") items:@[ [self toolbarItemWithIdentifier:@"bold" label:NSLocalizedString(@"Strong", @"Strong toolbar button") icon:@"ToolbarIconBold" action:@selector(toggleStrong:)], [self toolbarItemWithIdentifier:@"italic" label:NSLocalizedString(@"Emphasize", @"Emphasize toolbar button") icon:@"ToolbarIconItalic" action:@selector(toggleEmphasis:)], [self toolbarItemWithIdentifier:@"underline" label:NSLocalizedString(@"Underline", @"Underline toolbar button") icon:@"ToolbarIconUnderlined" action:@selector(toggleUnderline:)] ] ], - [self toolbarItemGroupWithIdentifier:@"heading-group" separated:NO items:@[ + [self toolbarItemGroupWithIdentifier:@"heading-group" separated:NO label:NSLocalizedString(@"Headings", @"") items:@[ [self toolbarItemWithIdentifier:@"heading1" label:NSLocalizedString(@"Heading 1", @"Heading 1 toolbar button") icon:@"ToolbarIconHeading1" action:@selector(convertToH1:)], [self toolbarItemWithIdentifier:@"heading2" label:NSLocalizedString(@"Heading 2", @"Heading 2 toolbar button") icon:@"ToolbarIconHeading2" action:@selector(convertToH2:)], [self toolbarItemWithIdentifier:@"heading3" label:NSLocalizedString(@"Heading 3", @"Heading 3 toolbar button") icon:@"ToolbarIconHeading3" action:@selector(convertToH3:)] ] ], - [self toolbarItemGroupWithIdentifier:@"list-group" separated:YES items:@[ - [self toolbarItemWithIdentifier:@"unordered-list" label:NSLocalizedString(@"Unordered list", @"Unordered list toolbar button") icon:@"ToolbarIconUnorderedList" action:@selector(toggleUnorderedList:)], - [self toolbarItemWithIdentifier:@"ordered-list" label:NSLocalizedString(@"Ordered list", @"Ordered list toolbar button") icon:@"ToolbarIconOrderedList" action:@selector(toggleOrderedList:)] + [self toolbarItemGroupWithIdentifier:@"list-group" separated:YES label:NSLocalizedString(@"Ordered/Unordered List", @"") items:@[ + [self toolbarItemWithIdentifier:@"unordered-list" label:NSLocalizedString(@"Unordered List", @"Unordered list toolbar button") icon:@"ToolbarIconUnorderedList" action:@selector(toggleUnorderedList:)], + [self toolbarItemWithIdentifier:@"ordered-list" label:NSLocalizedString(@"Ordered List", @"Ordered list toolbar button") icon:@"ToolbarIconOrderedList" action:@selector(toggleOrderedList:)] ] ], [self toolbarItemWithIdentifier:@"blockquote" label:NSLocalizedString(@"Blockquote", @"Blockquote toolbar button") icon:@"ToolbarIconBlockquote" action:@selector(toggleBlockquote:)], - [self toolbarItemWithIdentifier:@"code" label:NSLocalizedString(@"Inline code", @"Inline code toolbar button") icon:@"ToolbarIconInlineCode" action:@selector(toggleInlineCode:)], + [self toolbarItemWithIdentifier:@"code" label:NSLocalizedString(@"Inline Code", @"Inline code toolbar button") icon:@"ToolbarIconInlineCode" action:@selector(toggleInlineCode:)], [self toolbarItemWithIdentifier:@"link" label:NSLocalizedString(@"Link", @"Link toolbar button") icon:@"ToolbarIconLink" action:@selector(toggleLink:)], [self toolbarItemWithIdentifier:@"image" label:NSLocalizedString(@"Image", @"Image toolbar button") icon:@"ToolbarIconImage" action:@selector(toggleImage:)], [self toolbarItemWithIdentifier:@"copy-html" label:NSLocalizedString(@"Copy HTML", @"Copy HTML toolbar button") icon:@"ToolbarIconCopyHTML" action:@selector(copyHTML:)], @@ -191,9 +191,11 @@ - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString /** * Factory method for creating and configuring a NSToolbarItemGroup object. */ -- (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifier separated:(BOOL)separated items:(NSArray *)items { +- (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifier separated:(BOOL)separated label:(NSString *)label items:(NSArray *)items { NSToolbarItemGroup *itemGroup = [[NSToolbarItemGroup alloc] initWithItemIdentifier:itemIdentifier]; itemGroup.subitems = items; + itemGroup.label = label; + itemGroup.paletteLabel = label; CGFloat itemGroupWidth = itemWidth * items.count; @@ -229,6 +231,8 @@ - (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifie - (NSToolbarItem *)toolbarItemWithIdentifier:(NSString *)itemIdentifier label:(NSString *)label icon:(NSString *)iconImageName action:(SEL)action { NSToolbarItem *toolbarItem = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; toolbarItem.label = label; + toolbarItem.paletteLabel = label; + toolbarItem.toolTip = label; NSImage *itemImage = [NSImage imageNamed:iconImageName]; [itemImage setTemplate:YES]; @@ -252,6 +256,8 @@ - (NSToolbarItem *)toolbarItemWithIdentifier:(NSString *)itemIdentifier label:(N - (NSToolbarItem *)toolbarItemDropDownWithIdentifier:(NSString *)itemIdentifier label:(NSString *)label icon:(NSString *)iconImageName menuItems:(NSArray *)menuItems { NSToolbarItem *toolbarItem = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; toolbarItem.label = label; + toolbarItem.paletteLabel = label; + toolbarItem.toolTip = label; NSImage *itemImage = [NSImage imageNamed:iconImageName]; [itemImage setTemplate:YES]; From c74d4c37c699ea7a5901457b24320038856c11b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Tue, 12 Dec 2017 23:54:10 +0100 Subject: [PATCH 335/439] new default Toolbar excluded Toolbar Buttons for: Comment, Highlight, Strikethrough --- MacDown/Code/Application/MPToolbarController.m | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 3f2e7485..c210b4f9 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -141,7 +141,12 @@ - (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender for (NSString *itemIdentifier in orderedToolbarItemIdentifiers) { - [defaultItemIdentifiers addObject:itemIdentifier]; + // exclude some toolbar items from the default toolbar + if ([itemIdentifier isEqual: @"comment"] || [itemIdentifier isEqual: @"highlight"] || [itemIdentifier isEqual: @"strikethrough"]) { + // do nothing here + }else { + [defaultItemIdentifiers addObject:itemIdentifier]; + } if (i == spaceAfterIndices[j]) { From 17c3fb4cacd411eb0ed5fb9791b5000a83829095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Wed, 13 Dec 2017 00:31:35 +0100 Subject: [PATCH 336/439] reduced button sizes for Toolbar --- MacDown/Code/Application/MPToolbarController.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index c210b4f9..b40d842e 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -13,7 +13,7 @@ #pragma clang diagnostic ignored "-Wundeclared-selector" -static CGFloat itemWidth = 42.5; +static CGFloat itemWidth = 37; @implementation MPToolbarController @@ -217,7 +217,7 @@ - (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifie for (NSToolbarItem *subItem in items) { [segmentedControl setImage:subItem.image forSegment:segmentIndex]; - [segmentedControl setWidth:40.0 forSegment:segmentIndex]; + [segmentedControl setWidth:itemWidth-4 forSegment:segmentIndex]; segmentIndex++; } @@ -241,7 +241,7 @@ - (NSToolbarItem *)toolbarItemWithIdentifier:(NSString *)itemIdentifier label:(N NSImage *itemImage = [NSImage imageNamed:iconImageName]; [itemImage setTemplate:YES]; - NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40)]; + NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 27)]; itemButton.image = itemImage; itemButton.bezelStyle = NSBezelStyleTexturedRounded; itemButton.focusRingType = NSFocusRingTypeDefault; @@ -267,7 +267,7 @@ - (NSToolbarItem *)toolbarItemDropDownWithIdentifier:(NSString *)itemIdentifier NSImage *itemImage = [NSImage imageNamed:iconImageName]; [itemImage setTemplate:YES]; - NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 40) pullsDown:YES]; + NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 42, 27) pullsDown:YES]; popupButton.bezelStyle = NSBezelStyleTexturedRounded; popupButton.focusRingType = NSFocusRingTypeDefault; From 4c0087269b585ec1f99d25702976cf6cc6f8da37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Wed, 13 Dec 2017 01:24:25 +0100 Subject: [PATCH 337/439] fixed missing Toolbar Button Image downscaling also centered the images inside the buttons --- MacDown/Code/Application/MPToolbarController.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index b40d842e..23921110 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -217,6 +217,7 @@ - (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifie for (NSToolbarItem *subItem in items) { [segmentedControl setImage:subItem.image forSegment:segmentIndex]; + [segmentedControl setImageScaling:NSImageScaleProportionallyDown forSegment:segmentIndex]; [segmentedControl setWidth:itemWidth-4 forSegment:segmentIndex]; segmentIndex++; @@ -241,8 +242,10 @@ - (NSToolbarItem *)toolbarItemWithIdentifier:(NSString *)itemIdentifier label:(N NSImage *itemImage = [NSImage imageNamed:iconImageName]; [itemImage setTemplate:YES]; + [itemImage setSize:CGSizeMake(19, 19)]; NSButton *itemButton = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, itemWidth, 27)]; itemButton.image = itemImage; + itemButton.imageScaling = NSImageScaleProportionallyDown; itemButton.bezelStyle = NSBezelStyleTexturedRounded; itemButton.focusRingType = NSFocusRingTypeDefault; itemButton.target = self.document; @@ -266,10 +269,12 @@ - (NSToolbarItem *)toolbarItemDropDownWithIdentifier:(NSString *)itemIdentifier NSImage *itemImage = [NSImage imageNamed:iconImageName]; [itemImage setTemplate:YES]; + [itemImage setSize:CGSizeMake(19, 19)]; NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 42, 27) pullsDown:YES]; popupButton.bezelStyle = NSBezelStyleTexturedRounded; popupButton.focusRingType = NSFocusRingTypeDefault; + //popupButton.imageScaling = NSImageScaleProportionallyDown; // First item's image is displayed as button image, therefor we need a dummy with the icon [popupButton addItemWithTitle:@""]; From 656efc81483f5a2c90c0950adbee1145be63bf36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Wed, 13 Dec 2017 20:19:55 +0100 Subject: [PATCH 338/439] added localization for Toolbar Button labels (:us:/:de:) --- MacDown/Code/Document/MPDocument.m | 4 +-- MacDown/Localization/Base.lproj/MainMenu.xib | 17 ++++++----- .../Localization/de.lproj/Localizable.strings | 28 ++++++++++++++++++ .../Localization/en.lproj/Localizable.strings | 29 +++++++++++++++++++ 4 files changed, 68 insertions(+), 10 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c9e8b9fa..c08ede9f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -644,9 +644,9 @@ - (BOOL)validateUserInterfaceItem:(id)item { NSMenuItem *it = ((NSMenuItem *)item); it.title = self.toolbarVisible ? - NSLocalizedString(@"Hide toolbar", + NSLocalizedString(@"Hide Toolbar", @"Toggle reveal toolbar") : - NSLocalizedString(@"Show toolbar", + NSLocalizedString(@"Show Toolbar", @"Toggle reveal toolbar"); } else if (action == @selector(togglePreviewPane:)) diff --git a/MacDown/Localization/Base.lproj/MainMenu.xib b/MacDown/Localization/Base.lproj/MainMenu.xib index 31a93558..ad9f6f22 100644 --- a/MacDown/Localization/Base.lproj/MainMenu.xib +++ b/MacDown/Localization/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + @@ -389,12 +389,6 @@ - - - - - - @@ -406,6 +400,13 @@ + + + + + + + diff --git a/MacDown/Localization/de.lproj/Localizable.strings b/MacDown/Localization/de.lproj/Localizable.strings index 60d20053..c912a965 100644 --- a/MacDown/Localization/de.lproj/Localizable.strings +++ b/MacDown/Localization/de.lproj/Localizable.strings @@ -84,3 +84,31 @@ create nonexistent link targets for you." = "Bitte prüfe den angegebenen Link. /* No comment provided by engineer. */ "WORDS_PLURAL_STRING" = "%@ Wort;%@ Wörter"; +/* menu item for window toolbar */ +"Hide Toolbar" = "Symbolleiste ausblenden"; +"Show Toolbar" = "Symbolleiste einblenden"; + +/* button labels/tooltips for window toolbar */ +"Shift Left/Right" = "Aus-/Einrücken"; +"Shift Left" = "Nach links verschieben"; +"Shift Right" = "Nach rechts verschieben"; +"Text Styles" = "Text Formate"; +"Strong" = "Fett"; +"Emphasize" = "Kursiv"; +"Underline" = "Unterstrichen"; +"Headings" = "Überschriften"; +"Heading 1" = "Überschrift 1"; +"Heading 2" = "Überschrift 2"; +"Heading 3" = "Überschrift 3"; +"Ordered/Unordered List" = "Un-/Geordnete Liste"; +"Unordered List" = "Ungeordnete Liste"; +"Ordered List" = "Geordnete Liste"; +"Blockquote" = "Block-Zitat"; +"Inline Code" = "Inline-Code"; +"Link" = "Link"; +"Image" = "Bild"; +"Copy HTML" = "HTML kopieren"; +"Comment" = "Kommentar"; +"Highlight" = "Markiert"; +"Strikethrough" = "Durchgestrichen"; +"Layout" = "Darstellung"; diff --git a/MacDown/Localization/en.lproj/Localizable.strings b/MacDown/Localization/en.lproj/Localizable.strings index 89733c24..1262e0cd 100644 --- a/MacDown/Localization/en.lproj/Localizable.strings +++ b/MacDown/Localization/en.lproj/Localizable.strings @@ -13,3 +13,32 @@ "CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; "CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; + +/* menu item for window toolbar */ +"Hide Toolbar" = "Hide Toolbar"; +"Show Toolbar" = "Show Toolbar"; + +/* button labels/tooltips for window toolbar */ +"Shift Left/Right" = "Shift Left/Right"; +"Shift Left" = "Shift Left"; +"Shift Right" = "Shift Right"; +"Text Styles" = "Text Styles"; +"Strong" = "Strong"; +"Emphasize" = "Emphasize"; +"Underline" = "Underline"; +"Headings" = "Headings"; +"Heading 1" = "Heading 1"; +"Heading 2" = "Heading 2"; +"Heading 3" = "Heading 3"; +"Ordered/Unordered List" = "Ordered/Unordered List"; +"Unordered List" = "Unordered List"; +"Ordered List" = "Ordered List"; +"Blockquote" = "Blockquote"; +"Inline Code" = "Inline Code"; +"Link" = "Link"; +"Image" = "Image"; +"Copy HTML" = "Copy HTML"; +"Comment" = "Comment"; +"Highlight" = "Highlight"; +"Strikethrough" = "Strikethrough"; +"Layout" = "Layout"; From 872174ff8ee72c1d96d3df65cece9bec8812f8bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Wed, 13 Dec 2017 20:48:03 +0100 Subject: [PATCH 339/439] added tooltips for segmented controls in Toolbar only for macOS 10.13+ --- MacDown/Code/Application/MPToolbarController.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 23921110..4a6c08d3 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -219,6 +219,9 @@ - (NSToolbarItemGroup *)toolbarItemGroupWithIdentifier:(NSString *)itemIdentifie [segmentedControl setImage:subItem.image forSegment:segmentIndex]; [segmentedControl setImageScaling:NSImageScaleProportionallyDown forSegment:segmentIndex]; [segmentedControl setWidth:itemWidth-4 forSegment:segmentIndex]; + if (@available(macOS 10.13, *)) { + [segmentedControl setToolTip:subItem.label forSegment:segmentIndex]; + } segmentIndex++; } From aec1c47fe469b0affcaf2ecd08a0ac4d63445c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Wed, 13 Dec 2017 20:57:35 +0100 Subject: [PATCH 340/439] removed default Colors, Fonts & Print toolbar items --- MacDown/Localization/Base.lproj/MPDocument.xib | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 4f616907..e0b87d9f 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -1,9 +1,9 @@ - - + + - - + + @@ -27,7 +27,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -128,9 +128,6 @@ - - - From 75cbabcc7e604b0e52f28724e2c0dcb1fe5c4c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Wed, 13 Dec 2017 21:04:15 +0100 Subject: [PATCH 341/439] minor code style changes to fit contribution guidelines --- MacDown/Code/Application/MPToolbarController.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 4a6c08d3..cb52e9a1 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -53,7 +53,7 @@ - (void)setupToolbarItems // Set up all available toolbar items self->toolbarItems = @[ - [self toolbarItemGroupWithIdentifier:@"indent-group" separated:YES label:NSLocalizedString(@"Shift Left/Right", @"") items:@[ + [self toolbarItemGroupWithIdentifier:@"indent-group" separated:YES label:NSLocalizedString(@"Shift Left/Right", @"") items:@[ [self toolbarItemWithIdentifier:@"shift-left" label:NSLocalizedString(@"Shift Left", @"Shift text to the left toolbar button") icon:@"ToolbarIconShiftLeft" action:@selector(unindent:)], [self toolbarItemWithIdentifier:@"shift-right" label:NSLocalizedString(@"Shift Right", @"Shift text to the right toolbar button") icon:@"ToolbarIconShiftRight" action:@selector(indent:)] ] @@ -142,7 +142,9 @@ - (void)selectedToolbarItemGroupItem:(NSSegmentedControl *)sender for (NSString *itemIdentifier in orderedToolbarItemIdentifiers) { // exclude some toolbar items from the default toolbar - if ([itemIdentifier isEqual: @"comment"] || [itemIdentifier isEqual: @"highlight"] || [itemIdentifier isEqual: @"strikethrough"]) { + if ([itemIdentifier isEqual: @"comment"] + || [itemIdentifier isEqual: @"highlight"] + || [itemIdentifier isEqual: @"strikethrough"]) { // do nothing here }else { [defaultItemIdentifiers addObject:itemIdentifier]; From 04cf2b8568562e2f1c2992b470e827c029c1e319 Mon Sep 17 00:00:00 2001 From: Name Date: Fri, 29 Dec 2017 23:40:42 -0800 Subject: [PATCH 342/439] General Speedups - Setting typing attributes for changed text - Swapping NSTimer for NSOperationQueue to prevent any UI interactions from blocking the timer - Improved renderer to render based on the web frame loading status and maximum delay, rather than a timer --- .../HGMarkdownHighlighter.m | 154 ++++++------------ MacDown/Code/Document/MPDocument.m | 23 ++- MacDown/Code/Document/MPRenderer.h | 4 +- MacDown/Code/Document/MPRenderer.m | 93 +++++------ 4 files changed, 109 insertions(+), 165 deletions(-) diff --git a/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m b/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m index 3a4bb445..d98b3404 100644 --- a/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m +++ b/Dependency/peg-markdown-highlight/HGMarkdownHighlighter.m @@ -31,18 +31,13 @@ @interface HGMarkdownHighlighter () { NSFontTraitMask _clearFontTraitMask; pmh_element **_cachedElements; - NSString *_currentHighlightText; - BOOL _workerThreadResultsInvalid; + NSOperationQueue *_parseHighlightsQueue; BOOL _styleDependenciesPending; NSMutableArray *_styleParsingErrors; - CGFloat _defaultTextSize; - + CGFloat _defaultTextSize; } -@property(strong) NSTimer *updateTimer; -@property(strong) NSTimer *highlightTimer; @property(copy) NSColor *defaultTextColor; -@property(strong) NSThread *workerThread; @property(strong) NSDictionary *defaultTypingAttributes; - (NSFontTraitMask) getClearFontTraitMask:(NSFontTraitMask)currentFontTraitMask; @@ -58,7 +53,6 @@ - (id) init return nil; _cachedElements = NULL; - _currentHighlightText = NULL; _styleDependenciesPending = NO; _styleParsingErrors = [NSMutableArray array]; @@ -67,6 +61,9 @@ - (id) init _waitInterval = 0.5; _extensions = pmh_EXT_NONE; + _parseHighlightsQueue = [[NSOperationQueue alloc] init]; + _parseHighlightsQueue.maxConcurrentOperationCount = 1; // serial queue + return self; } @@ -102,12 +99,12 @@ - (instancetype) initWithTextView:(NSTextView *)textView #pragma mark - -- (pmh_element **) parse +- (pmh_element **) parseText:(NSString *)markdown { pmh_element **result = NULL; - if (_currentHighlightText) + if (markdown) { - pmh_markdown_to_elements((char *)[_currentHighlightText UTF8String], self.extensions, &result); + pmh_markdown_to_elements((char *)[markdown UTF8String], self.extensions, &result); pmh_sort_elements_by_pos(result); } return result; @@ -118,17 +115,17 @@ - (pmh_element **) parse // NSString character offsets (NSString uses UTF-16 units as characters, so // sometimes two characters (a "surrogate pair") are needed to represent one // code point): -- (void) convertOffsets:(pmh_element **)elements +- (void) convertOffsets:(pmh_element **)elements text:(NSString *)markdown { // Walk through the whole string only once, and gather all surrogate pair indexes // (technically, the indexes of the high characters (which come before the low // characters) in each pair): - NSMutableArray *surrogatePairIndexes = [NSMutableArray arrayWithCapacity:(_currentHighlightText.length / 4)]; - NSUInteger strLen = _currentHighlightText.length; + NSMutableArray *surrogatePairIndexes = [NSMutableArray arrayWithCapacity:(markdown.length / 4)]; + NSUInteger strLen = markdown.length; NSUInteger i = 0; while (i < strLen) { - if (CFStringIsSurrogateHighCharacter([_currentHighlightText characterAtIndex:i])) + if (CFStringIsSurrogateHighCharacter([markdown characterAtIndex:i])) [surrogatePairIndexes addObject:@(i)]; i++; } @@ -171,59 +168,24 @@ - (void) convertOffsets:(pmh_element **)elements } } - -- (void) threadParseAndHighlight +- (void) requestParsing { - @autoreleasepool { - - pmh_element **result = [self parse]; - [self convertOffsets:result]; - - [self - performSelectorOnMainThread:@selector(parserDidParse:) - withObject:[NSValue valueWithPointer:result] - waitUntilDone:YES]; - - } -} + [_parseHighlightsQueue cancelAllOperations]; + [_parseHighlightsQueue addOperationWithBlock:^{ + // Fetch the markdown (from the main thread) + __block NSString *markdown = nil; + dispatch_sync(dispatch_get_main_queue(), ^{ + markdown = [[self.targetTextView string] copy]; + }); -- (void) threadDidExit:(NSNotification *)notification -{ - [[NSNotificationCenter defaultCenter] - removeObserver:self - name:NSThreadWillExitNotification - object:self.workerThread]; - _currentHighlightText = nil; - self.workerThread = nil; - if (_workerThreadResultsInvalid) - [self - performSelectorOnMainThread:@selector(requestParsing) - withObject:nil - waitUntilDone:NO]; -} + pmh_element **result = [self parseText:markdown]; + [self convertOffsets:result text:markdown]; -- (void) requestParsing -{ - if (self.workerThread != nil) { - _workerThreadResultsInvalid = YES; - return; - } - - self.workerThread = [[NSThread alloc] - initWithTarget:self - selector:@selector(threadParseAndHighlight) - object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(threadDidExit:) - name:NSThreadWillExitNotification - object:self.workerThread]; - - _currentHighlightText = [[self.targetTextView string] copy]; - - _workerThreadResultsInvalid = NO; - [self.workerThread start]; + dispatch_sync(dispatch_get_main_queue(), ^{ + [self cacheElementList:result]; + [self applyVisibleRangeHighlighting]; + }); + }]; } @@ -439,54 +401,34 @@ - (void) clearElementsCache [self cacheElementList:NULL]; } - - -- (void) parserDidParse:(NSValue *)resultPointer -{ - if (_workerThreadResultsInvalid) - return; - [self cacheElementList:(pmh_element **)[resultPointer pointerValue]]; - [self applyVisibleRangeHighlighting]; -} - - -- (void) textViewUpdateTimerFire:(NSTimer*)timer -{ - self.updateTimer = nil; - [self requestParsing]; -} - -- (void)highlightTimerFire:(NSTimer *)timer -{ - self.highlightTimer = nil; - [self applyVisibleRangeHighlighting]; -} - - -- (void) textViewTextDidChange:(NSNotification *)notification +- (void)textViewTextDidChange:(NSNotification *)notification { - if (self.updateTimer != nil) - [self.updateTimer invalidate], self.updateTimer = nil; - self.updateTimer = [NSTimer - timerWithTimeInterval:self.waitInterval - target:self - selector:@selector(textViewUpdateTimerFire:) - userInfo:nil - repeats:NO - ]; - [[NSRunLoop currentRunLoop] addTimer:self.updateTimer forMode:NSRunLoopCommonModes]; + if (!self.waitInterval) { + [self requestParsing]; + } + else { + // Use GCD timers to prevent delays from UI interactions + dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, self.waitInterval * NSEC_PER_SEC); + dispatch_after(delayTime, dispatch_get_main_queue(), ^{ + [self requestParsing]; + }); + } } - (void) textViewDidScroll:(NSNotification *)notification { if (_cachedElements == NULL) return; - [self.highlightTimer invalidate]; - self.highlightTimer = nil; - self.highlightTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 - target:self - selector:@selector(highlightTimerFire:) - userInfo:NULL repeats:NO]; + + [_parseHighlightsQueue cancelAllOperations]; + [_parseHighlightsQueue addOperationWithBlock:^{ + // No need to over render, set a delay + usleep(1000000 * 0.1); + + dispatch_async(dispatch_get_main_queue(), ^{ + [self applyVisibleRangeHighlighting]; + }); + }]; } diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c9e8b9fa..a95f9474 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -371,7 +371,7 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller self.highlighter = [[HGMarkdownHighlighter alloc] initWithTextView:self.editor - waitInterval:0.1]; + waitInterval:0.0]; self.renderer = [[MPRenderer alloc] init]; self.renderer.dataSource = self; self.renderer.delegate = self; @@ -714,10 +714,20 @@ - (BOOL)textView:(NSTextView *)textView shouldChangeTextInRange:(NSRange)range strikethroughEnabled:strikethrough]) return NO; } + + // For every change, set the typing attributes + if (range.location > 0) { + NSRange prevRange = range; + prevRange.location -= 1; + prevRange.length = 1; + + NSDictionary *attr = [[textView attributedString] fontAttributesInRange:prevRange]; + [textView setTypingAttributes:attr]; + } + return YES; } - #pragma mark - Fake NSTextViewDelegate - (BOOL)textViewShouldInsertTab:(NSTextView *)textView @@ -912,6 +922,10 @@ - (NSUInteger)webView:(WebView *)webView #pragma mark - MPRendererDataSource +- (BOOL)rendererLoading { + return self.preview.loading; +} + - (NSString *)rendererMarkdown:(MPRenderer *)renderer { return self.editor.string; @@ -1072,10 +1086,7 @@ - (void)userDefaultsDidChange:(NSNotification *)notification } else { - [renderer parseNowWithCommand:@selector(parseIfPreferencesChanged) - completionHandler:^{ - [renderer render]; - }]; + [renderer parseIfPreferencesChanged]; [renderer renderIfPreferencesChanged]; } } diff --git a/MacDown/Code/Document/MPRenderer.h b/MacDown/Code/Document/MPRenderer.h index 8c7df9c2..2415864f 100644 --- a/MacDown/Code/Document/MPRenderer.h +++ b/MacDown/Code/Document/MPRenderer.h @@ -27,10 +27,7 @@ typedef NS_ENUM(NSUInteger, MPCodeBlockAccessoryType) - (void)parseAndRenderNow; - (void)parseAndRenderLater; -- (void)parseNowWithCommand:(SEL)action completionHandler:(void(^)())handler; -- (void)parseLaterWithCommand:(SEL)action completionHandler:(void(^)())handler; - (void)parseIfPreferencesChanged; -- (void)parse; - (void)renderIfPreferencesChanged; - (void)render; @@ -43,6 +40,7 @@ typedef NS_ENUM(NSUInteger, MPCodeBlockAccessoryType) @protocol MPRendererDataSource +- (BOOL)rendererLoading; - (NSString *)rendererMarkdown:(MPRenderer *)renderer; - (NSString *)rendererHTMLTitle:(MPRenderer *)renderer; diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 8a48ffb9..1bb16260 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -210,7 +210,7 @@ @interface MPRenderer () @property (readonly) NSArray *stylesheets; @property (readonly) NSArray *scripts; @property (copy) NSString *currentHtml; -@property (strong) NSTimer *parseDelayTimer; +@property (strong) NSOperationQueue *parseQueue; @property int extensions; @property BOOL smartypants; @property BOOL TOC; @@ -346,6 +346,8 @@ - (instancetype)init self.currentHtml = @""; self.currentLanguages = [NSMutableArray array]; + self.parseQueue = [[NSOperationQueue alloc] init]; + self.parseQueue.maxConcurrentOperationCount = 1; // Serial queue return self; } @@ -526,29 +528,44 @@ - (NSArray *)scripts } #pragma mark - Public + +- (void)parseAndRenderWithMaxDelay:(NSTimeInterval)maxDelay { + [self.parseQueue cancelAllOperations]; + [self.parseQueue addOperationWithBlock:^{ + // Fetch the markdown (from the main thread) + __block NSString *markdown; + dispatch_sync(dispatch_get_main_queue(), ^{ + markdown = [[self.dataSource rendererMarkdown:self] copy]; + }); -- (void)parseAndRenderNow -{ - [self parseNowWithCommand:@selector(parse) completionHandler:^{ - [self render]; - }]; -} - -- (void)parseAndRenderLater -{ - [self parseLaterWithCommand:@selector(parse) completionHandler:^{ - [self render]; + // Parse in backgound + [self parseMarkdown:markdown]; + + // Wait untils is renderer has finished loading OR until the maxDelay has passed + // This should result in overall faster update times + NSDate *start = [NSDate date]; + __block BOOL rendererIsLoading = true; + while (rendererIsLoading || [start timeIntervalSinceNow] >= maxDelay) { + dispatch_sync(dispatch_get_main_queue(), ^{ + rendererIsLoading = [self.dataSource rendererLoading]; + }); + } + + // Render on main thread + dispatch_async(dispatch_get_main_queue(), ^{ + [self render]; + }); }]; } -- (void)parseNowWithCommand:(SEL)action completionHandler:(void(^)())handler +- (void)parseAndRenderNow { - [self parseLater:0.0 withCommand:action completionHandler:handler]; + [self parseAndRenderWithMaxDelay:0]; } -- (void)parseLaterWithCommand:(SEL)action completionHandler:(void(^)())handler +- (void)parseAndRenderLater { - [self parseLater:0.5 withCommand:action completionHandler:handler]; + [self parseAndRenderWithMaxDelay:0.5]; } - (void)parseIfPreferencesChanged @@ -558,28 +575,21 @@ - (void)parseIfPreferencesChanged || [delegate rendererHasSmartyPants:self] != self.smartypants || [delegate rendererRendersTOC:self] != self.TOC || [delegate rendererDetectsFrontMatter:self] != self.frontMatter) - [self parse]; -} - -- (void)parse -{ - void(^nextAction)() = nil; - if (self.parseDelayTimer.isValid) { - nextAction = self.parseDelayTimer.userInfo[@"next"]; - [self.parseDelayTimer invalidate]; + [self parseMarkdown:[self.dataSource rendererMarkdown:self]]; } +} +- (void)parseMarkdown:(NSString *)markdown { [self.currentLanguages removeAllObjects]; - + id delegate = self.delegate; int extensions = [delegate rendererExtensions:self]; BOOL smartypants = [delegate rendererHasSmartyPants:self]; BOOL hasFrontMatter = [delegate rendererDetectsFrontMatter:self]; BOOL hasTOC = [delegate rendererRendersTOC:self]; - + id frontMatter = nil; - NSString *markdown = [self.dataSource rendererMarkdown:self]; if (hasFrontMatter) { NSUInteger offset = 0; @@ -589,21 +599,18 @@ - (void)parse hoedown_renderer *htmlRenderer = MPCreateHTMLRenderer(self); hoedown_renderer *tocRenderer = NULL; if (hasTOC) - tocRenderer = MPCreateHTMLTOCRenderer(); + tocRenderer = MPCreateHTMLTOCRenderer(); self.currentHtml = MPHTMLFromMarkdown( - markdown, extensions, smartypants, [frontMatter HTMLTable], - htmlRenderer, tocRenderer); + markdown, extensions, smartypants, [frontMatter HTMLTable], + htmlRenderer, tocRenderer); if (tocRenderer) - hoedown_html_renderer_free(tocRenderer); + hoedown_html_renderer_free(tocRenderer); MPFreeHTMLRenderer(htmlRenderer); - + self.extensions = extensions; self.smartypants = smartypants; self.TOC = hasTOC; self.frontMatter = hasFrontMatter; - - if (nextAction) - nextAction(); } - (void)renderIfPreferencesChanged @@ -691,18 +698,4 @@ - (NSString *)HTMLForExportWithStyles:(BOOL)withStyles return html; } - -#pragma mark - Private - -- (void)parseLater:(NSTimeInterval)delay - withCommand:(SEL)action completionHandler:(void(^)())handler -{ - self.parseDelayTimer = - [NSTimer scheduledTimerWithTimeInterval:delay - target:self - selector:action - userInfo:@{@"next": handler} - repeats:NO]; -} - @end From 1133e743421cd08575bde38b71523690e90efa6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Sat, 6 Jan 2018 17:02:58 +0100 Subject: [PATCH 343/439] removed localization for Toolbar Button labels (:us:/:de:) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …to be Transifex compatible --- .../Localization/de.lproj/Localizable.strings | 29 ------------------- .../Localization/en.lproj/Localizable.strings | 29 ------------------- 2 files changed, 58 deletions(-) diff --git a/MacDown/Localization/de.lproj/Localizable.strings b/MacDown/Localization/de.lproj/Localizable.strings index c912a965..93c677a6 100644 --- a/MacDown/Localization/de.lproj/Localizable.strings +++ b/MacDown/Localization/de.lproj/Localizable.strings @@ -83,32 +83,3 @@ create nonexistent link targets for you." = "Bitte prüfe den angegebenen Link. /* No comment provided by engineer. */ "WORDS_PLURAL_STRING" = "%@ Wort;%@ Wörter"; - -/* menu item for window toolbar */ -"Hide Toolbar" = "Symbolleiste ausblenden"; -"Show Toolbar" = "Symbolleiste einblenden"; - -/* button labels/tooltips for window toolbar */ -"Shift Left/Right" = "Aus-/Einrücken"; -"Shift Left" = "Nach links verschieben"; -"Shift Right" = "Nach rechts verschieben"; -"Text Styles" = "Text Formate"; -"Strong" = "Fett"; -"Emphasize" = "Kursiv"; -"Underline" = "Unterstrichen"; -"Headings" = "Überschriften"; -"Heading 1" = "Überschrift 1"; -"Heading 2" = "Überschrift 2"; -"Heading 3" = "Überschrift 3"; -"Ordered/Unordered List" = "Un-/Geordnete Liste"; -"Unordered List" = "Ungeordnete Liste"; -"Ordered List" = "Geordnete Liste"; -"Blockquote" = "Block-Zitat"; -"Inline Code" = "Inline-Code"; -"Link" = "Link"; -"Image" = "Bild"; -"Copy HTML" = "HTML kopieren"; -"Comment" = "Kommentar"; -"Highlight" = "Markiert"; -"Strikethrough" = "Durchgestrichen"; -"Layout" = "Darstellung"; diff --git a/MacDown/Localization/en.lproj/Localizable.strings b/MacDown/Localization/en.lproj/Localizable.strings index 1262e0cd..89733c24 100644 --- a/MacDown/Localization/en.lproj/Localizable.strings +++ b/MacDown/Localization/en.lproj/Localizable.strings @@ -13,32 +13,3 @@ "CHARACTERS_PLURAL_STRING" = "%@ character;%@ characters"; "CHARACTERS_NO_SPACES_PLURAL_STRING" = "%@ character (no spaces);%@ characters (no spaces)"; - -/* menu item for window toolbar */ -"Hide Toolbar" = "Hide Toolbar"; -"Show Toolbar" = "Show Toolbar"; - -/* button labels/tooltips for window toolbar */ -"Shift Left/Right" = "Shift Left/Right"; -"Shift Left" = "Shift Left"; -"Shift Right" = "Shift Right"; -"Text Styles" = "Text Styles"; -"Strong" = "Strong"; -"Emphasize" = "Emphasize"; -"Underline" = "Underline"; -"Headings" = "Headings"; -"Heading 1" = "Heading 1"; -"Heading 2" = "Heading 2"; -"Heading 3" = "Heading 3"; -"Ordered/Unordered List" = "Ordered/Unordered List"; -"Unordered List" = "Unordered List"; -"Ordered List" = "Ordered List"; -"Blockquote" = "Blockquote"; -"Inline Code" = "Inline Code"; -"Link" = "Link"; -"Image" = "Image"; -"Copy HTML" = "Copy HTML"; -"Comment" = "Comment"; -"Highlight" = "Highlight"; -"Strikethrough" = "Strikethrough"; -"Layout" = "Layout"; From 6323925f64beba2499497c51597b1db9c820035d Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 13 Jan 2018 00:20:57 +0800 Subject: [PATCH 344/439] Xcode and dependencies update, many warning fixes --- .../project.pbxproj | 14 ++++++- .../peg-markdown-highlight/pmh_styleparser.c | 17 +++++---- Dependency/prism | 2 +- .../version/version.xcodeproj/project.pbxproj | 14 ++++++- MacDown.xcodeproj/project.pbxproj | 37 +++++++++++++++++-- .../xcshareddata/xcschemes/MacDown.xcscheme | 4 +- .../MPEditorPreferencesViewController.m | 2 +- .../MPGeneralPreferencesViewController.m | 2 +- .../MPHtmlPreferencesViewController.m | 2 +- .../MPMarkdownPreferencesViewController.m | 2 +- .../MPTerminalPreferencesViewController.m | 2 +- MacDown/Code/Utility/MPMathJaxListener.h | 2 +- MacDown/Code/Utility/MPMathJaxListener.m | 4 +- Podfile | 19 ++++++---- Podfile.lock | 12 +++--- macdown-cmd/main.m | 1 + 16 files changed, 99 insertions(+), 37 deletions(-) diff --git a/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj b/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj index fb1a2f1a..b9cd2f46 100644 --- a/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj +++ b/Dependency/peg-markdown-highlight/peg-markdown-highlight.xcodeproj/project.pbxproj @@ -50,7 +50,7 @@ 1F8A8367195348C500B6BF69 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0920; }; buildConfigurationList = 1F8A836A195348C500B6BF69 /* Build configuration list for PBXProject "peg-markdown-highlight" */; compatibilityVersion = "Xcode 3.2"; @@ -72,12 +72,18 @@ 1F8A8368195348C500B6BF69 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -97,12 +103,18 @@ 1F8A8369195348C500B6BF69 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; diff --git a/Dependency/peg-markdown-highlight/pmh_styleparser.c b/Dependency/peg-markdown-highlight/pmh_styleparser.c index 97564f52..3ad4737a 100644 --- a/Dependency/peg-markdown-highlight/pmh_styleparser.c +++ b/Dependency/peg-markdown-highlight/pmh_styleparser.c @@ -469,13 +469,16 @@ static void interpret_and_add_style(style_parser_data *p_data, pmh_element_type type = pmh_element_type_from_name(style_rule_name); if (type == pmh_NO_TYPE) { - if (EQUALS(style_rule_name, "editor")) - isEditorType = true, type = pmh_NO_TYPE; - else if (EQUALS(style_rule_name, "editor-current-line")) - isCurrentLineType = true, type = pmh_NO_TYPE; - else if (EQUALS(style_rule_name, "editor-selection")) - isSelectionType = true, type = pmh_NO_TYPE; - else { + if (EQUALS(style_rule_name, "editor")) { + isEditorType = true; + type = pmh_NO_TYPE; + } else if (EQUALS(style_rule_name, "editor-current-line")) { + isCurrentLineType = true; + type = pmh_NO_TYPE; + } else if (EQUALS(style_rule_name, "editor-selection")) { + isSelectionType = true; + type = pmh_NO_TYPE; + } else { report_error(p_data, style_rule_line_number, "Style rule '%s' is not a language element type name or " "one of the following: 'editor', 'editor-current-line', " diff --git a/Dependency/prism b/Dependency/prism index 7741755a..bd479f1d 160000 --- a/Dependency/prism +++ b/Dependency/prism @@ -1 +1 @@ -Subproject commit 7741755a85f52e0d84ee88dfe91d755a4e21cd6f +Subproject commit bd479f1d5ff0855b4c50168c1a82c91b2db191f2 diff --git a/Dependency/version/version.xcodeproj/project.pbxproj b/Dependency/version/version.xcodeproj/project.pbxproj index bc6bc356..45c80023 100644 --- a/Dependency/version/version.xcodeproj/project.pbxproj +++ b/Dependency/version/version.xcodeproj/project.pbxproj @@ -40,7 +40,7 @@ 1FCD71091A20BA3A00C028B5 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = uranusjr; TargetAttributes = { 1FCD710D1A20BA3A00C028B5 = { @@ -68,12 +68,18 @@ 1FCD710E1A20BA3A00C028B5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -93,12 +99,18 @@ 1FCD710F1A20BA3A00C028B5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index c1ef6422..a37f9a7c 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -900,7 +900,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = MP; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Tzu-ping Chung "; TargetAttributes = { 1FA6DE441941CC9E000409FB = { @@ -1005,9 +1005,12 @@ files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-resources.sh", + "${PODS_ROOT}/MASPreferences/Framework/en.lproj/MASPreferencesWindow.xib", ); name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1065,13 +1068,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MacDownTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 6C852F8D7610992AEEA172AE /* [CP] Check Pods Manifest.lock */ = { @@ -1080,13 +1086,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-macdown-cmd-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9041D3A827C49F34399D813E /* [CP] Embed Pods Frameworks */ = { @@ -1110,13 +1119,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MacDown-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; C5B8C48273E72106885CA8C4 /* [CP] Embed Pods Frameworks */ = { @@ -1125,9 +1137,14 @@ files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-MacDown/Pods-MacDown-frameworks.sh", + "${PODS_ROOT}/Sparkle/Sparkle.framework", + "${PODS_ROOT}/Sparkle/Sparkle.framework.dSYM", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sparkle.framework", + "${DWARF_DSYM_FOLDER_PATH}/Sparkle.framework.dSYM", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1523,14 +1540,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -1568,14 +1591,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; diff --git a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme index 2d29dd29..d9519803 100644 --- a/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme +++ b/MacDown.xcodeproj/xcshareddata/xcschemes/MacDown.xcscheme @@ -1,6 +1,6 @@ 1.4' - pod 'hoedown', '~> 3.0.7' - pod 'JJPluralForm', '~> 2.1' # Plural form localization. - pod 'LibYAML', '~> 0.1', :inhibit_warnings => true + pod 'hoedown', '~> 3.0.7', :inhibit_warnings => false + pod 'JJPluralForm', '~> 2.1' + pod 'LibYAML', '~> 0.1' pod 'M13OrderedDictionary', '~> 1.1' - pod 'MASPreferences', '~> 1.1.3' # Preference window. - pod 'PAPreferences', '~> 0.4' # Preference singleton (Locked until we drop 10.8 support). - pod 'Sparkle', '~> 1.13' # Updater. + pod 'MASPreferences', '~> 1.3' + pod 'Sparkle', '~> 1.18', :inhibit_warnings => false + + # Locked on 0.4.x until we drop 10.8. + pod 'PAPreferences', '~> 0.4' end target "MacDownTests" do diff --git a/Podfile.lock b/Podfile.lock index b02a7dcc..15bdd80a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -7,7 +7,7 @@ PODS: - JJPluralForm (2.1) - LibYAML (0.1.4) - M13OrderedDictionary (1.1.0) - - MASPreferences (1.1.4) + - MASPreferences (1.3) - PAPreferences (0.5) - Sparkle (1.18.1) @@ -18,9 +18,9 @@ DEPENDENCIES: - JJPluralForm (~> 2.1) - LibYAML (~> 0.1) - M13OrderedDictionary (~> 1.1) - - MASPreferences (~> 1.1.3) + - MASPreferences (~> 1.3) - PAPreferences (~> 0.4) - - Sparkle (~> 1.13) + - Sparkle (~> 1.18) SPEC CHECKSUMS: GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 @@ -29,10 +29,10 @@ SPEC CHECKSUMS: JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 M13OrderedDictionary: 6e157fe9c82aa6b3cd7198f5c5c30c7a6834c4a6 - MASPreferences: 7bdcfe891d7840453cf48f95fa866c3e152ace7a + MASPreferences: c08b8622dd17b47da87669e741efd7c92e970e8c PAPreferences: 9f0ffb1e67174a0df001af9d3320166ceb9ee6f5 Sparkle: 06ea33170007c5937ee54da481b4481af98fac79 -PODFILE CHECKSUM: 5b642b155fad967ed7a1add662c075d71f8e304e +PODFILE CHECKSUM: 69e73b80f886f1262b23e4a59632685ac15c0ac3 -COCOAPODS: 1.2.0 +COCOAPODS: 1.3.1 diff --git a/macdown-cmd/main.m b/macdown-cmd/main.m index 6e1b3755..28b93e47 100644 --- a/macdown-cmd/main.m +++ b/macdown-cmd/main.m @@ -6,6 +6,7 @@ // Copyright (c) 2014 Tzu-ping Chung . All rights reserved. // +#import #import #import #import "NSUserDefaults+Suite.h" From afcc017768994e9eb16ed4f6beb3ae3d75a1218c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 13 Jan 2018 00:23:54 +0800 Subject: [PATCH 345/439] Fix selector casing of -copyHtml: Reported on Twitter. https://twitter.com/mattsayward/status/951821641440530432 Yeah I know that casing doesn't make sense. I was young. Sorry about that. Too late to change it though. :( --- MacDown/Code/Application/MPToolbarController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Application/MPToolbarController.m b/MacDown/Code/Application/MPToolbarController.m index 2ec62604..cb6adf8d 100644 --- a/MacDown/Code/Application/MPToolbarController.m +++ b/MacDown/Code/Application/MPToolbarController.m @@ -79,7 +79,7 @@ - (void)setupToolbarItems [self toolbarItemWithIdentifier:@"code" label:NSLocalizedString(@"Inline code", @"Inline code toolbar button") icon:@"ToolbarIconInlineCode" action:@selector(toggleInlineCode:)], [self toolbarItemWithIdentifier:@"link" label:NSLocalizedString(@"Link", @"Link toolbar button") icon:@"ToolbarIconLink" action:@selector(toggleLink:)], [self toolbarItemWithIdentifier:@"image" label:NSLocalizedString(@"Image", @"Image toolbar button") icon:@"ToolbarIconImage" action:@selector(toggleImage:)], - [self toolbarItemWithIdentifier:@"copy-html" label:NSLocalizedString(@"Copy HTML", @"Copy HTML toolbar button") icon:@"ToolbarIconCopyHTML" action:@selector(copyHTML:)], + [self toolbarItemWithIdentifier:@"copy-html" label:NSLocalizedString(@"Copy HTML", @"Copy HTML toolbar button") icon:@"ToolbarIconCopyHTML" action:@selector(copyHtml:)], [self toolbarItemWithIdentifier:@"comment" label:NSLocalizedString(@"Comment", @"Comment toolbar button") icon:@"ToolbarIconComment" action:@selector(toggleComment:)], [self toolbarItemWithIdentifier:@"highlight" label:NSLocalizedString(@"Highlight", @"Highlight toolbar button") icon:@"ToolbarIconHighlight" action:@selector(toggleHighlight:)], [self toolbarItemWithIdentifier:@"strikethrough" label:NSLocalizedString(@"Strikethrough", @"Strikethrough toolbar button") icon:@"ToolbarIconStrikethrough" action:@selector(toggleStrikethrough:)], From 519d973879c244c79ea430d73126bbc252ad16fb Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sat, 13 Jan 2018 11:36:38 +0800 Subject: [PATCH 346/439] Upgrade Travis's Xcode version For the @available marker. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d5fafa69..4698997d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -osx_image: xcode8 +osx_image: xcode9.2 language: objective-c cache: - bundler From 7832223845d88dd80fe0f6aa955815ecbfba5d5d Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Mon, 19 Feb 2018 00:19:51 -0600 Subject: [PATCH 347/439] Fixes large documents with lots of Latex beachballing and crashing Macdown. The idea is to only send HTML to the webframe when it's done processing the previous HTML it recieved. This seems to do the trick in initial testing. --- MacDown/Code/Document/MPDocument.m | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 3cdb8e93..bb879620 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -209,6 +209,8 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property (strong) NSMenuItem *charMenuItem; @property (strong) NSMenuItem *charNoSpacesMenuItem; @property (nonatomic) BOOL needsToUnregister; +@property (nonatomic) BOOL alreadyRenderingInWeb; +@property (nonatomic) BOOL renderToWebPending; // Store file content in initializer until nib is loaded. @property (copy) NSString *loadedString; @@ -852,12 +854,28 @@ - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame // Update word count if (self.preferences.editorShowWordCount) [self updateWordCount]; + + self.alreadyRenderingInWeb = NO; + + if(self.renderToWebPending){ + [self.renderer parseAndRenderNow]; + } + + self.renderToWebPending = NO; } - (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame { [self webView:sender didFinishLoadForFrame:frame]; + + self.alreadyRenderingInWeb = NO; + + if(self.renderToWebPending){ + [self.renderer parseAndRenderNow]; + } + + self.renderToWebPending = NO; } @@ -997,8 +1015,15 @@ - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html { + if (self.alreadyRenderingInWeb){ + self.renderToWebPending = YES; + return; + } + if (self.printing) return; + + self.alreadyRenderingInWeb = YES; // Delayed copying for -copyHtml. if (self.copying) From 487d3358433907bcaf7895170bd698e047801f97 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Wed, 21 Feb 2018 01:26:59 -0600 Subject: [PATCH 348/439] Bundle a fixed version of MathJax that won't hang when a resource fails to load. --- MacDown/Code/Document/MPDocument.m | 24 +- MacDown/Code/Document/MPRenderer.m | 5 +- MacDown/Resources/MathJax/MathJax.js | 3324 ++++++++++++++++++++++++++ 3 files changed, 3347 insertions(+), 6 deletions(-) create mode 100644 MacDown/Resources/MathJax/MathJax.js diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index bb879620..4379927f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -172,7 +172,7 @@ - (int)rendererFlags @interface MPDocument () = 101100 - WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate, + WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate,WebResourceLoadDelegate, #endif MPAutosaving, MPRendererDataSource, MPRendererDelegate> @@ -393,6 +393,7 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller self.preview.frameLoadDelegate = self; self.preview.policyDelegate = self; self.preview.editingDelegate = self; + self.preview.resourceLoadDelegate = self; NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(editorTextDidChange:) @@ -817,6 +818,21 @@ - (BOOL)textViewShouldMoveToLeftEndOfLine:(NSTextView *)textView } +#pragma mark - WebResourceLoadDelegate + +- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource{ + + if([[request.URL lastPathComponent] isEqualToString:@"MathJax.js"]){ + NSURLComponents *origComps = [NSURLComponents componentsWithURL:[request URL] resolvingAgainstBaseURL:YES]; + NSURLComponents *updatedComps = [NSURLComponents componentsWithURL:[[NSBundle mainBundle] URLForResource:@"MathJax" withExtension:@"js" subdirectory:@"MathJax"] resolvingAgainstBaseURL:NO]; + [updatedComps setQueryItems:[origComps queryItems]]; + + request = [NSMutableURLRequest requestWithURL:[updatedComps URL]]; + } + + return request; +} + #pragma mark - WebFrameLoadDelegate - (void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame @@ -857,9 +873,8 @@ - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame self.alreadyRenderingInWeb = NO; - if(self.renderToWebPending){ + if (self.renderToWebPending) [self.renderer parseAndRenderNow]; - } self.renderToWebPending = NO; } @@ -871,9 +886,8 @@ - (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error self.alreadyRenderingInWeb = NO; - if(self.renderToWebPending){ + if (self.renderToWebPending) [self.renderer parseAndRenderNow]; - } self.renderToWebPending = NO; } diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 1bb16260..8cb2555d 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -19,7 +19,10 @@ #import "MPAsset.h" #import "MPPreferences.h" - +// Warning: If the version of MathJax is ever updated, please check the status +// of https://github.com/mathjax/MathJax/issues/548. If the fix has been merged +// in to MathJax, then the WebResourceLoadDelegate can be removed from MPDocument +// and MathJax.js can be removed from this project. static NSString * const kMPMathJaxCDN = @"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js" @"?config=TeX-AMS-MML_HTMLorMML"; diff --git a/MacDown/Resources/MathJax/MathJax.js b/MacDown/Resources/MathJax/MathJax.js new file mode 100644 index 00000000..96c6097b --- /dev/null +++ b/MacDown/Resources/MathJax/MathJax.js @@ -0,0 +1,3324 @@ +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * MathJax.js + * + * The main support code for the MathJax Hub, including the + * Ajax, Callback, Messaging, and Object-Oriented Programming + * libraries, as well as the base Jax classes, and startup + * processing code. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2009-2017 The MathJax Consortium + * + * 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. + */ + + +// +// Check if browser can support MathJax (no one fails this nowadays) +// +if (document.getElementById && document.childNodes && document.createElement) { +// +// Skip if MathJax is already loaded +// +if (!(window.MathJax && MathJax.Hub)) { + +// +// Get author configuration from MathJax variable, if any +// +if (window.MathJax) {window.MathJax = {AuthorConfig: window.MathJax}} + else {window.MathJax = {}} + +// MathJax.isPacked = true; // This line is uncommented by the packer. + +MathJax.version = "2.7.1"; +MathJax.fileversion = "2.7.1"; +MathJax.cdnVersion = "2.7.1"; // specifies a revision to break caching +MathJax.cdnFileVersions = {}; // can be used to specify revisions for individual files + +/**********************************************************/ + +(function (BASENAME) { + var BASE = window[BASENAME]; + if (!BASE) {BASE = window[BASENAME] = {}} + + var PROTO = []; // a static object used to indicate when a prototype is being created + var OBJECT = function (def) { + var obj = def.constructor; if (!obj) {obj = function () {}} + for (var id in def) {if (id !== 'constructor' && def.hasOwnProperty(id)) {obj[id] = def[id]}} + return obj; + }; + var CONSTRUCTOR = function () { + return function () {return arguments.callee.Init.call(this,arguments)}; + }; + + BASE.Object = OBJECT({ + constructor: CONSTRUCTOR(), + + Subclass: function (def,classdef) { + var obj = CONSTRUCTOR(); + obj.SUPER = this; obj.Init = this.Init; + obj.Subclass = this.Subclass; obj.Augment = this.Augment; + obj.protoFunction = this.protoFunction; + obj.can = this.can; obj.has = this.has; obj.isa = this.isa; + obj.prototype = new this(PROTO); + obj.prototype.constructor = obj; // the real constructor + obj.Augment(def,classdef); + return obj; + }, + + Init: function (args) { + var obj = this; + if (args.length === 1 && args[0] === PROTO) {return obj} + if (!(obj instanceof args.callee)) {obj = new args.callee(PROTO)} + return obj.Init.apply(obj,args) || obj; + }, + + Augment: function (def,classdef) { + var id; + if (def != null) { + for (id in def) {if (def.hasOwnProperty(id)) {this.protoFunction(id,def[id])}} + // MSIE doesn't list toString even if it is not native so handle it separately + if (def.toString !== this.prototype.toString && def.toString !== {}.toString) + {this.protoFunction('toString',def.toString)} + } + if (classdef != null) { + for (id in classdef) {if (classdef.hasOwnProperty(id)) {this[id] = classdef[id]}} + } + return this; + }, + + protoFunction: function (id,def) { + this.prototype[id] = def; + if (typeof def === "function") {def.SUPER = this.SUPER.prototype} + }, + + prototype: { + Init: function () {}, + SUPER: function (fn) {return fn.callee.SUPER}, + can: function (method) {return typeof(this[method]) === "function"}, + has: function (property) {return typeof(this[property]) !== "undefined"}, + isa: function (obj) {return (obj instanceof Object) && (this instanceof obj)} + }, + + can: function (method) {return this.prototype.can.call(this,method)}, + has: function (property) {return this.prototype.has.call(this,property)}, + isa: function (obj) { + var constructor = this; + while (constructor) { + if (constructor === obj) {return true} else {constructor = constructor.SUPER} + } + return false; + }, + + + SimpleSUPER: OBJECT({ + constructor: function (def) {return this.SimpleSUPER.define(def)}, + + define: function (src) { + var dst = {}; + if (src != null) { + for (var id in src) {if (src.hasOwnProperty(id)) {dst[id] = this.wrap(id,src[id])}} + // MSIE doesn't list toString even if it is not native so handle it separately + if (src.toString !== this.prototype.toString && src.toString !== {}.toString) + {dst.toString = this.wrap('toString',src.toString)} + } + return dst; + }, + + wrap: function (id,f) { + if (typeof(f) !== 'function' || !f.toString().match(/\.\s*SUPER\s*\(/)) {return f} + var fn = function () { + this.SUPER = fn.SUPER[id]; + try {var result = f.apply(this,arguments)} catch (err) {delete this.SUPER; throw err} + delete this.SUPER; + return result; + } + fn.toString = function () {return f.toString.apply(f,arguments)} + return fn; + } + + }) + }); + + BASE.Object.isArray = Array.isArray || function (obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + BASE.Object.Array = Array; + +})("MathJax"); + +/**********************************************************/ + +/* + * Create a callback function from various forms of data: + * + * MathJax.Callback(fn) -- callback to a function + * + * MathJax.Callback([fn]) -- callback to function + * MathJax.Callback([fn,data...]) + * -- callback to function with given data as arguments + * MathJax.Callback([object,fn]) + * -- call fn with object as "this" + * MathJax.Callback([object,fn,data...]) + * -- call fn with object as "this" and data as arguments + * MathJax.Callback(["method",object]) + * -- call method of object wth object as "this" + * MathJax.Callback(["method",object,data...]) + * -- as above, but with data as arguments to method + * + * MathJax.Callback({hook: fn, data: [...], object: this}) + * -- give function, data, and object to act as "this" explicitly + * + * MathJax.Callback("code") -- callback that compiles and executes a string + * + * MathJax.Callback([...],i) + * -- use slice of array starting at i and interpret + * result as above. (Used for passing "arguments" array + * and trimming initial arguments, if any.) + */ + +/* + * MathJax.Callback.After([...],cb1,cb2,...) + * -- make a callback that isn't called until all the other + * ones are called first. I.e., wait for a union of + * callbacks to occur before making the given callback. + */ + +/* + * MathJax.Callback.Queue([callback,...]) + * -- make a synchronized queue of commands that process + * sequentially, waiting for those that return uncalled + * callbacks. + */ + +/* + * MathJax.Callback.Signal(name) + * -- finds or creates a names signal, to which listeners + * can be attached and are signaled by messages posted + * to the signal. Responses can be asynchronous. + */ + +(function (BASENAME) { + var BASE = window[BASENAME]; + if (!BASE) {BASE = window[BASENAME] = {}} + var isArray = BASE.Object.isArray; + // + // Create a callback from an associative array + // + var CALLBACK = function (data) { + var cb = function () {return arguments.callee.execute.apply(arguments.callee,arguments)}; + for (var id in CALLBACK.prototype) { + if (CALLBACK.prototype.hasOwnProperty(id)) { + if (typeof(data[id]) !== 'undefined') {cb[id] = data[id]} + else {cb[id] = CALLBACK.prototype[id]} + } + } + cb.toString = CALLBACK.prototype.toString; + return cb; + }; + CALLBACK.prototype = { + isCallback: true, + hook: function () {}, + data: [], + object: window, + execute: function () { + if (!this.called || this.autoReset) { + this.called = !this.autoReset; + return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0))); + } + }, + reset: function () {delete this.called}, + toString: function () {return this.hook.toString.apply(this.hook,arguments)} + }; + var ISCALLBACK = function (f) { + return (typeof(f) === "function" && f.isCallback); + } + + // + // Evaluate a string in global context + // + var EVAL = function (code) {return eval.call(window,code)} + var TESTEVAL = function () { + EVAL("var __TeSt_VaR__ = 1"); // check if it works in global context + if (window.__TeSt_VaR__) { + try { delete window.__TeSt_VaR__; } // NOTE IE9 throws when in IE7 mode + catch (error) { window.__TeSt_VaR__ = null; } + } else { + if (window.execScript) { + // IE + EVAL = function (code) { + BASE.__code = code; + code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}"; + window.execScript(code); + var result = BASE.__result; delete BASE.__result; delete BASE.__code; + if (result instanceof Error) {throw result} + return result; + } + } else { + // Safari2 + EVAL = function (code) { + BASE.__code = code; + code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}"; + var head = (document.getElementsByTagName("head"))[0]; if (!head) {head = document.body} + var script = document.createElement("script"); + script.appendChild(document.createTextNode(code)); + head.appendChild(script); head.removeChild(script); + var result = BASE.__result; delete BASE.__result; delete BASE.__code; + if (result instanceof Error) {throw result} + return result; + } + } + } + TESTEVAL = null; + }; + + // + // Create a callback from various types of data + // + var USING = function (args,i) { + if (arguments.length > 1) { + if (arguments.length === 2 && !(typeof arguments[0] === 'function') && + arguments[0] instanceof Object && typeof arguments[1] === 'number') + {args = [].slice.call(args,i)} + else {args = [].slice.call(arguments,0)} + } + if (isArray(args) && args.length === 1) {args = args[0]} + if (typeof args === 'function') { + if (args.execute === CALLBACK.prototype.execute) {return args} + return CALLBACK({hook: args}); + } else if (isArray(args)) { + if (typeof(args[0]) === 'string' && args[1] instanceof Object && + typeof args[1][args[0]] === 'function') { + return CALLBACK({hook: args[1][args[0]], object: args[1], data: args.slice(2)}); + } else if (typeof args[0] === 'function') { + return CALLBACK({hook: args[0], data: args.slice(1)}); + } else if (typeof args[1] === 'function') { + return CALLBACK({hook: args[1], object: args[0], data: args.slice(2)}); + } + } else if (typeof(args) === 'string') { + if (TESTEVAL) TESTEVAL(); + return CALLBACK({hook: EVAL, data: [args]}); + } else if (args instanceof Object) { + return CALLBACK(args); + } else if (typeof(args) === 'undefined') { + return CALLBACK({}); + } + throw Error("Can't make callback from given data"); + }; + + // + // Wait for a given time to elapse and then perform the callback + // + var DELAY = function (time,callback) { + callback = USING(callback); + callback.timeout = setTimeout(callback,time); + return callback; + }; + + // + // Callback used by AFTER, QUEUE, and SIGNAL to check if calls have completed + // + var WAITFOR = function (callback,signal) { + callback = USING(callback); + if (!callback.called) {WAITSIGNAL(callback,signal); signal.pending++} + }; + var WAITEXECUTE = function () { + var signals = this.signal; delete this.signal; + this.execute = this.oldExecute; delete this.oldExecute; + var result = this.execute.apply(this,arguments); + if (ISCALLBACK(result) && !result.called) {WAITSIGNAL(result,signals)} else { + for (var i = 0, m = signals.length; i < m; i++) { + signals[i].pending--; + if (signals[i].pending <= 0) {signals[i].call()} + } + } + }; + var WAITSIGNAL = function (callback,signals) { + if (!isArray(signals)) {signals = [signals]} + if (!callback.signal) { + callback.oldExecute = callback.execute; + callback.execute = WAITEXECUTE; + callback.signal = signals; + } else if (signals.length === 1) {callback.signal.push(signals[0])} + else {callback.signal = callback.signal.concat(signals)} + }; + + // + // Create a callback that is called when a collection of other callbacks have + // all been executed. If the callback gets called immediately (i.e., the + // others are all already called), check if it returns another callback + // and return that instead. + // + var AFTER = function (callback) { + callback = USING(callback); + callback.pending = 0; + for (var i = 1, m = arguments.length; i < m; i++) + {if (arguments[i]) {WAITFOR(arguments[i],callback)}} + if (callback.pending === 0) { + var result = callback(); + if (ISCALLBACK(result)) {callback = result} + } + return callback; + }; + + // + // An array of prioritized hooks that are executed sequentially + // with a given set of data. + // + var HOOKS = MathJax.Object.Subclass({ + // + // Initialize the array and the auto-reset status + // + Init: function (reset) { + this.hooks = []; + this.remove = []; // used when hooks are removed during execution of list + this.reset = reset; + this.running = false; + }, + // + // Add a callback to the list, in priority order (default priority is 10) + // + Add: function (hook,priority) { + if (priority == null) {priority = 10} + if (!ISCALLBACK(hook)) {hook = USING(hook)} + hook.priority = priority; + var i = this.hooks.length; + while (i > 0 && priority < this.hooks[i-1].priority) {i--} + this.hooks.splice(i,0,hook); + return hook; + }, + Remove: function (hook) { + for (var i = 0, m = this.hooks.length; i < m; i++) { + if (this.hooks[i] === hook) { + if (this.running) {this.remove.push(i)} + else {this.hooks.splice(i,1)} + return; + } + } + }, + // + // Execute the list of callbacks, resetting them if requested. + // If any return callbacks, return a callback that will be + // executed when they all have completed. + // Remove any hooks that requested being removed during processing. + // + Execute: function () { + var callbacks = [{}]; + this.running = true; + for (var i = 0, m = this.hooks.length; i < m; i++) { + if (this.reset) {this.hooks[i].reset()} + var result = this.hooks[i].apply(window,arguments); + if (ISCALLBACK(result) && !result.called) {callbacks.push(result)} + } + this.running = false; + if (this.remove.length) {this.RemovePending()} + if (callbacks.length === 1) {return null} + if (callbacks.length === 2) {return callbacks[1]} + return AFTER.apply({},callbacks); + }, + // + // Remove hooks that asked to be removed during execution of list + // + RemovePending: function () { + this.remove = this.remove.sort(); + for (var i = this.remove.length-1; i >= 0; i--) {this.hooks.splice(i,1)} + this.remove = []; + } + + }); + + // + // Run an array of callbacks passing them the given data. + // (Legacy function, since this has been replaced by the HOOKS object). + // + var EXECUTEHOOKS = function (hooks,data,reset) { + if (!hooks) {return null} + if (!isArray(hooks)) {hooks = [hooks]} + if (!isArray(data)) {data = (data == null ? [] : [data])} + var handler = HOOKS(reset); + for (var i = 0, m = hooks.length; i < m; i++) {handler.Add(hooks[i])} + return handler.Execute.apply(handler,data); + }; + + // + // Command queue that performs commands in order, waiting when + // necessary for commands to complete asynchronousely + // + var QUEUE = BASE.Object.Subclass({ + // + // Create the queue and push any commands that are specified + // + Init: function () { + this.pending = this.running = 0; + this.queue = []; + this.Push.apply(this,arguments); + }, + // + // Add commands to the queue and run them. Adding a callback object + // (rather than a callback specification) queues a wait for that callback. + // Return the final callback for synchronization purposes. + // + Push: function () { + var callback; + for (var i = 0, m = arguments.length; i < m; i++) { + callback = USING(arguments[i]); + if (callback === arguments[i] && !callback.called) + {callback = USING(["wait",this,callback])} + this.queue.push(callback); + } + if (!this.running && !this.pending) {this.Process()} + return callback; + }, + // + // Process the command queue if we aren't waiting on another command + // + Process: function (queue) { + while (!this.running && !this.pending && this.queue.length) { + var callback = this.queue[0]; + queue = this.queue.slice(1); this.queue = []; + this.Suspend(); var result = callback(); this.Resume(); + if (queue.length) {this.queue = queue.concat(this.queue)} + if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)} + } + }, + // + // Suspend/Resume command processing on this queue + // + Suspend: function () {this.running++}, + Resume: function () {if (this.running) {this.running--}}, + // + // Used by WAITFOR to restart the queue when an action completes + // + call: function () {this.Process.apply(this,arguments)}, + wait: function (callback) {return callback} + }); + + // + // Create a named signal that listeners can attach to, to be signaled by + // postings made to the signal. Posts are queued if they occur while one + // is already in process. + // + var SIGNAL = QUEUE.Subclass({ + Init: function (name) { + QUEUE.prototype.Init.call(this); + this.name = name; + this.posted = []; // the messages posted so far + this.listeners = HOOKS(true); // those with interest in this signal + this.posting = false; + this.callback = null; + }, + // + // Post a message to the signal listeners, with callback for when complete + // + Post: function (message,callback,forget) { + callback = USING(callback); + if (this.posting || this.pending) { + this.Push(["Post",this,message,callback,forget]); + } else { + this.callback = callback; callback.reset(); + if (!forget) {this.posted.push(message)} + this.Suspend(); this.posting = true; + var result = this.listeners.Execute(message); + if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)} + this.Resume(); this.posting = false; + if (!this.pending) {this.call()} + } + return callback; + }, + // + // Clear the post history (so new listeners won't get old messages) + // + Clear: function (callback) { + callback = USING(callback); + if (this.posting || this.pending) { + callback = this.Push(["Clear",this,callback]); + } else { + this.posted = []; + callback(); + } + return callback; + }, + // + // Call the callback (all replies are in) and process the command queue + // + call: function () {this.callback(this); this.Process()}, + + // + // A listener calls this to register interest in the signal (so it will be called + // when posts occur). If ignorePast is true, it will not be sent the post history. + // + Interest: function (callback,ignorePast,priority) { + callback = USING(callback); + this.listeners.Add(callback,priority); + if (!ignorePast) { + for (var i = 0, m = this.posted.length; i < m; i++) { + callback.reset(); + var result = callback(this.posted[i]); + if (ISCALLBACK(result) && i === this.posted.length-1) {WAITFOR(result,this)} + } + } + return callback; + }, + // + // A listener calls this to remove itself from a signal + // + NoInterest: function (callback) { + this.listeners.Remove(callback); + }, + + // + // Hook a callback to a particular message on this signal + // + MessageHook: function (msg,callback,priority) { + callback = USING(callback); + if (!this.hooks) {this.hooks = {}; this.Interest(["ExecuteHooks",this])} + if (!this.hooks[msg]) {this.hooks[msg] = HOOKS(true)} + this.hooks[msg].Add(callback,priority); + for (var i = 0, m = this.posted.length; i < m; i++) + {if (this.posted[i] == msg) {callback.reset(); callback(this.posted[i])}} + callback.msg = msg; // keep track so we can remove it + return callback; + }, + // + // Execute the message hooks for the given message + // + ExecuteHooks: function (msg) { + var type = (isArray(msg) ? msg[0] : msg); + if (!this.hooks[type]) {return null} + return this.hooks[type].Execute(msg); + }, + // + // Remove a hook safely + // + RemoveHook: function (hook) { + this.hooks[hook.msg].Remove(hook); + } + + },{ + signals: {}, // the named signals + find: function (name) { + if (!SIGNAL.signals[name]) {SIGNAL.signals[name] = new SIGNAL(name)} + return SIGNAL.signals[name]; + } + }); + + // + // The main entry-points + // + BASE.Callback = BASE.CallBack = USING; + BASE.Callback.Delay = DELAY; + BASE.Callback.After = AFTER; + BASE.Callback.Queue = QUEUE; + BASE.Callback.Signal = SIGNAL.find; + BASE.Callback.Hooks = HOOKS; + BASE.Callback.ExecuteHooks = EXECUTEHOOKS; +})("MathJax"); + + +/**********************************************************/ + +(function (BASENAME) { + var BASE = window[BASENAME]; + if (!BASE) {BASE = window[BASENAME] = {}} + + var isSafari2 = (navigator.vendor === "Apple Computer, Inc." && + typeof navigator.vendorSub === "undefined"); + var sheets = 0; // used by Safari2 + + // + // Update sheets count and look up the head object + // + var HEAD = function (head) { + if (document.styleSheets && document.styleSheets.length > sheets) + {sheets = document.styleSheets.length} + if (!head) { + head = document.head || ((document.getElementsByTagName("head"))[0]); + if (!head) {head = document.body} + } + return head; + }; + + // + // Remove scripts that are completed so they don't clutter up the HEAD. + // This runs via setTimeout since IE7 can't remove the script while it is running. + // + var SCRIPTS = []; // stores scripts to be removed after a delay + var REMOVESCRIPTS = function () { + for (var i = 0, m = SCRIPTS.length; i < m; i++) {BASE.Ajax.head.removeChild(SCRIPTS[i])} + SCRIPTS = []; + }; + + var PATH = {}; + PATH[BASENAME] = ""; // empty path gets the root URL + PATH.a11y = '[MathJax]/extensions/a11y'; // a11y extensions + PATH.Contrib = "https://cdn.mathjax.org/mathjax/contrib"; // the third-party extensions + + BASE.Ajax = { + loaded: {}, // files already loaded + loading: {}, // files currently in process of loading + loadHooks: {}, // hooks to call when files are loaded + timeout: 15*1000, // timeout for loading of files (15 seconds) + styleDelay: 1, // delay to use before styles are available + config: { + root: "", // URL of root directory to load from + path: PATH // paths to named URL's (e.g., [MathJax]/...) + }, + params: {}, // filled in from MathJax.js?... + + STATUS: { + OK: 1, // file is loading or did load OK + ERROR: -1 // file timed out during load + }, + + // + // Return a complete URL to a file (replacing any root names) + // + fileURL: function (file) { + var match; + while ((match = file.match(/^\[([-._a-z0-9]+)\]/i)) && PATH.hasOwnProperty(match[1])) { + file = (PATH[match[1]]||this.config.root) + file.substr(match[1].length+2); + } + return file; + }, + // + // Replace root names if URL includes one + // + fileName: function (url) { + var root = this.config.root; + if (url.substr(0,root.length) === root) {url = "["+BASENAME+"]"+url.substr(root.length)} + do { + var recheck = false; + for (var id in PATH) {if (PATH.hasOwnProperty(id) && PATH[id]) { + if (url.substr(0,PATH[id].length) === PATH[id]) { + url = "["+id+"]"+url.substr(PATH[id].length); + recheck = true; + break; + } + }} + } while (recheck); + return url; + }, + // + // Cache-breaking revision number for file + // + fileRev: function (file) { + var V = BASE.cdnFileVersions[file] || BASE.cdnVersion || ''; + if (V) {V = "?V="+V} + return V; + }, + urlRev: function (file) {return this.fileURL(file)+this.fileRev(file)}, + + // + // Load a file if it hasn't been already. + // Make sure the file URL is "safe"? + // + Require: function (file,callback) { + callback = BASE.Callback(callback); var type; + if (file instanceof Object) { + for (var i in file) + {if (file.hasOwnProperty(i)) {type = i.toUpperCase(); file = file[i]}} + } else {type = file.split(/\./).pop().toUpperCase()} + if (this.params.noContrib && file.substr(0,9) === "[Contrib]") { + callback(this.STATUS.ERROR); + } else { + file = this.fileURL(file); + // FIXME: check that URL is OK + if (this.loaded[file]) { + callback(this.loaded[file]); + } else { + var FILE = {}; FILE[type] = file; + this.Load(FILE,callback); + } + } + return callback; + }, + + // + // Load a file regardless of where it is and whether it has + // already been loaded. + // + Load: function (file,callback) { + callback = BASE.Callback(callback); var type; + if (file instanceof Object) { + for (var i in file) + {if (file.hasOwnProperty(i)) {type = i.toUpperCase(); file = file[i]}} + } else {type = file.split(/\./).pop().toUpperCase()} + file = this.fileURL(file); + if (this.loading[file]) { + this.addHook(file,callback); + } else { + this.head = HEAD(this.head); + if (this.loader[type]) {this.loader[type].call(this,file,callback)} + else {throw Error("Can't load files of type "+type)} + } + return callback; + }, + + // + // Register a load hook for a particular file (it will be called when + // loadComplete() is called for that file) + // + LoadHook: function (file,callback,priority) { + callback = BASE.Callback(callback); + if (file instanceof Object) + {for (var i in file) {if (file.hasOwnProperty(i)) {file = file[i]}}} + file = this.fileURL(file); + if (this.loaded[file]) {callback(this.loaded[file])} + else {this.addHook(file,callback,priority)} + return callback; + }, + addHook: function (file,callback,priority) { + if (!this.loadHooks[file]) {this.loadHooks[file] = MathJax.Callback.Hooks()} + this.loadHooks[file].Add(callback,priority); + callback.file = file; + }, + removeHook: function (hook) { + if (this.loadHooks[hook.file]) { + this.loadHooks[hook.file].Remove(hook); + if (!this.loadHooks[hook.file].hooks.length) {delete this.loadHooks[hook.file]} + } + }, + + // + // Used when files are combined in a preloading configuration file + // + Preloading: function () { + for (var i = 0, m = arguments.length; i < m; i++) { + var file = this.fileURL(arguments[i]); + if (!this.loading[file]) {this.loading[file] = {preloaded: true}} + } + }, + + // + // Code used to load the various types of files + // (JS for JavaScript, CSS for style sheets) + // + loader: { + // + // Create a SCRIPT tag to load the file + // + JS: function (file,callback) { + var name = this.fileName(file); + var script = document.createElement("script"); + var timeout = BASE.Callback(["loadTimeout",this,file]); + this.loading[file] = { + callback: callback, + timeout: setTimeout(timeout,this.timeout), + status: this.STATUS.OK, + script: script + }; + // + // Add this to the structure above after it is created to prevent recursion + // when loading the initial localization file (before loading messsage is available) + // + this.loading[file].message = BASE.Message.File(name); + script.onerror = timeout; // doesn't work in IE and no apparent substitute + script.type = "text/javascript"; + script.src = file+this.fileRev(name); + this.head.appendChild(script); + }, + // + // Create a LINK tag to load the style sheet + // + CSS: function (file,callback) { + var name = this.fileName(file); + var link = document.createElement("link"); + link.rel = "stylesheet"; link.type = "text/css"; + link.href = file+this.fileRev(name); + this.loading[file] = { + callback: callback, + message: BASE.Message.File(name), + status: this.STATUS.OK + }; + this.head.appendChild(link); + this.timer.create.call(this,[this.timer.file,file],link); + } + }, + + // + // Timing code for checking when style sheets are available. + // + timer: { + // + // Create the timing callback and start the timing loop. + // We use a delay because some browsers need it to allow the styles + // to be processed. + // + create: function (callback,node) { + callback = BASE.Callback(callback); + if (node.nodeName === "STYLE" && node.styleSheet && + typeof(node.styleSheet.cssText) !== 'undefined') { + callback(this.STATUS.OK); // MSIE processes style immediately, but doesn't set its styleSheet! + } else if (window.chrome && node.nodeName === "LINK") { + callback(this.STATUS.OK); // Chrome doesn't give access to cssRules for stylesheet in + // a link node, so we can't detect when it is loaded. + } else if (isSafari2) { + this.timer.start(this,[this.timer.checkSafari2,sheets++,callback],this.styleDelay); + } else { + this.timer.start(this,[this.timer.checkLength,node,callback],this.styleDelay); + } + return callback; + }, + // + // Start the timer for the given callback checker + // + start: function (AJAX,check,delay,timeout) { + check = BASE.Callback(check); + check.execute = this.execute; check.time = this.time; + check.STATUS = AJAX.STATUS; check.timeout = timeout || AJAX.timeout; + check.delay = check.total = delay || 0; + if (delay) {setTimeout(check,delay)} else {check()} + }, + // + // Increment the time total, increase the delay + // and test if we are past the timeout time. + // + time: function (callback) { + this.total += this.delay; + this.delay = Math.floor(this.delay * 1.05 + 5); + if (this.total >= this.timeout) {callback(this.STATUS.ERROR); return 1} + return 0; + }, + // + // For JS file loads, call the proper routine according to status + // + file: function (file,status) { + if (status < 0) {BASE.Ajax.loadTimeout(file)} else {BASE.Ajax.loadComplete(file)} + }, + // + // Call the hook with the required data + // + execute: function () {this.hook.call(this.object,this,this.data[0],this.data[1])}, + // + // Safari2 doesn't set the link's stylesheet, so we need to look in the + // document.styleSheets array for the new sheet when it is created + // + checkSafari2: function (check,length,callback) { + if (check.time(callback)) return; + if (document.styleSheets.length > length && + document.styleSheets[length].cssRules && + document.styleSheets[length].cssRules.length) + {callback(check.STATUS.OK)} else {setTimeout(check,check.delay)} + }, + // + // Look for the stylesheets rules and check when they are defined + // and no longer of length zero. (This assumes there actually ARE + // some rules in the stylesheet.) + // + checkLength: function (check,node,callback) { + if (check.time(callback)) return; + var isStyle = 0; var sheet = (node.sheet || node.styleSheet); + try {if ((sheet.cssRules||sheet.rules||[]).length > 0) {isStyle = 1}} catch(err) { + if (err.message.match(/protected variable|restricted URI/)) {isStyle = 1} + else if (err.message.match(/Security error/)) { + // Firefox3 gives "Security error" for missing files, so + // can't distinguish that from OK files on remote servers. + // or OK files in different directory from local files. + isStyle = 1; // just say it is OK (can't really tell) + } + } + if (isStyle) { + // Opera 9.6 requires this setTimeout + setTimeout(BASE.Callback([callback,check.STATUS.OK]),0); + } else { + setTimeout(check,check.delay); + } + } + }, + + // + // JavaScript code must call this when they are completely initialized + // (this allows them to perform asynchronous actions before indicating + // that they are complete). + // + loadComplete: function (file) { + file = this.fileURL(file); + var loading = this.loading[file]; + if (loading && !loading.preloaded) { + BASE.Message.Clear(loading.message); + clearTimeout(loading.timeout); + if (loading.script) { + if (SCRIPTS.length === 0) {setTimeout(REMOVESCRIPTS,0)} + SCRIPTS.push(loading.script); + } + this.loaded[file] = loading.status; delete this.loading[file]; + this.addHook(file,loading.callback); + } else { + if (loading) {delete this.loading[file]} + this.loaded[file] = this.STATUS.OK; + loading = {status: this.STATUS.OK} + } + if (!this.loadHooks[file]) {return null} + return this.loadHooks[file].Execute(loading.status); + }, + + // + // If a file fails to load within the timeout period (or the onerror handler + // is called), this routine runs to signal the error condition. + // + loadTimeout: function (file) { + if (this.loading[file].timeout) {clearTimeout(this.loading[file].timeout)} + this.loading[file].status = this.STATUS.ERROR; + this.loadError(file); + this.loadComplete(file); + }, + + // + // The default error hook for file load failures + // + loadError: function (file) { + BASE.Message.Set(["LoadFailed","File failed to load: %1",file],null,2000); + BASE.Hub.signal.Post(["file load error",file]); + }, + + // + // Defines a style sheet from a hash of style declarations (key:value pairs + // where the key is the style selector and the value is a hash of CSS attributes + // and values). + // + Styles: function (styles,callback) { + var styleString = this.StyleString(styles); + if (styleString === "") { + callback = BASE.Callback(callback); + callback(); + } else { + var style = document.createElement("style"); style.type = "text/css"; + this.head = HEAD(this.head); + this.head.appendChild(style); + if (style.styleSheet && typeof(style.styleSheet.cssText) !== 'undefined') { + style.styleSheet.cssText = styleString; + } else { + style.appendChild(document.createTextNode(styleString)); + } + callback = this.timer.create.call(this,callback,style); + } + return callback; + }, + + // + // Create a stylesheet string from a style declaration object + // + StyleString: function (styles) { + if (typeof(styles) === 'string') {return styles} + var string = "", id, style; + for (id in styles) {if (styles.hasOwnProperty(id)) { + if (typeof styles[id] === 'string') { + string += id + " {"+styles[id]+"}\n"; + } else if (BASE.Object.isArray(styles[id])) { + for (var i = 0; i < styles[id].length; i++) { + style = {}; style[id] = styles[id][i]; + string += this.StyleString(style); + } + } else if (id.substr(0,6) === '@media') { + string += id + " {"+this.StyleString(styles[id])+"}\n"; + } else if (styles[id] != null) { + style = []; + for (var name in styles[id]) {if (styles[id].hasOwnProperty(name)) { + if (styles[id][name] != null) + {style[style.length] = name + ': ' + styles[id][name]} + }} + string += id +" {"+style.join('; ')+"}\n"; + } + }} + return string; + } + }; + +})("MathJax"); + +/**********************************************************/ + +MathJax.HTML = { + // + // Create an HTML element with given attributes and content. + // The def parameter is an (optional) object containing key:value pairs + // of the attributes and their values, and contents is an (optional) + // array of strings to be inserted as text, or arrays of the form + // [type,def,contents] that describes an HTML element to be inserted + // into the current element. Thus the contents can describe a complete + // HTML snippet of arbitrary complexity. E.g.: + // + // MathJax.HTML.Element("span",{id:"mySpan",style{"font-style":"italic"}},[ + // "(See the ",["a",{href:"http://www.mathjax.org/"},["MathJax home page"]], + // " for more details.)"]); + // + Element: function (type,def,contents) { + var obj = document.createElement(type), id; + if (def) { + if (def.hasOwnProperty("style")) { + var style = def.style; def.style = {}; + for (id in style) {if (style.hasOwnProperty(id)) + {def.style[id.replace(/-([a-z])/g,this.ucMatch)] = style[id]}} + } + MathJax.Hub.Insert(obj,def); + for (id in def) { + if (id === "role" || id.substr(0,5) === "aria-") obj.setAttribute(id,def[id]); + } + } + if (contents) { + if (!MathJax.Object.isArray(contents)) {contents = [contents]} + for (var i = 0, m = contents.length; i < m; i++) { + if (MathJax.Object.isArray(contents[i])) { + obj.appendChild(this.Element(contents[i][0],contents[i][1],contents[i][2])); + } else if (type === "script") { // IE throws an error if script is added as a text node + this.setScript(obj, contents[i]); + } else { + obj.appendChild(document.createTextNode(contents[i])); + } + } + } + return obj; + }, + ucMatch: function (match,c) {return c.toUpperCase()}, + addElement: function (span,type,def,contents) {return span.appendChild(this.Element(type,def,contents))}, + TextNode: function (text) {return document.createTextNode(text)}, + addText: function (span,text) {return span.appendChild(this.TextNode(text))}, + + // + // Set and get the text of a script + // + setScript: function (script,text) { + if (this.setScriptBug) {script.text = text} else { + while (script.firstChild) {script.removeChild(script.firstChild)} + this.addText(script,text); + } + }, + getScript: function (script) { + var text = (script.text === "" ? script.innerHTML : script.text); + return text.replace(/^\s+/,"").replace(/\s+$/,""); + }, + + // + // Manage cookies + // + Cookie: { + prefix: "mjx", + expires: 365, + + // + // Save an object as a named cookie + // + Set: function (name,def) { + var keys = []; + if (def) { + for (var id in def) {if (def.hasOwnProperty(id)) { + keys.push(id+":"+def[id].toString().replace(/&/g,"&&")); + }} + } + var cookie = this.prefix+"."+name+"="+escape(keys.join('&;')); + if (this.expires) { + var time = new Date(); time.setDate(time.getDate() + this.expires); + cookie += '; expires='+time.toGMTString(); + } + try {document.cookie = cookie+"; path=/"} catch (err) {} // ignore errors saving cookies + }, + + // + // Get the contents of a named cookie and incorporate + // it into the given object (or return a fresh one) + // + Get: function (name,obj) { + if (!obj) {obj = {}} + var pattern = new RegExp("(?:^|;\\s*)"+this.prefix+"\\."+name+"=([^;]*)(?:;|$)"); + var match; + try {match = pattern.exec(document.cookie)} catch (err) {}; // ignore errors reading cookies + if (match && match[1] !== "") { + var keys = unescape(match[1]).split('&;'); + for (var i = 0, m = keys.length; i < m; i++) { + match = keys[i].match(/([^:]+):(.*)/); + var value = match[2].replace(/&&/g,'&'); + if (value === "true") {value = true} else if (value === "false") {value = false} + else if (value.match(/^-?(\d+(\.\d+)?|\.\d+)$/)) {value = parseFloat(value)} + obj[match[1]] = value; + } + } + return obj; + } + } + +}; + + +/**********************************************************/ + +MathJax.Localization = { + + locale: "en", + directory: "[MathJax]/localization", + strings: { + // Currently, this list is not modified by the MathJax-i18n script. You can + // run the following command in MathJax/unpacked/localization to update it: + // + // find . -name "*.js" | xargs grep menuTitle\: | grep -v qqq | sed 's/^\.\/\(.*\)\/.*\.js\: / "\1"\: \{/' | sed 's/,$/\},/' | sed 's/"English"/"English", isLoaded: true/' > tmp ; sort tmp > tmp2 ; sed '$ s/,$//' tmp2 ; rm tmp* + // + // This only takes languages with localization data so you must also add + // the languages that use a remap but are not translated at all. + // + "ast": {menuTitle: "asturianu"}, + "bg": {menuTitle: "\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438"}, + "bcc": {menuTitle: "\u0628\u0644\u0648\u0686\u06CC"}, + "br": {menuTitle: "brezhoneg"}, + "ca": {menuTitle: "catal\u00E0"}, + "cdo": {menuTitle: "M\u00ECng-d\u0115\u0324ng-ng\u1E73\u0304"}, + "cs": {menuTitle: "\u010De\u0161tina"}, + "da": {menuTitle: "dansk"}, + "de": {menuTitle: "Deutsch"}, + "diq": {menuTitle: "Zazaki"}, + "en": {menuTitle: "English", isLoaded: true}, + "eo": {menuTitle: "Esperanto"}, + "es": {menuTitle: "espa\u00F1ol"}, + "fa": {menuTitle: "\u0641\u0627\u0631\u0633\u06CC"}, + "fi": {menuTitle: "suomi"}, + "fr": {menuTitle: "fran\u00E7ais"}, + "gl": {menuTitle: "galego"}, + "he": {menuTitle: "\u05E2\u05D1\u05E8\u05D9\u05EA"}, + "ia": {menuTitle: "interlingua"}, + "it": {menuTitle: "italiano"}, + "ja": {menuTitle: "\u65E5\u672C\u8A9E"}, + "kn": {menuTitle: "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1"}, + "ko": {menuTitle: "\uD55C\uAD6D\uC5B4"}, + "lb": {menuTitle: "L\u00EBtzebuergesch"}, + "lki": {menuTitle: "\u0644\u06D5\u06A9\u06CC"}, + "lt": {menuTitle: "lietuvi\u0173"}, + "mk": {menuTitle: "\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438"}, + "nl": {menuTitle: "Nederlands"}, + "oc": {menuTitle: "occitan"}, + "pl": {menuTitle: "polski"}, + "pt": {menuTitle: "portugus\u00EA"}, + "pt-br": {menuTitle: "portugu\u00EAs do Brasil"}, + "ru": {menuTitle: "\u0440\u0443\u0441\u0441\u043A\u0438\u0439"}, + "sco": {menuTitle: "Scots"}, + "scn": {menuTitle: "sicilianu"}, + "sl": {menuTitle: "sloven\u0161\u010Dina"}, + "sv": {menuTitle: "svenska"}, + "tr": {menuTitle: "T\u00FCrk\u00E7e"}, + "uk": {menuTitle: "\u0443\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"}, + "vi": {menuTitle: "Ti\u1EBFng Vi\u1EC7t"}, + "zh-hans": {menuTitle: "\u4E2D\u6587\uFF08\u7B80\u4F53\uFF09"} + }, + + // + // The pattern for substitution escapes: + // %n or %{n} or %{plural:%n|option1|option1|...} or %c + // + pattern: /%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g, + + SPLIT: ("axb".split(/(x)/).length === 3 ? + function (string,regex) {return string.split(regex)} : + // + // IE8 and below don't do split() correctly when the pattern includes + // parentheses (the split should include the matched exrepssions). + // So implement it by hand here. + // + function (string,regex) { + var result = [], match, last = 0; + regex.lastIndex = 0; + while ((match = regex.exec(string))) { + result.push(string.substr(last,match.index-last)); + result.push.apply(result,match.slice(1)); + last = match.index + match[0].length; + } + result.push(string.substr(last)); + return result; + }), + + _: function (id,phrase) { + if (MathJax.Object.isArray(phrase)) {return this.processSnippet(id,phrase)} + return this.processString(this.lookupPhrase(id,phrase),[].slice.call(arguments,2)); + }, + + processString: function (string,args,domain) { + // + // Process arguments for substitution + // If the argument is a snippet (and we are processing snippets) do so, + // Otherwise, if it is a number, convert it for the lacale + // + var i, m, isArray = MathJax.Object.isArray; + for (i = 0, m = args.length; i < m; i++) { + if (domain && isArray(args[i])) {args[i] = this.processSnippet(domain,args[i])} + } + // + // Split string at escapes and process them individually + // + var parts = this.SPLIT(string,this.pattern); + for (i = 1, m = parts.length; i < m; i += 2) { + var c = parts[i].charAt(0); // first char will be { or \d or a char to be kept literally + if (c >= "0" && c <= "9") { // %n + parts[i] = args[parts[i]-1]; + if (typeof parts[i] === "number") parts[i] = this.number(parts[i]); + } else if (c === "{") { // %{n} or %{plural:%n|...} + c = parts[i].substr(1); + if (c >= "0" && c <= "9") { // %{n} + parts[i] = args[parts[i].substr(1,parts[i].length-2)-1]; + if (typeof parts[i] === "number") parts[i] = this.number(parts[i]); + } else { // %{plural:%n|...} + var match = parts[i].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/); + if (match) { + if (match[1] === "plural") { + var n = args[match[2]-1]; + if (typeof n === "undefined") { + parts[i] = "???"; // argument doesn't exist + } else { + n = this.plural(n) - 1; // index of the form to use + var plurals = match[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/); // the parts (replacing %| with a special character) + if (n >= 0 && n < plurals.length) { + parts[i] = this.processString(plurals[n].replace(/\uEFEF/g,"|"),args,domain); + } else { + parts[i] = "???"; // no string for this index + } + } + } else {parts[i] = "%"+parts[i]} // not "plural", put back the % and leave unchanged + } + } + } + if (parts[i] == null) {parts[i] = "???"} + } + // + // If we are not forming a snippet, return the completed string + // + if (!domain) {return parts.join("")} + // + // We need to return an HTML snippet, so buld it from the + // broken up string with inserted parts (that could be snippets) + // + var snippet = [], part = ""; + for (i = 0; i < m; i++) { + part += parts[i]; i++; // add the string and move on to substitution result + if (i < m) { + if (isArray(parts[i])) { // substitution was a snippet + snippet.push(part); // add the accumulated string + snippet = snippet.concat(parts[i]); // concatenate the substution snippet + part = ""; // start accumulating a new string + } else { // substitution was a string + part += parts[i]; // add to accumulating string + } + } + } + if (part !== "") {snippet.push(part)} // add final string + return snippet; + }, + + processSnippet: function (domain,snippet) { + var result = []; // the new snippet + // + // Look through the original snippet for + // strings or snippets to translate + // + for (var i = 0, m = snippet.length; i < m; i++) { + if (MathJax.Object.isArray(snippet[i])) { + // + // This could be a sub-snippet: + // ["tag"] or ["tag",{properties}] or ["tag",{properties},snippet] + // Or it could be something to translate: + // [id,string,args] or [domain,snippet] + var data = snippet[i]; + if (typeof data[1] === "string") { // [id,string,args] + var id = data[0]; if (!MathJax.Object.isArray(id)) {id = [domain,id]} + var phrase = this.lookupPhrase(id,data[1]); + result = result.concat(this.processMarkdown(phrase,data.slice(2),domain)); + } else if (MathJax.Object.isArray(data[1])) { // [domain,snippet] + result = result.concat(this.processSnippet.apply(this,data)); + } else if (data.length >= 3) { // ["tag",{properties},snippet] + result.push([data[0],data[1],this.processSnippet(domain,data[2])]); + } else { // ["tag"] or ["tag",{properties}] + result.push(snippet[i]); + } + } else { // a string + result.push(snippet[i]); + } + } + return result; + }, + + markdownPattern: /(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/, + // %c or *bold*, **italics**, ***bold-italics***, or `code`, or [link](url) + + processMarkdown: function (phrase,args,domain) { + var result = [], data; + // + // Split the string by the Markdown pattern + // (the text blocks are separated by + // c,stars,star-text,backtics,code-text,link-text,URL). + // Start with teh first text string from the split. + // + var parts = phrase.split(this.markdownPattern); + var string = parts[0]; + // + // Loop through the matches and process them + // + for (var i = 1, m = parts.length; i < m; i += 8) { + if (parts[i+1]) { // stars (for bold/italic) + // + // Select the tag to use by number of stars (three stars requires two tags) + // + data = this.processString(parts[i+2],args,domain); + if (!MathJax.Object.isArray(data)) {data = [data]} + data = [["b","i","i"][parts[i+1].length-1],{},data]; // number of stars determines type + if (parts[i+1].length === 3) {data = ["b",{},data]} // bold-italic + } else if (parts[i+3]) { // backtics (for code) + // + // Remove one leading or trailing space, and process substitutions + // Make a tag + // + data = this.processString(parts[i+4].replace(/^\s/,"").replace(/\s$/,""),args,domain); + if (!MathJax.Object.isArray(data)) {data = [data]} + data = ["code",{},data]; + } else if (parts[i+5]) { // hyperlink + // + // Process the link text, and make an tag with the URL + // + data = this.processString(parts[i+5],args,domain); + if (!MathJax.Object.isArray(data)) {data = [data]} + data = ["a",{href:this.processString(parts[i+6],args),target:"_blank"},data]; + } else { + // + // Escaped character (%c) gets added into the string. + // + string += parts[i]; data = null; + } + // + // If there is a tag to insert, + // Add any pending string, then push the tag + // + if (data) { + result = this.concatString(result,string,args,domain); + result.push(data); string = ""; + } + // + // Process the string that follows matches pattern + // + if (parts[i+7] !== "") {string += parts[i+7]} + }; + // + // Add any pending string and return the resulting snippet + // + result = this.concatString(result,string,args,domain); + return result; + }, + concatString: function (result,string,args,domain) { + if (string != "") { + // + // Process the substutions. + // If the result is not a snippet, turn it into one. + // Then concatenate the snippet to the current one + // + string = this.processString(string,args,domain); + if (!MathJax.Object.isArray(string)) {string = [string]} + result = result.concat(string); + } + return result; + }, + + lookupPhrase: function (id,phrase,domain) { + // + // Get the domain and messageID + // + if (!domain) {domain = "_"} + if (MathJax.Object.isArray(id)) {domain = (id[0] || "_"); id = (id[1] || "")} + // + // Check if the data is available and if not, + // load it and throw a restart error so the calling + // code can wait for the load and try again. + // + var load = this.loadDomain(domain); + if (load) {MathJax.Hub.RestartAfter(load)} + // + // Look up the message in the localization data + // (if not found, the original English is used) + // + var localeData = this.strings[this.locale]; + if (localeData) { + if (localeData.domains && domain in localeData.domains) { + var domainData = localeData.domains[domain]; + if (domainData.strings && id in domainData.strings) + {phrase = domainData.strings[id]} + } + } + // + // return the translated phrase + // + return phrase; + }, + + // + // Load a langauge data file from the proper + // directory and file. + // + loadFile: function (file,data,callback) { + callback = MathJax.Callback(callback); + file = (data.file || file); // the data's file name or the default name + if (!file.match(/\.js$/)) {file += ".js"} // add .js if needed + // + // Add the directory if the file doesn't + // contain a full URL already. + // + if (!file.match(/^([a-z]+:|\[MathJax\])/)) { + var dir = (this.strings[this.locale].directory || + this.directory + "/" + this.locale || + "[MathJax]/localization/" + this.locale); + file = dir + "/" + file; + } + // + // Load the file and mark the data as loaded (even if it + // failed to load, so we don't continue to try to load it + // over and over). + // + var load = MathJax.Ajax.Require(file,function () {data.isLoaded = true; return callback()}); + // + // Return the callback if needed, otherwise null. + // + return (load.called ? null : load); + }, + + // + // Check to see if the localization data are loaded + // for the given domain; if not, load the data file, + // and return a callback for the loading operation. + // Otherwise return null (data are loaded). + // + loadDomain: function (domain,callback) { + var load, localeData = this.strings[this.locale]; + if (localeData) { + if (!localeData.isLoaded) { + load = this.loadFile(this.locale,localeData); + if (load) { + return MathJax.Callback.Queue( + load,["loadDomain",this,domain] // call again to load domain + ).Push(callback||{}); + } + } + if (localeData.domains && domain in localeData.domains) { + var domainData = localeData.domains[domain]; + if (!domainData.isLoaded) { + load = this.loadFile(domain,domainData); + if (load) {return MathJax.Callback.Queue(load).Push(callback)} + } + } + } + // localization data are loaded, so just do the callback + return MathJax.Callback(callback)(); + }, + + // + // Perform a function, properly handling + // restarts due to localization file loads. + // + // Note that this may return before the function + // has been called successfully, so you should + // consider fn as running asynchronously. (Callbacks + // can be used to synchronize it with other actions.) + // + Try: function (fn) { + fn = MathJax.Callback(fn); fn.autoReset = true; + try {fn()} catch (err) { + if (!err.restart) {throw err} + MathJax.Callback.After(["Try",this,fn],err.restart); + } + }, + + // + // Reset the current language + // + resetLocale: function(locale) { + // Selection algorithm: + // 1) Downcase locale name (e.g. "en-US" => "en-us") + // 2) Try a parent language (e.g. "en-us" => "en") + // 3) Try the fallback specified in the data (e.g. "pt" => "pt-br") + // 4) Otherwise don't change the locale. + if (!locale) return; + locale = locale.toLowerCase(); + while (!this.strings[locale]) { + var dashPos = locale.lastIndexOf("-"); + if (dashPos === -1) return; + locale = locale.substring(0, dashPos); + } + var remap = this.strings[locale].remap; + this.locale = remap ? remap : locale; + }, + + // + // Set the current language + // + setLocale: function(locale) { + this.resetLocale(locale); + if (MathJax.Menu) {this.loadDomain("MathMenu")} + }, + + // + // Add or update a language or domain + // + addTranslation: function (locale,domain,definition) { + var data = this.strings[locale], isNew = false; + if (!data) {data = this.strings[locale] = {}; isNew = true} + if (!data.domains) {data.domains = {}} + if (domain) { + if (!data.domains[domain]) {data.domains[domain] = {}} + data = data.domains[domain]; + } + MathJax.Hub.Insert(data,definition); + if (isNew && MathJax.Menu.menu) {MathJax.Menu.CreateLocaleMenu()} + }, + + // + // Set CSS for an element based on font requirements + // + setCSS: function (div) { + var locale = this.strings[this.locale]; + if (locale) { + if (locale.fontFamily) {div.style.fontFamily = locale.fontFamily} + if (locale.fontDirection) { + div.style.direction = locale.fontDirection; + if (locale.fontDirection === "rtl") {div.style.textAlign = "right"} + } + } + return div; + }, + + // + // Get the language's font family or direction + // + fontFamily: function () { + var locale = this.strings[this.locale]; + return (locale ? locale.fontFamily : null); + }, + fontDirection: function () { + var locale = this.strings[this.locale]; + return (locale ? locale.fontDirection : null); + }, + + // + // Get the language's plural index for a number + // + plural: function (n) { + var locale = this.strings[this.locale]; + if (locale && locale.plural) {return locale.plural(n)} + // default + if (n == 1) {return 1} // one + return 2; // other + }, + + // + // Convert a number to language-specific form + // + number: function(n) { + var locale = this.strings[this.locale]; + if (locale && locale.number) {return locale.number(n)} + // default + return n; + } +}; + + +/**********************************************************/ + +MathJax.Message = { + ready: false, // used to tell when the styles are available + log: [{}], current: null, + textNodeBug: (navigator.vendor === "Apple Computer, Inc." && + typeof navigator.vendorSub === "undefined") || + (window.hasOwnProperty && window.hasOwnProperty("konqueror")), // Konqueror displays some gibberish with text.nodeValue = "..." + + styles: { + "#MathJax_Message": { + position: "fixed", left: "1px", bottom: "2px", + 'background-color': "#E6E6E6", border: "1px solid #959595", + margin: "0px", padding: "2px 8px", + 'z-index': "102", color: "black", 'font-size': "80%", + width: "auto", 'white-space': "nowrap" + }, + + "#MathJax_MSIE_Frame": { + position: "absolute", + top:0, left: 0, width: "0px", 'z-index': 101, + border: "0px", margin: "0px", padding: "0px" + } + }, + + browsers: { + MSIE: function (browser) { + MathJax.Message.msieFixedPositionBug = ((document.documentMode||0) < 7); + if (MathJax.Message.msieFixedPositionBug) + {MathJax.Hub.config.styles["#MathJax_Message"].position = "absolute"} + MathJax.Message.quirks = (document.compatMode === "BackCompat"); + }, + Chrome: function (browser) { + MathJax.Hub.config.styles["#MathJax_Message"].bottom = "1.5em"; + MathJax.Hub.config.styles["#MathJax_Message"].left = "1em"; + } + }, + + Init: function (styles) { + if (styles) {this.ready = true} + if (!document.body || !this.ready) {return false} + // + // ASCIIMathML replaces the entire page with a copy of itself (@#!#%@!!) + // so check that this.div is still part of the page, otherwise look up + // the copy and use that. + // + if (this.div && this.div.parentNode == null) { + this.div = document.getElementById("MathJax_Message"); + if (this.div) {this.text = this.div.firstChild} + } + if (!this.div) { + var frame = document.body; + if (this.msieFixedPositionBug && window.attachEvent) { + frame = this.frame = this.addDiv(document.body); frame.removeAttribute("id"); + frame.style.position = "absolute"; + frame.style.border = frame.style.margin = frame.style.padding = "0px"; + frame.style.zIndex = "101"; frame.style.height = "0px"; + frame = this.addDiv(frame); + frame.id = "MathJax_MSIE_Frame"; + window.attachEvent("onscroll",this.MoveFrame); + window.attachEvent("onresize",this.MoveFrame); + this.MoveFrame(); + } + this.div = this.addDiv(frame); this.div.style.display = "none"; + this.text = this.div.appendChild(document.createTextNode("")); + } + return true; + }, + + addDiv: function (parent) { + var div = document.createElement("div"); + div.id = "MathJax_Message"; + if (parent.firstChild) {parent.insertBefore(div,parent.firstChild)} + else {parent.appendChild(div)} + return div; + }, + + MoveFrame: function () { + var body = (MathJax.Message.quirks ? document.body : document.documentElement); + var frame = MathJax.Message.frame; + frame.style.left = body.scrollLeft + 'px'; + frame.style.top = body.scrollTop + 'px'; + frame.style.width = body.clientWidth + 'px'; + frame = frame.firstChild; + frame.style.height = body.clientHeight + 'px'; + }, + + localize: function (message) { + return MathJax.Localization._(message,message); + }, + + filterText: function (text,n,id) { + if (MathJax.Hub.config.messageStyle === "simple") { + if (id === "LoadFile") { + if (!this.loading) {this.loading = this.localize("Loading") + " "} + text = this.loading; this.loading += "."; + } else if (id === "ProcessMath") { + if (!this.processing) {this.processing = this.localize("Processing") + " "} + text = this.processing; this.processing += "."; + } else if (id === "TypesetMath") { + if (!this.typesetting) {this.typesetting = this.localize("Typesetting") + " "} + text = this.typesetting; this.typesetting += "."; + } + } + return text; + }, + + clearCounts: function () { + delete this.loading; + delete this.processing; + delete this.typesetting; + }, + + Set: function (text,n,clearDelay) { + if (n == null) {n = this.log.length; this.log[n] = {}} + // + // Translate message if it is [id,message,arguments] + // + var id = ""; + if (MathJax.Object.isArray(text)) { + id = text[0]; if (MathJax.Object.isArray(id)) {id = id[1]} + // + // Localization._() will throw a restart error if a localization file + // needs to be loaded, so trap that and redo the Set() call + // after it is loaded. + // + try { + text = MathJax.Localization._.apply(MathJax.Localization,text); + } catch (err) { + if (!err.restart) {throw err} + if (!err.restart.called) { + // + // Mark it so we can tell if the Clear() comes before the message is displayed + // + if (this.log[n].restarted == null) {this.log[n].restarted = 0} + this.log[n].restarted++; delete this.log[n].cleared; + MathJax.Callback.After(["Set",this,text,n,clearDelay],err.restart); + return n; + } + } + } + // + // Clear the timout timer. + // + if (this.timer) {clearTimeout(this.timer); delete this.timer} + // + // Save the message and filtered message. + // + this.log[n].text = text; this.log[n].filteredText = text = this.filterText(text,n,id); + // + // Hook the message into the message list so we can tell + // what message to put up when this one is removed. + // + if (typeof(this.log[n].next) === "undefined") { + this.log[n].next = this.current; + if (this.current != null) {this.log[this.current].prev = n} + this.current = n; + } + // + // Show the message if it is the currently active one. + // + if (this.current === n && MathJax.Hub.config.messageStyle !== "none") { + if (this.Init()) { + if (this.textNodeBug) {this.div.innerHTML = text} else {this.text.nodeValue = text} + this.div.style.display = ""; + if (this.status) {window.status = ""; delete this.status} + } else { + window.status = text; + this.status = true; + } + } + // + // Check if the message was resetarted to load a localization file + // and if it has been cleared in the meanwhile. + // + if (this.log[n].restarted) { + if (this.log[n].cleared) {clearDelay = 0} + if (--this.log[n].restarted === 0) {delete this.log[n].cleared} + } + // + // Check if we need to clear the message automatically. + // + if (clearDelay) {setTimeout(MathJax.Callback(["Clear",this,n]),clearDelay)} + else if (clearDelay == 0) {this.Clear(n,0)} + // + // Return the message number. + // + return n; + }, + + Clear: function (n,delay) { + // + // Detatch the message from the active list. + // + if (this.log[n].prev != null) {this.log[this.log[n].prev].next = this.log[n].next} + if (this.log[n].next != null) {this.log[this.log[n].next].prev = this.log[n].prev} + // + // If it is the current message, get the next one to show. + // + if (this.current === n) { + this.current = this.log[n].next; + if (this.text) { + if (this.div.parentNode == null) {this.Init()} // see ASCIIMathML comments above + if (this.current == null) { + // + // If there are no more messages, remove the message box. + // + if (this.timer) {clearTimeout(this.timer); delete this.timer} + if (delay == null) {delay = 600} + if (delay === 0) {this.Remove()} + else {this.timer = setTimeout(MathJax.Callback(["Remove",this]),delay)} + } else if (MathJax.Hub.config.messageStyle !== "none") { + // + // If there is an old message, put it in place + // + if (this.textNodeBug) {this.div.innerHTML = this.log[this.current].filteredText} + else {this.text.nodeValue = this.log[this.current].filteredText} + } + if (this.status) {window.status = ""; delete this.status} + } else if (this.status) { + window.status = (this.current == null ? "" : this.log[this.current].text); + } + } + // + // Clean up the log data no longer needed + // + delete this.log[n].next; delete this.log[n].prev; + delete this.log[n].filteredText; + // + // If this is a restarted localization message, mark that it has been cleared + // while waiting for the file to load. + // + if (this.log[n].restarted) {this.log[n].cleared = true} + }, + + Remove: function () { + // FIXME: do a fade out or something else interesting? + this.text.nodeValue = ""; + this.div.style.display = "none"; + }, + + File: function (file) { + return this.Set(["LoadFile","Loading %1",file],null,null); + }, + + Log: function () { + var strings = []; + for (var i = 1, m = this.log.length; i < m; i++) {strings[i] = this.log[i].text} + return strings.join("\n"); + } + +}; + +/**********************************************************/ + +MathJax.Hub = { + config: { + root: "", + config: [], // list of configuration files to load + styleSheets: [], // list of CSS files to load + styles: { // styles to generate in-line + ".MathJax_Preview": {color: "#888"} + }, + jax: [], // list of input and output jax to load + extensions: [], // list of extensions to load + preJax: null, // pattern to remove from before math script tag + postJax: null, // pattern to remove from after math script tag + displayAlign: 'center', // how to align displayed equations (left, center, right) + displayIndent: '0', // indentation for displayed equations (when not centered) + preRemoveClass: 'MathJax_Preview', // class of objects to remove preceeding math script + showProcessingMessages: true, // display "Processing math: nn%" messages or not + messageStyle: "normal", // set to "none" or "simple" (for "Loading..." and "Processing...") + delayStartupUntil: "none", // set to "onload" to delay setup until the onload handler runs + // set to "configured" to delay startup until MathJax.Hub.Configured() is called + // set to a Callback to wait for before continuing with the startup + skipStartupTypeset: false, // set to true to skip PreProcess and Process during startup + elements: [], // array of elements to process when none is given explicitly + positionToHash: true, // after initial typeset pass, position to #hash location? + + showMathMenu: true, // attach math context menu to typeset math? + showMathMenuMSIE: true, // separtely determine if MSIE should have math menu + // (since the code for that is a bit delicate) + + menuSettings: { + zoom: "None", // when to do MathZoom + CTRL: false, // require CTRL for MathZoom? + ALT: false, // require Alt or Option? + CMD: false, // require CMD? + Shift: false, // require Shift? + discoverable: false, // make math menu discoverable on hover? + zscale: "200%", // the scaling factor for MathZoom + renderer: null, // set when Jax are loaded + font: "Auto", // what font HTML-CSS should use + context: "MathJax", // or "Browser" for pass-through to browser menu + locale: null, // the language to use for messages + mpContext: false, // true means pass menu events to MathPlayer in IE + mpMouse: false, // true means pass mouse events to MathPlayer in IE + texHints: true, // include class names for TeXAtom elements + FastPreview: null, // use PreviewHTML output as preview? + assistiveMML: null, // include hidden MathML for screen readers? + inTabOrder: true, // set to false if math elements should be included in the tabindex + semantics: false // add semantics tag with original form in MathML output + }, + + errorSettings: { + // localized HTML snippet structure for message to use + message: ["[",["MathProcessingError","Math Processing Error"],"]"], + style: {color: "#CC0000", "font-style":"italic"} // style for message + }, + + ignoreMMLattributes: {} // attributes not to copy to HTML-CSS or SVG output + // from MathML input (in addition to the ones in MML.nocopyAttributes). + // An id set to true will be ignored, one set to false will + // be allowed (even if other criteria normally would prevent + // it from being copied); use false carefully! + }, + + preProcessors: MathJax.Callback.Hooks(true), // list of callbacks for preprocessing (initialized by extensions) + inputJax: {}, // mime-type mapped to input jax (by registration) + outputJax: {order:{}}, // mime-type mapped to output jax list (by registration) + + processSectionDelay: 50, // pause between input and output phases of processing + processUpdateTime: 250, // time between screen updates when processing math (milliseconds) + processUpdateDelay: 10, // pause between screen updates to allow other processing (milliseconds) + + signal: MathJax.Callback.Signal("Hub"), // Signal used for Hub events + + Config: function (def) { + this.Insert(this.config,def); + if (this.config.Augment) {this.Augment(this.config.Augment)} + }, + CombineConfig: function (name,def) { + var config = this.config, id, parent; name = name.split(/\./); + for (var i = 0, m = name.length; i < m; i++) { + id = name[i]; if (!config[id]) {config[id] = {}} + parent = config; config = config[id]; + } + parent[id] = config = this.Insert(def,config); + return config; + }, + + Register: { + PreProcessor: function () {return MathJax.Hub.preProcessors.Add.apply(MathJax.Hub.preProcessors,arguments)}, + MessageHook: function () {return MathJax.Hub.signal.MessageHook.apply(MathJax.Hub.signal,arguments)}, + StartupHook: function () {return MathJax.Hub.Startup.signal.MessageHook.apply(MathJax.Hub.Startup.signal,arguments)}, + LoadHook: function () {return MathJax.Ajax.LoadHook.apply(MathJax.Ajax,arguments)} + }, + UnRegister: { + PreProcessor: function (hook) {MathJax.Hub.preProcessors.Remove(hook)}, + MessageHook: function (hook) {MathJax.Hub.signal.RemoveHook(hook)}, + StartupHook: function (hook) {MathJax.Hub.Startup.signal.RemoveHook(hook)}, + LoadHook: function (hook) {MathJax.Ajax.removeHook(hook)} + }, + + getAllJax: function (element) { + var jax = [], scripts = this.elementScripts(element); + for (var i = 0, m = scripts.length; i < m; i++) { + if (scripts[i].MathJax && scripts[i].MathJax.elementJax) + {jax.push(scripts[i].MathJax.elementJax)} + } + return jax; + }, + + getJaxByType: function (type,element) { + var jax = [], scripts = this.elementScripts(element); + for (var i = 0, m = scripts.length; i < m; i++) { + if (scripts[i].MathJax && scripts[i].MathJax.elementJax && + scripts[i].MathJax.elementJax.mimeType === type) + {jax.push(scripts[i].MathJax.elementJax)} + } + return jax; + }, + + getJaxByInputType: function (type,element) { + var jax = [], scripts = this.elementScripts(element); + for (var i = 0, m = scripts.length; i < m; i++) { + if (scripts[i].MathJax && scripts[i].MathJax.elementJax && + scripts[i].type && scripts[i].type.replace(/ *;(.|\s)*/,"") === type) + {jax.push(scripts[i].MathJax.elementJax)} + } + return jax; + }, + + getJaxFor: function (element) { + if (typeof(element) === 'string') {element = document.getElementById(element)} + if (element && element.MathJax) {return element.MathJax.elementJax} + if (this.isMathJaxNode(element)) { + if (!element.isMathJax) {element = element.firstChild} // for NativeMML output + while (element && !element.jaxID) {element = element.parentNode} + if (element) {return MathJax.OutputJax[element.jaxID].getJaxFromMath(element)} + } + return null; + }, + + isJax: function (element) { + if (typeof(element) === 'string') {element = document.getElementById(element)} + if (this.isMathJaxNode(element)) {return 1} + if (element && (element.tagName||"").toLowerCase() === 'script') { + if (element.MathJax) + {return (element.MathJax.state === MathJax.ElementJax.STATE.PROCESSED ? 1 : -1)} + if (element.type && this.inputJax[element.type.replace(/ *;(.|\s)*/,"")]) {return -1} + } + return 0; + }, + isMathJaxNode: function (element) { + return !!element && (element.isMathJax || (element.className||"") === "MathJax_MathML"); + }, + + setRenderer: function (renderer,type) { + if (!renderer) return; + if (!MathJax.OutputJax[renderer]) { + this.config.menuSettings.renderer = ""; + var file = "[MathJax]/jax/output/"+renderer+"/config.js"; + return MathJax.Ajax.Require(file,["setRenderer",this,renderer,type]); + } else { + this.config.menuSettings.renderer = renderer; + if (type == null) {type = "jax/mml"} + var jax = this.outputJax; + if (jax[type] && jax[type].length) { + if (renderer !== jax[type][0].id) { + jax[type].unshift(MathJax.OutputJax[renderer]); + return this.signal.Post(["Renderer Selected",renderer]); + } + } + return null; + } + }, + + Queue: function () { + return this.queue.Push.apply(this.queue,arguments); + }, + + Typeset: function (element,callback) { + if (!MathJax.isReady) return null; + var ec = this.elementCallback(element,callback); + if (ec.count) { + var queue = MathJax.Callback.Queue( + ["PreProcess",this,ec.elements], + ["Process",this,ec.elements] + ); + } + return queue.Push(ec.callback); + }, + + PreProcess: function (element,callback) { + var ec = this.elementCallback(element,callback); + var queue = MathJax.Callback.Queue(); + if (ec.count) { + var elements = (ec.count === 1 ? [ec.elements] : ec.elements); + queue.Push(["Post",this.signal,["Begin PreProcess",ec.elements]]); + for (var i = 0, m = elements.length; i < m; i++) { + if (elements[i]) {queue.Push(["Execute",this.preProcessors,elements[i]])} + } + queue.Push(["Post",this.signal,["End PreProcess",ec.elements]]); + } + return queue.Push(ec.callback); + }, + + Process: function (element,callback) {return this.takeAction("Process",element,callback)}, + Update: function (element,callback) {return this.takeAction("Update",element,callback)}, + Reprocess: function (element,callback) {return this.takeAction("Reprocess",element,callback)}, + Rerender: function (element,callback) {return this.takeAction("Rerender",element,callback)}, + + takeAction: function (action,element,callback) { + var ec = this.elementCallback(element,callback); + var elements = ec.elements; + var queue = MathJax.Callback.Queue(["Clear",this.signal]); + var state = { + scripts: [], // filled in by prepareScripts + start: new Date().getTime(), // timer for processing messages + i: 0, j: 0, // current script, current jax + jax: {}, // scripts grouped by output jax + jaxIDs: [] // id's of jax used + }; + if (ec.count) { + var delay = ["Delay",MathJax.Callback,this.processSectionDelay]; + if (!delay[2]) {delay = {}} + queue.Push( + ["clearCounts",MathJax.Message], + ["Post",this.signal,["Begin "+action,elements]], + ["Post",this.signal,["Begin Math",elements,action]], + ["prepareScripts",this,action,elements,state], + ["Post",this.signal,["Begin Math Input",elements,action]], + ["processInput",this,state], + ["Post",this.signal,["End Math Input",elements,action]], + delay, + ["prepareOutput",this,state,"preProcess"], + delay, + ["Post",this.signal,["Begin Math Output",elements,action]], + ["processOutput",this,state], + ["Post",this.signal,["End Math Output",elements,action]], + delay, + ["prepareOutput",this,state,"postProcess"], + delay, + ["Post",this.signal,["End Math",elements,action]], + ["Post",this.signal,["End "+action,elements]], + ["clearCounts",MathJax.Message] + ); + } + return queue.Push(ec.callback); + }, + + scriptAction: { + Process: function (script) {}, + Update: function (script) { + var jax = script.MathJax.elementJax; + if (jax && jax.needsUpdate()) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE} + else {script.MathJax.state = jax.STATE.PROCESSED} + }, + Reprocess: function (script) { + var jax = script.MathJax.elementJax; + if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE} + }, + Rerender: function (script) { + var jax = script.MathJax.elementJax; + if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.OUTPUT} + } + }, + + prepareScripts: function (action,element,state) { + if (arguments.callee.disabled) return; + var scripts = this.elementScripts(element); + var STATE = MathJax.ElementJax.STATE; + for (var i = 0, m = scripts.length; i < m; i++) { + var script = scripts[i]; + if (script.type && this.inputJax[script.type.replace(/ *;(.|\n)*/,"")]) { + if (script.MathJax) { + if (script.MathJax.elementJax && script.MathJax.elementJax.hover) { + MathJax.Extension.MathEvents.Hover.ClearHover(script.MathJax.elementJax); + } + if (script.MathJax.state !== STATE.PENDING) {this.scriptAction[action](script)} + } + if (!script.MathJax) {script.MathJax = {state: STATE.PENDING}} + if (script.MathJax.error) delete script.MathJax.error; + if (script.MathJax.state !== STATE.PROCESSED) {state.scripts.push(script)} + } + } + }, + + checkScriptSiblings: function (script) { + if (script.MathJax.checked) return; + var config = this.config, pre = script.previousSibling; + if (pre && pre.nodeName === "#text") { + var preJax,postJax, post = script.nextSibling; + if (post && post.nodeName !== "#text") {post = null} + if (config.preJax) { + if (typeof(config.preJax) === "string") {config.preJax = new RegExp(config.preJax+"$")} + preJax = pre.nodeValue.match(config.preJax); + } + if (config.postJax && post) { + if (typeof(config.postJax) === "string") {config.postJax = new RegExp("^"+config.postJax)} + postJax = post.nodeValue.match(config.postJax); + } + if (preJax && (!config.postJax || postJax)) { + pre.nodeValue = pre.nodeValue.replace + (config.preJax,(preJax.length > 1? preJax[1] : "")); + pre = null; + } + if (postJax && (!config.preJax || preJax)) { + post.nodeValue = post.nodeValue.replace + (config.postJax,(postJax.length > 1? postJax[1] : "")); + } + if (pre && !pre.nodeValue.match(/\S/)) {pre = pre.previousSibling} + } + if (config.preRemoveClass && pre && pre.className === config.preRemoveClass) + {script.MathJax.preview = pre} + script.MathJax.checked = 1; + }, + + processInput: function (state) { + var jax, STATE = MathJax.ElementJax.STATE; + var script, prev, m = state.scripts.length; + try { + // + // Loop through the scripts + // + while (state.i < m) { + script = state.scripts[state.i]; if (!script) {state.i++; continue} + // + // Remove previous error marker, if any + // + prev = script.previousSibling; + if (prev && prev.className === "MathJax_Error") {prev.parentNode.removeChild(prev)} + // + // Check if already processed or needs processing + // + if (!script.parentNode || !script.MathJax || script.MathJax.state === STATE.PROCESSED) {state.i++; continue}; + if (!script.MathJax.elementJax || script.MathJax.state === STATE.UPDATE) { + this.checkScriptSiblings(script); // remove preJax/postJax etc. + var type = script.type.replace(/ *;(.|\s)*/,""); // the input jax type + var input = this.inputJax[type]; // the input jax itself + jax = input.Process(script,state); // run the input jax + if (typeof jax === 'function') { // if a callback was returned + if (jax.called) continue; // go back and call Process() again + this.RestartAfter(jax); // wait for the callback + } + jax = jax.Attach(script,input.id); // register the jax on the script + this.saveScript(jax,state,script,STATE); // add script to state + this.postInputHooks.Execute(jax,input.id,script); // run global jax filters + } else if (script.MathJax.state === STATE.OUTPUT) { + this.saveScript(script.MathJax.elementJax,state,script,STATE); // add script to state + } + // + // Go on to the next script, and check if we need to update the processing message + // + state.i++; var now = new Date().getTime(); + if (now - state.start > this.processUpdateTime && state.i < state.scripts.length) + {state.start = now; this.RestartAfter(MathJax.Callback.Delay(1))} + } + } catch (err) {return this.processError(err,state,"Input")} + // + // Put up final message, reset the state and return + // + if (state.scripts.length && this.config.showProcessingMessages) + {MathJax.Message.Set(["ProcessMath","Processing math: %1%%",100],0)} + state.start = new Date().getTime(); state.i = state.j = 0; + return null; + }, + postInputHooks: MathJax.Callback.Hooks(true), // hooks to run after element jax is created + saveScript: function (jax,state,script,STATE) { + // + // Check that output jax exists + // + if (!this.outputJax[jax.mimeType]) { + script.MathJax.state = STATE.UPDATE; + throw Error("No output jax registered for "+jax.mimeType); + } + // + // Record the output jax + // and put this script in the queue for that jax + // + jax.outputJax = this.outputJax[jax.mimeType][0].id; + if (!state.jax[jax.outputJax]) { + if (state.jaxIDs.length === 0) { + // use original array until we know there are more (rather than two copies) + state.jax[jax.outputJax] = state.scripts; + } else { + if (state.jaxIDs.length === 1) // get the script so far for the existing jax + {state.jax[state.jaxIDs[0]] = state.scripts.slice(0,state.i)} + state.jax[jax.outputJax] = []; // start a new array for the new jax + } + state.jaxIDs.push(jax.outputJax); // save the ID of the jax + } + if (state.jaxIDs.length > 1) {state.jax[jax.outputJax].push(script)} + // + // Mark script as needing output + // + script.MathJax.state = STATE.OUTPUT; + }, + + // + // Pre- and post-process scripts by jax + // (to get scaling factors, hide/show output, and so on) + // Since this can cause the jax to load, we need to trap restarts + // + prepareOutput: function (state,method) { + while (state.j < state.jaxIDs.length) { + var id = state.jaxIDs[state.j], JAX = MathJax.OutputJax[id]; + if (JAX[method]) { + try { + var result = JAX[method](state); + if (typeof result === 'function') { + if (result.called) continue; // go back and try again + this.RestartAfter(result); + } + } catch (err) { + if (!err.restart) { + MathJax.Message.Set(["PrepError","Error preparing %1 output (%2)",id,method],null,600); + MathJax.Hub.lastPrepError = err; + state.j++; + } + return MathJax.Callback.After(["prepareOutput",this,state,method],err.restart); + } + } + state.j++; + } + return null; + }, + + processOutput: function (state) { + var result, STATE = MathJax.ElementJax.STATE, script, m = state.scripts.length; + try { + // + // Loop through the scripts + // + while (state.i < m) { + // + // Check that there is an element jax + // + script = state.scripts[state.i]; + if (!script || !script.parentNode || !script.MathJax || script.MathJax.error) {state.i++; continue} + var jax = script.MathJax.elementJax; if (!jax) {state.i++; continue} + // + // Call the output Jax's Process method (which will be its Translate() + // method once loaded). Mark it as complete and remove the preview unless + // the Process() call returns an explicit false value (in which case, it will + // handle this later during the postProcess phase, as HTML-CSS does). + // + try{ + result = MathJax.OutputJax[jax.outputJax].Process(script,state); + }catch(e){ + if(state.i == state.lastErr){ + state.i++; + console.log("state.i: " + state.i); + }else{ + state.lastErr = state.i; + console.log("other: " + state.i); + } + throw e; + } + if (result !== false) { + script.MathJax.state = STATE.PROCESSED; + if (script.MathJax.preview) { + script.MathJax.preview.innerHTML = ""; + script.MathJax.preview.style.display = "none"; + } + // + // Signal that new math is available + // + this.signal.Post(["New Math",jax.inputID]); // FIXME: wait for this? (i.e., restart if returns uncalled callback) + } + // + // Go on to next math expression + // + state.i++; + // + // Update the processing message, if needed + // + var now = new Date().getTime(); + if (now - state.start > this.processUpdateTime && state.i < state.scripts.length) + {state.start = now; this.RestartAfter(MathJax.Callback.Delay(this.processUpdateDelay))} + } + } catch (err) {return this.processError(err,state,"Output")} + // + // Put up the typesetting-complete message + // + if (state.scripts.length && this.config.showProcessingMessages) { + MathJax.Message.Set(["TypesetMath","Typesetting math: %1%%",100],0); + MathJax.Message.Clear(0); + } + state.i = state.j = 0; + return null; + }, + + processMessage: function (state,type) { + var m = Math.floor(state.i/(state.scripts.length)*100); + var message = (type === "Output" ? ["TypesetMath","Typesetting math: %1%%"] : + ["ProcessMath","Processing math: %1%%"]); + if (this.config.showProcessingMessages) {MathJax.Message.Set(message.concat(m),0)} + }, + + processError: function (err,state,type) { + if (!err.restart) { + if (!this.config.errorSettings.message) {throw err} + this.formatError(state.scripts[state.i],err); state.i++; + } + this.processMessage(state,type); + return MathJax.Callback.After(["process"+type,this,state],err.restart); + }, + + formatError: function (script,err) { + var LOCALIZE = function (id,text,arg1,arg2) {return MathJax.Localization._(id,text,arg1,arg2)}; + // + // Get the error message, URL, and line, and save it for + // reporting in the Show Math As Error menu + // + var message = LOCALIZE("ErrorMessage","Error: %1",err.message)+"\n"; + if (err.sourceURL||err.fileName) message += "\n"+LOCALIZE("ErrorFile","file: %1",err.sourceURL||err.fileName); + if (err.line||err.lineNumber) message += "\n"+LOCALIZE("ErrorLine","line: %1",err.line||err.lineNumber); + message += "\n\n"+LOCALIZE("ErrorTips","Debugging tips: use %1, inspect %2 in the browser console","'unpacked/MathJax.js'","'MathJax.Hub.lastError'"); + script.MathJax.error = MathJax.OutputJax.Error.Jax(message,script); + if (script.MathJax.elementJax) + script.MathJax.error.inputID = script.MathJax.elementJax.inputID; + // + // Create the [Math Processing Error] span + // + var errorSettings = this.config.errorSettings; + var errorText = LOCALIZE(errorSettings.messageId,errorSettings.message); + var error = MathJax.HTML.Element("span", { + className:"MathJax_Error", jaxID:"Error", isMathJax:true, + id: script.MathJax.error.inputID+"-Frame" + },[["span",null,errorText]]); + // + // Attach the menu events + // + MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js",function () { + var EVENT = MathJax.Extension.MathEvents.Event, + HUB = MathJax.Hub; + error.oncontextmenu = EVENT.Menu; + error.onmousedown = EVENT.Mousedown; + error.onkeydown = EVENT.Keydown; + error.tabIndex = HUB.getTabOrder(HUB.getJaxFor(script)); + }); + // + // Insert the error into the page and remove any preview + // + var node = document.getElementById(error.id); + if (node) node.parentNode.removeChild(node); + if (script.parentNode) script.parentNode.insertBefore(error,script); + if (script.MathJax.preview) { + script.MathJax.preview.innerHTML = ""; + script.MathJax.preview.style.display = "none"; + } + // + // Save the error for debugging purposes + // Report the error as a signal + // + this.lastError = err; + this.signal.Post(["Math Processing Error",script,err]); + }, + + RestartAfter: function (callback) { + throw this.Insert(Error("restart"),{restart: MathJax.Callback(callback)}); + }, + + elementCallback: function (element,callback) { + if (callback == null && (MathJax.Object.isArray(element) || typeof element === 'function')) + {try {MathJax.Callback(element); callback = element; element = null} catch(e) {}} + if (element == null) {element = this.config.elements || []} + if (this.isHTMLCollection(element)) {element = this.HTMLCollection2Array(element)} + if (!MathJax.Object.isArray(element)) {element = [element]} + element = [].concat(element); // make a copy so the original isn't changed + for (var i = 0, m = element.length; i < m; i++) + {if (typeof(element[i]) === 'string') {element[i] = document.getElementById(element[i])}} + if (!document.body) {document.body = document.getElementsByTagName("body")[0]} + if (element.length == 0) {element.push(document.body)} + if (!callback) {callback = {}} + return { + count: element.length, + elements: (element.length === 1 ? element[0] : element), + callback: callback + }; + }, + + elementScripts: function (element) { + var scripts = []; + if (MathJax.Object.isArray(element) || this.isHTMLCollection(element)) { + for (var i = 0, m = element.length; i < m; i++) { + var alreadyDone = 0; + for (var j = 0; j < i && !alreadyDone; j++) + {alreadyDone = element[j].contains(element[i])} + if (!alreadyDone) scripts.push.apply(scripts,this.elementScripts(element[i])); + } + return scripts; + } + if (typeof(element) === 'string') {element = document.getElementById(element)} + if (!document.body) {document.body = document.getElementsByTagName("body")[0]} + if (element == null) {element = document.body} + if (element.tagName != null && element.tagName.toLowerCase() === "script") {return [element]} + scripts = element.getElementsByTagName("script"); + if (this.msieHTMLCollectionBug) {scripts = this.HTMLCollection2Array(scripts)} + return scripts; + }, + + // + // IE8 fails to check "obj instanceof HTMLCollection" for some values of obj. + // + isHTMLCollection: function (obj) { + return ("HTMLCollection" in window && typeof(obj) === "object" && obj instanceof HTMLCollection); + }, + // + // IE8 doesn't deal with HTMLCollection as an array, so convert to array + // + HTMLCollection2Array: function (nodes) { + if (!this.msieHTMLCollectionBug) {return [].slice.call(nodes)} + var NODES = []; + for (var i = 0, m = nodes.length; i < m; i++) {NODES[i] = nodes[i]} + return NODES; + }, + + Insert: function (dst,src) { + for (var id in src) {if (src.hasOwnProperty(id)) { + // allow for concatenation of arrays? + if (typeof src[id] === 'object' && !(MathJax.Object.isArray(src[id])) && + (typeof dst[id] === 'object' || typeof dst[id] === 'function')) { + this.Insert(dst[id],src[id]); + } else { + dst[id] = src[id]; + } + }} + return dst; + }, + + getTabOrder: function(script) { + return this.config.menuSettings.inTabOrder ? 0 : -1; + }, + + // Old browsers (e.g. Internet Explorer <= 8) do not support trim(). + SplitList: ("trim" in String.prototype ? + function (list) {return list.trim().split(/\s+/)} : + function (list) {return list.replace(/^\s+/,''). + replace(/\s+$/,'').split(/\s+/)}) +}; +MathJax.Hub.Insert(MathJax.Hub.config.styles,MathJax.Message.styles); +MathJax.Hub.Insert(MathJax.Hub.config.styles,{".MathJax_Error":MathJax.Hub.config.errorSettings.style}); + +// +// Storage area for extensions and preprocessors +// +MathJax.Extension = {}; + +// +// Hub Startup code +// +MathJax.Hub.Configured = MathJax.Callback({}); // called when configuration is complete +MathJax.Hub.Startup = { + script: "", // the startup script from the SCRIPT call that loads MathJax.js + queue: MathJax.Callback.Queue(), // Queue used for startup actions + signal: MathJax.Callback.Signal("Startup"), // Signal used for startup events + params: {}, + + // + // Load the configuration files + // + Config: function () { + this.queue.Push(["Post",this.signal,"Begin Config"]); + // + // Make sure root is set before loading any files + // + if (MathJax.AuthorConfig && MathJax.AuthorConfig.root) + MathJax.Ajax.config.root = MathJax.AuthorConfig.root; + // + // If a locale is given as a parameter, + // set the locale and the default menu value for the locale + // + if (this.params.locale) { + MathJax.Localization.resetLocale(this.params.locale); + MathJax.Hub.config.menuSettings.locale = this.params.locale; + } + // + // Run the config files, if any are given in the parameter list + // + if (this.params.config) { + var files = this.params.config.split(/,/); + for (var i = 0, m = files.length; i < m; i++) { + if (!files[i].match(/\.js$/)) {files[i] += ".js"} + this.queue.Push(["Require",MathJax.Ajax,this.URL("config",files[i])]); + } + } + // + // Perform author configuration from in-line MathJax = {...} + // + this.queue.Push(["Config",MathJax.Hub,MathJax.AuthorConfig]); + // + // Run the deprecated configuration script, if any (ignoring return value) + // Wait for the startup delay signal + // Run the mathjax-config blocks + // Load the files in the configuration's config array + // + if (this.script.match(/\S/)) {this.queue.Push(this.script+";\n1;")} + this.queue.Push( + ["ConfigDelay",this], + ["ConfigBlocks",this], + [function (THIS) {return THIS.loadArray(MathJax.Hub.config.config,"config",null,true)},this], + ["Post",this.signal,"End Config"] + ); + }, + // + // Return the delay callback + // + ConfigDelay: function () { + var delay = this.params.delayStartupUntil || MathJax.Hub.config.delayStartupUntil; + if (delay === "onload") {return this.onload} + if (delay === "configured") {return MathJax.Hub.Configured} + return delay; + }, + // + // Run the scripts of type=text/x-mathjax-config + // + ConfigBlocks: function () { + var scripts = document.getElementsByTagName("script"); + var queue = MathJax.Callback.Queue(); + for (var i = 0, m = scripts.length; i < m; i++) { + var type = String(scripts[i].type).replace(/ /g,""); + if (type.match(/^text\/x-mathjax-config(;.*)?$/) && !type.match(/;executed=true/)) { + scripts[i].type += ";executed=true"; + queue.Push(scripts[i].innerHTML+";\n1;"); + } + } + return queue.Push(function () {MathJax.Ajax.config.root = MathJax.Hub.config.root}); + }, + + // + // Read cookie and set up menu defaults + // (set the locale according to the cookie) + // (adjust the jax to accommodate renderer preferences) + // + Cookie: function () { + return this.queue.Push( + ["Post",this.signal,"Begin Cookie"], + ["Get",MathJax.HTML.Cookie,"menu",MathJax.Hub.config.menuSettings], + [function (config) { + var SETTINGS = config.menuSettings; + if (SETTINGS.locale) MathJax.Localization.resetLocale(SETTINGS.locale); + var renderer = config.menuSettings.renderer, jax = config.jax; + if (renderer) { + var name = "output/"+renderer; jax.sort(); + for (var i = 0, m = jax.length; i < m; i++) { + if (jax[i].substr(0,7) === "output/") break; + } + if (i == m-1) {jax.pop()} else { + while (i < m) {if (jax[i] === name) {jax.splice(i,1); break}; i++} + } + jax.unshift(name); + } + if (SETTINGS.CHTMLpreview != null) { + if (SETTINGS.FastPreview == null) SETTINGS.FastPreview = SETTINGS.CHTMLpreview; + delete SETTINGS.CHTMLpreview; + } + if (SETTINGS.FastPreview && !MathJax.Extension["fast-preview"]) + MathJax.Hub.config.extensions.push("fast-preview.js"); + if (config.menuSettings.assistiveMML && !MathJax.Extension.AssistiveMML) + MathJax.Hub.config.extensions.push("AssistiveMML.js"); + },MathJax.Hub.config], + ["Post",this.signal,"End Cookie"] + ); + }, + // + // Setup stylesheets and extra styles + // + Styles: function () { + return this.queue.Push( + ["Post",this.signal,"Begin Styles"], + ["loadArray",this,MathJax.Hub.config.styleSheets,"config"], + ["Styles",MathJax.Ajax,MathJax.Hub.config.styles], + ["Post",this.signal,"End Styles"] + ); + }, + // + // Load the input and output jax + // + Jax: function () { + var config = MathJax.Hub.config, jax = MathJax.Hub.outputJax; + // Save the order of the output jax since they are loading asynchronously + for (var i = 0, m = config.jax.length, k = 0; i < m; i++) { + var name = config.jax[i].substr(7); + if (config.jax[i].substr(0,7) === "output/" && jax.order[name] == null) + {jax.order[name] = k; k++} + } + var queue = MathJax.Callback.Queue(); + return queue.Push( + ["Post",this.signal,"Begin Jax"], + ["loadArray",this,config.jax,"jax","config.js"], + ["Post",this.signal,"End Jax"] + ); + }, + // + // Load the extensions + // + Extensions: function () { + var queue = MathJax.Callback.Queue(); + return queue.Push( + ["Post",this.signal,"Begin Extensions"], + ["loadArray",this,MathJax.Hub.config.extensions,"extensions"], + ["Post",this.signal,"End Extensions"] + ); + }, + + // + // Initialize the Message system + // + Message: function () { + MathJax.Message.Init(true); + }, + + // + // Set the math menu renderer, if it isn't already + // (this must come after the jax are loaded) + // + Menu: function () { + var menu = MathJax.Hub.config.menuSettings, jax = MathJax.Hub.outputJax, registered; + for (var id in jax) {if (jax.hasOwnProperty(id)) { + if (jax[id].length) {registered = jax[id]; break} + }} + if (registered && registered.length) { + if (menu.renderer && menu.renderer !== registered[0].id) + {registered.unshift(MathJax.OutputJax[menu.renderer])} + menu.renderer = registered[0].id; + } + }, + + // + // Set the location to the designated hash position + // + Hash: function () { + if (MathJax.Hub.config.positionToHash && document.location.hash && + document.body && document.body.scrollIntoView) { + var name = document.location.hash.substr(1); + var target = document.getElementById(name); + if (!target) { + var a = document.getElementsByTagName("a"); + for (var i = 0, m = a.length; i < m; i++) + {if (a[i].name === name) {target = a[i]; break}} + } + if (target) { + while (!target.scrollIntoView) {target = target.parentNode} + target = this.HashCheck(target); + if (target && target.scrollIntoView) + {setTimeout(function () {target.scrollIntoView(true)},1)} + } + } + }, + HashCheck: function (target) { + var jax = MathJax.Hub.getJaxFor(target); + if (jax && MathJax.OutputJax[jax.outputJax].hashCheck) + {target = MathJax.OutputJax[jax.outputJax].hashCheck(target)} + return target; + }, + + // + // Load the Menu and Zoom code, if it hasn't already been loaded. + // This is called after the initial typeset, so should no longer be + // competing with other page loads, but will make these available + // if needed later on. + // + MenuZoom: function () { + if (MathJax.Hub.config.showMathMenu) { + if (!MathJax.Extension.MathMenu) { + setTimeout( + function () { + MathJax.Callback.Queue( + ["Require",MathJax.Ajax,"[MathJax]/extensions/MathMenu.js",{}], + ["loadDomain",MathJax.Localization,"MathMenu"] + ) + },1000 + ); + } else { + setTimeout( + MathJax.Callback(["loadDomain",MathJax.Localization,"MathMenu"]), + 1000 + ); + } + if (!MathJax.Extension.MathZoom) { + setTimeout( + MathJax.Callback(["Require",MathJax.Ajax,"[MathJax]/extensions/MathZoom.js",{}]), + 2000 + ); + } + } + }, + + // + // Setup the onload callback + // + onLoad: function () { + var onload = this.onload = + MathJax.Callback(function () {MathJax.Hub.Startup.signal.Post("onLoad")}); + if (document.body && document.readyState) + if (MathJax.Hub.Browser.isMSIE) { + // IE can change from loading to interactive before + // full page is ready, so go with complete (even though + // that means we may have to wait longer). + if (document.readyState === "complete") {return [onload]} + } else if (document.readyState !== "loading") {return [onload]} + if (window.addEventListener) { + window.addEventListener("load",onload,false); + if (!this.params.noDOMContentEvent) + {window.addEventListener("DOMContentLoaded",onload,false)} + } + else if (window.attachEvent) {window.attachEvent("onload",onload)} + else {window.onload = onload} + return onload; + }, + + // + // Perform the initial typesetting (or skip if configuration says to) + // + Typeset: function (element,callback) { + if (MathJax.Hub.config.skipStartupTypeset) {return function () {}} + return this.queue.Push( + ["Post",this.signal,"Begin Typeset"], + ["Typeset",MathJax.Hub,element,callback], + ["Post",this.signal,"End Typeset"] + ); + }, + + // + // Create a URL in the MathJax hierarchy + // + URL: function (dir,name) { + if (!name.match(/^([a-z]+:\/\/|\[|\/)/)) {name = "[MathJax]/"+dir+"/"+name} + return name; + }, + + // + // Load an array of files, waiting for all of them + // to be loaded before going on + // + loadArray: function (files,dir,name,synchronous) { + if (files) { + if (!MathJax.Object.isArray(files)) {files = [files]} + if (files.length) { + var queue = MathJax.Callback.Queue(), callback = {}, file; + for (var i = 0, m = files.length; i < m; i++) { + file = this.URL(dir,files[i]); + if (name) {file += "/" + name} + if (synchronous) {queue.Push(["Require",MathJax.Ajax,file,callback])} + else {queue.Push(MathJax.Ajax.Require(file,callback))} + } + return queue.Push({}); // wait for everything to finish + } + } + return null; + } + +}; + + +/**********************************************************/ + +(function (BASENAME) { + var BASE = window[BASENAME], ROOT = "["+BASENAME+"]"; + var HUB = BASE.Hub, AJAX = BASE.Ajax, CALLBACK = BASE.Callback; + + var JAX = MathJax.Object.Subclass({ + JAXFILE: "jax.js", + require: null, // array of files to load before jax.js is complete + config: {}, + // + // Make a subclass and return an instance of it. + // (FIXME: should we replace config with a copy of the constructor's + // config? Otherwise all subclasses share the same config structure.) + // + Init: function (def,cdef) { + if (arguments.length === 0) {return this} + return (this.constructor.Subclass(def,cdef))(); + }, + // + // Augment by merging with class definition (not replacing) + // + Augment: function (def,cdef) { + var cObject = this.constructor, ndef = {}; + if (def != null) { + for (var id in def) {if (def.hasOwnProperty(id)) { + if (typeof def[id] === "function") + {cObject.protoFunction(id,def[id])} else {ndef[id] = def[id]} + }} + // MSIE doesn't list toString even if it is not native so handle it separately + if (def.toString !== cObject.prototype.toString && def.toString !== {}.toString) + {cObject.protoFunction('toString',def.toString)} + } + HUB.Insert(cObject.prototype,ndef); + cObject.Augment(null,cdef); + return this; + }, + Translate: function (script,state) { + throw Error(this.directory+"/"+this.JAXFILE+" failed to define the Translate() method"); + }, + Register: function (mimetype) {}, + Config: function () { + this.config = HUB.CombineConfig(this.id,this.config); + if (this.config.Augment) {this.Augment(this.config.Augment)} + }, + Startup: function () {}, + loadComplete: function (file) { + if (file === "config.js") { + return AJAX.loadComplete(this.directory+"/"+file); + } else { + var queue = CALLBACK.Queue(); + queue.Push( + HUB.Register.StartupHook("End Config",{}), // wait until config complete + ["Post",HUB.Startup.signal,this.id+" Jax Config"], + ["Config",this], + ["Post",HUB.Startup.signal,this.id+" Jax Require"], + // Config may set the required and extensions array, + // so use functions to delay making the reference until needed + [function (THIS) {return MathJax.Hub.Startup.loadArray(THIS.require,this.directory)},this], + [function (config,id) {return MathJax.Hub.Startup.loadArray(config.extensions,"extensions/"+id)},this.config||{},this.id], + ["Post",HUB.Startup.signal,this.id+" Jax Startup"], + ["Startup",this], + ["Post",HUB.Startup.signal,this.id+" Jax Ready"] + ); + if (this.copyTranslate) { + queue.Push( + [function (THIS) { + THIS.preProcess = THIS.preTranslate; + THIS.Process = THIS.Translate; + THIS.postProcess = THIS.postTranslate; + },this.constructor.prototype] + ); + } + return queue.Push(["loadComplete",AJAX,this.directory+"/"+file]); + } + } + },{ + id: "Jax", + version: "2.7.1", + directory: ROOT+"/jax", + extensionDir: ROOT+"/extensions" + }); + + /***********************************/ + + BASE.InputJax = JAX.Subclass({ + elementJax: "mml", // the element jax to load for this input jax + sourceMenuTitle: /*_(MathMenu)*/ ["Original","Original Form"], + copyTranslate: true, + Process: function (script,state) { + var queue = CALLBACK.Queue(), file; + // Load any needed element jax + var jax = this.elementJax; if (!BASE.Object.isArray(jax)) {jax = [jax]} + for (var i = 0, m = jax.length; i < m; i++) { + file = BASE.ElementJax.directory+"/"+jax[i]+"/"+this.JAXFILE; + if (!this.require) {this.require = []} + else if (!BASE.Object.isArray(this.require)) {this.require = [this.require]}; + this.require.push(file); // so Startup will wait for it to be loaded + queue.Push(AJAX.Require(file)); + } + // Load the input jax + file = this.directory+"/"+this.JAXFILE; + var load = queue.Push(AJAX.Require(file)); + if (!load.called) { + this.constructor.prototype.Process = function () { + if (!load.called) {return load} + throw Error(file+" failed to load properly"); + } + } + // Load the associated output jax + jax = HUB.outputJax["jax/"+jax[0]]; + if (jax) {queue.Push(AJAX.Require(jax[0].directory+"/"+this.JAXFILE))} + return queue.Push({}); + }, + needsUpdate: function (jax) { + var script = jax.SourceElement(); + return (jax.originalText !== BASE.HTML.getScript(script)); + }, + Register: function (mimetype) { + if (!HUB.inputJax) {HUB.inputJax = {}} + HUB.inputJax[mimetype] = this; + } + },{ + id: "InputJax", + version: "2.7.1", + directory: JAX.directory+"/input", + extensionDir: JAX.extensionDir + }); + + /***********************************/ + + BASE.OutputJax = JAX.Subclass({ + copyTranslate: true, + preProcess: function (state) { + var load, file = this.directory+"/"+this.JAXFILE; + this.constructor.prototype.preProcess = function (state) { + if (!load.called) {return load} + throw Error(file+" failed to load properly"); + } + load = AJAX.Require(file); + return load; + }, + Register: function (mimetype) { + var jax = HUB.outputJax; + if (!jax[mimetype]) {jax[mimetype] = []} + // If the output jax is earlier in the original configuration list, put it first here + if (jax[mimetype].length && (this.id === HUB.config.menuSettings.renderer || + (jax.order[this.id]||0) < (jax.order[jax[mimetype][0].id]||0))) + {jax[mimetype].unshift(this)} else {jax[mimetype].push(this)} + // Make sure the element jax is loaded before Startup is called + if (!this.require) {this.require = []} + else if (!BASE.Object.isArray(this.require)) {this.require = [this.require]}; + this.require.push(BASE.ElementJax.directory+"/"+(mimetype.split(/\//)[1])+"/"+this.JAXFILE); + }, + Remove: function (jax) {} + },{ + id: "OutputJax", + version: "2.7.1", + directory: JAX.directory+"/output", + extensionDir: JAX.extensionDir, + fontDir: ROOT+(BASE.isPacked?"":"/..")+"/fonts", + imageDir: ROOT+(BASE.isPacked?"":"/..")+"/images" + }); + + /***********************************/ + + BASE.ElementJax = JAX.Subclass({ + // make a subclass, not an instance + Init: function (def,cdef) {return this.constructor.Subclass(def,cdef)}, + + inputJax: null, + outputJax: null, + inputID: null, + originalText: "", + mimeType: "", + sourceMenuTitle: /*_(MathMenu)*/ ["MathMLcode","MathML Code"], + + Text: function (text,callback) { + var script = this.SourceElement(); + BASE.HTML.setScript(script,text); + script.MathJax.state = this.STATE.UPDATE; + return HUB.Update(script,callback); + }, + Reprocess: function (callback) { + var script = this.SourceElement(); + script.MathJax.state = this.STATE.UPDATE; + return HUB.Reprocess(script,callback); + }, + Update: function (callback) {return this.Rerender(callback)}, + Rerender: function (callback) { + var script = this.SourceElement(); + script.MathJax.state = this.STATE.OUTPUT; + return HUB.Process(script,callback); + }, + Remove: function (keep) { + if (this.hover) {this.hover.clear(this)} + BASE.OutputJax[this.outputJax].Remove(this); + if (!keep) { + HUB.signal.Post(["Remove Math",this.inputID]); // wait for this to finish? + this.Detach(); + } + }, + needsUpdate: function () { + return BASE.InputJax[this.inputJax].needsUpdate(this); + }, + + SourceElement: function () {return document.getElementById(this.inputID)}, + + Attach: function (script,inputJax) { + var jax = script.MathJax.elementJax; + if (script.MathJax.state === this.STATE.UPDATE) { + jax.Clone(this); + } else { + jax = script.MathJax.elementJax = this; + if (script.id) {this.inputID = script.id} + else {script.id = this.inputID = BASE.ElementJax.GetID(); this.newID = 1} + } + jax.originalText = BASE.HTML.getScript(script); + jax.inputJax = inputJax; + if (jax.root) {jax.root.inputID = jax.inputID} + return jax; + }, + Detach: function () { + var script = this.SourceElement(); if (!script) return; + try {delete script.MathJax} catch(err) {script.MathJax = null} + if (this.newID) {script.id = ""} + }, + Clone: function (jax) { + var id; + for (id in this) { + if (!this.hasOwnProperty(id)) continue; + if (typeof(jax[id]) === 'undefined' && id !== 'newID') {delete this[id]} + } + for (id in jax) { + if (!jax.hasOwnProperty(id)) continue; + if (typeof(this[id]) === 'undefined' || (this[id] !== jax[id] && id !== 'inputID')) + {this[id] = jax[id]} + } + } + },{ + id: "ElementJax", + version: "2.7.1", + directory: JAX.directory+"/element", + extensionDir: JAX.extensionDir, + ID: 0, // jax counter (for IDs) + STATE: { + PENDING: 1, // script is identified as math but not yet processed + PROCESSED: 2, // script has been processed + UPDATE: 3, // elementJax should be updated + OUTPUT: 4 // output should be updated (input is OK) + }, + + GetID: function () {this.ID++; return "MathJax-Element-"+this.ID}, + Subclass: function () { + var obj = JAX.Subclass.apply(this,arguments); + obj.loadComplete = this.prototype.loadComplete; + return obj; + } + }); + BASE.ElementJax.prototype.STATE = BASE.ElementJax.STATE; + + // + // Some "Fake" jax used to allow menu access for "Math Processing Error" messages + // + BASE.OutputJax.Error = { + id: "Error", version: "2.7.1", config: {}, errors: 0, + ContextMenu: function () {return BASE.Extension.MathEvents.Event.ContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)}, + Mousedown: function () {return BASE.Extension.MathEvents.Event.AltContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)}, + getJaxFromMath: function (math) {return (math.nextSibling.MathJax||{}).error}, + Jax: function (text,script) { + var jax = MathJax.Hub.inputJax[script.type.replace(/ *;(.|\s)*/,"")]; + this.errors++; + return { + inputJax: (jax||{id:"Error"}).id, // Use Error InputJax as fallback + outputJax: "Error", + inputID: "MathJax-Error-"+this.errors, + sourceMenuTitle: /*_(MathMenu)*/ ["ErrorMessage","Error Message"], + sourceMenuFormat: "Error", + originalText: MathJax.HTML.getScript(script), + errorText: text + } + } + }; + BASE.InputJax.Error = { + id: "Error", version: "2.7.1", config: {}, + sourceMenuTitle: /*_(MathMenu)*/ ["Original","Original Form"] + }; + +})("MathJax"); + +/**********************************************************/ + +(function (BASENAME) { + var BASE = window[BASENAME]; + if (!BASE) {BASE = window[BASENAME] = {}} + + var HUB = BASE.Hub; var STARTUP = HUB.Startup; var CONFIG = HUB.config; + var HEAD = document.head || (document.getElementsByTagName("head")[0]); + if (!HEAD) {HEAD = document.childNodes[0]}; + var scripts = (document.documentElement || document).getElementsByTagName("script"); + if (scripts.length === 0 && HEAD.namespaceURI) + scripts = document.getElementsByTagNameNS(HEAD.namespaceURI,"script"); + var namePattern = new RegExp("(^|/)"+BASENAME+"\\.js(\\?.*)?$"); + for (var i = scripts.length-1; i >= 0; i--) { + if ((scripts[i].src||"").match(namePattern)) { + STARTUP.script = scripts[i].innerHTML; + if (RegExp.$2) { + var params = RegExp.$2.substr(1).split(/\&/); + for (var j = 0, m = params.length; j < m; j++) { + var KV = params[j].match(/(.*)=(.*)/); + if (KV) {STARTUP.params[unescape(KV[1])] = unescape(KV[2])} + else {STARTUP.params[params[j]] = true} + } + } + CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,''); + BASE.Ajax.config.root = CONFIG.root; + BASE.Ajax.params = STARTUP.params; + break; + } + } + + var AGENT = navigator.userAgent; + var BROWSERS = { + isMac: (navigator.platform.substr(0,3) === "Mac"), + isPC: (navigator.platform.substr(0,3) === "Win"), + isMSIE: ("ActiveXObject" in window && "clipboardData" in window), + isEdge: ("MSGestureEvent" in window && "chrome" in window && + window.chrome.loadTimes == null), + isFirefox: (!!AGENT.match(/Gecko\//) && !AGENT.match(/like Gecko/)), + isSafari: (!!AGENT.match(/ (Apple)?WebKit\//) && !AGENT.match(/ like iPhone /) && + (!window.chrome || window.chrome.app == null)), + isChrome: ("chrome" in window && window.chrome.loadTimes != null), + isOpera: ("opera" in window && window.opera.version != null), + isKonqueror: ("konqueror" in window && navigator.vendor == "KDE"), + versionAtLeast: function (v) { + var bv = (this.version).split('.'); v = (new String(v)).split('.'); + for (var i = 0, m = v.length; i < m; i++) + {if (bv[i] != v[i]) {return parseInt(bv[i]||"0") >= parseInt(v[i])}} + return true; + }, + Select: function (choices) { + var browser = choices[HUB.Browser]; + if (browser) {return browser(HUB.Browser)} + return null; + } + }; + + var xAGENT = AGENT + .replace(/^Mozilla\/(\d+\.)+\d+ /,"") // remove initial Mozilla, which is never right + .replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"") // remove linux version + .replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,""); // special case for these + + HUB.Browser = HUB.Insert(HUB.Insert(new String("Unknown"),{version: "0.0"}),BROWSERS); + for (var browser in BROWSERS) {if (BROWSERS.hasOwnProperty(browser)) { + if (BROWSERS[browser] && browser.substr(0,2) === "is") { + browser = browser.slice(2); + if (browser === "Mac" || browser === "PC") continue; + HUB.Browser = HUB.Insert(new String(browser),BROWSERS); + var VERSION = new RegExp( + ".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|" + // for Safari, Opera10, and IE11+ + ".*("+browser+")"+(browser == "MSIE" ? " " : "/")+"((?:\\d+\\.)*\\d+)|"+ // for one of the main browsers + "(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"); // for unrecognized browser + var MATCH = VERSION.exec(xAGENT) || ["","","","unknown","0.0"]; + HUB.Browser.name = (MATCH[1] != "" ? browser : (MATCH[3] || MATCH[5])); + HUB.Browser.version = MATCH[2] || MATCH[4] || MATCH[6]; + break; + } + }}; + + // + // Initial browser-specific info (e.g., touch up version or name, check for MathPlayer, etc.) + // Wrap in try/catch just in case of error (see issue #1155). + // + try {HUB.Browser.Select({ + Safari: function (browser) { + var v = parseInt((String(browser.version).split("."))[0]); + if (v > 85) {browser.webkit = browser.version} + if (v >= 538) {browser.version = "8.0"} + else if (v >= 537) {browser.version = "7.0"} + else if (v >= 536) {browser.version = "6.0"} + else if (v >= 534) {browser.version = "5.1"} + else if (v >= 533) {browser.version = "5.0"} + else if (v >= 526) {browser.version = "4.0"} + else if (v >= 525) {browser.version = "3.1"} + else if (v > 500) {browser.version = "3.0"} + else if (v > 400) {browser.version = "2.0"} + else if (v > 85) {browser.version = "1.0"} + browser.webkit = (navigator.appVersion.match(/WebKit\/(\d+)\./))[1]; + browser.isMobile = (navigator.appVersion.match(/Mobile/i) != null); + browser.noContextMenu = browser.isMobile; + }, + Firefox: function (browser) { + if ((browser.version === "0.0" || AGENT.match(/Firefox/) == null) && + navigator.product === "Gecko") { + var rv = AGENT.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/); + if (rv) {browser.version = rv[1]} + else { + var date = (navigator.buildID||navigator.productSub||"0").substr(0,8); + if (date >= "20111220") {browser.version = "9.0"} + else if (date >= "20111120") {browser.version = "8.0"} + else if (date >= "20110927") {browser.version = "7.0"} + else if (date >= "20110816") {browser.version = "6.0"} + else if (date >= "20110621") {browser.version = "5.0"} + else if (date >= "20110320") {browser.version = "4.0"} + else if (date >= "20100121") {browser.version = "3.6"} + else if (date >= "20090630") {browser.version = "3.5"} + else if (date >= "20080617") {browser.version = "3.0"} + else if (date >= "20061024") {browser.version = "2.0"} + } + } + browser.isMobile = (navigator.appVersion.match(/Android/i) != null || + AGENT.match(/ Fennec\//) != null || + AGENT.match(/Mobile/) != null); + }, + Chrome: function (browser) { + browser.noContextMenu = browser.isMobile = !!navigator.userAgent.match(/ Mobile[ \/]/); + }, + Opera: function (browser) {browser.version = opera.version()}, + Edge: function (browser) { + browser.isMobile = !!navigator.userAgent.match(/ Phone/); + }, + MSIE: function (browser) { + browser.isMobile = !!navigator.userAgent.match(/ Phone/); + browser.isIE9 = !!(document.documentMode && (window.performance || window.msPerformance)); + MathJax.HTML.setScriptBug = !browser.isIE9 || document.documentMode < 9; + MathJax.Hub.msieHTMLCollectionBug = (document.documentMode < 9); + // + // MathPlayer doesn't function properly in IE10, and not at all in IE11, + // so don't even try to load it. + // + if (document.documentMode < 10 && !STARTUP.params.NoMathPlayer) { + try { + new ActiveXObject("MathPlayer.Factory.1"); + browser.hasMathPlayer = true; + } catch (err) {} + try { + if (browser.hasMathPlayer) { + var mathplayer = document.createElement("object"); + mathplayer.id = "mathplayer"; mathplayer.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987"; + HEAD.appendChild(mathplayer); + document.namespaces.add("m","http://www.w3.org/1998/Math/MathML"); + browser.mpNamespace = true; + if (document.readyState && (document.readyState === "loading" || + document.readyState === "interactive")) { + document.write(''); + browser.mpImported = true; + } + } else { + // Adding any namespace avoids a crash in IE9 in IE9-standards mode + // (any reference to document.namespaces before document.readyState is + // "complete" causes an "unspecified error" to be thrown) + document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink"); + } + } catch (err) {} + } + } + });} catch (err) { + console.error(err.message); + } + HUB.Browser.Select(MathJax.Message.browsers); + + if (BASE.AuthorConfig && typeof BASE.AuthorConfig.AuthorInit === "function") {BASE.AuthorConfig.AuthorInit()} + HUB.queue = BASE.Callback.Queue(); + HUB.queue.Push( + ["Post",STARTUP.signal,"Begin"], + ["Config",STARTUP], + ["Cookie",STARTUP], + ["Styles",STARTUP], + ["Message",STARTUP], + function () { + // Do Jax and Extensions in parallel, but wait for them all to complete + var queue = BASE.Callback.Queue( + STARTUP.Jax(), + STARTUP.Extensions() + ); + return queue.Push({}); + }, + ["Menu",STARTUP], + STARTUP.onLoad(), + function () {MathJax.isReady = true}, // indicates that MathJax is ready to process math + ["Typeset",STARTUP], + ["Hash",STARTUP], + ["MenuZoom",STARTUP], + ["Post",STARTUP.signal,"End"] + ); + +})("MathJax"); + +}} From e30fe4ddb544b092709368f4d304dc8706493286 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Wed, 21 Feb 2018 19:23:57 -0600 Subject: [PATCH 349/439] Upgrade MathJax to 2.7.3, which fixes the rendering of \vec and \hat --- MacDown/Code/Document/MPRenderer.m | 2 +- MacDown/Resources/MathJax/MathJax.js | 3319 +------------------------- 2 files changed, 8 insertions(+), 3313 deletions(-) diff --git a/MacDown/Code/Document/MPRenderer.m b/MacDown/Code/Document/MPRenderer.m index 8cb2555d..f797444f 100644 --- a/MacDown/Code/Document/MPRenderer.m +++ b/MacDown/Code/Document/MPRenderer.m @@ -24,7 +24,7 @@ // in to MathJax, then the WebResourceLoadDelegate can be removed from MPDocument // and MathJax.js can be removed from this project. static NSString * const kMPMathJaxCDN = - @"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js" + @"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/MathJax.js" @"?config=TeX-AMS-MML_HTMLorMML"; static NSString * const kMPPrismScriptDirectory = @"Prism/components"; static NSString * const kMPPrismThemeDirectory = @"Prism/themes"; diff --git a/MacDown/Resources/MathJax/MathJax.js b/MacDown/Resources/MathJax/MathJax.js index 96c6097b..8b50b320 100644 --- a/MacDown/Resources/MathJax/MathJax.js +++ b/MacDown/Resources/MathJax/MathJax.js @@ -1,25 +1,14 @@ -/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ -/* vim: set ts=2 et sw=2 tw=80: */ - -/************************************************************* +/* + * /MathJax.js + * + * Copyright (c) 2009-2018 The MathJax Consortium * - * MathJax.js - * - * The main support code for the MathJax Hub, including the - * Ajax, Callback, Messaging, and Object-Oriented Programming - * libraries, as well as the base Jax classes, and startup - * processing code. - * - * --------------------------------------------------------------------- - * - * Copyright (c) 2009-2017 The MathJax Consortium - * * 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. @@ -27,3298 +16,4 @@ * limitations under the License. */ - -// -// Check if browser can support MathJax (no one fails this nowadays) -// -if (document.getElementById && document.childNodes && document.createElement) { -// -// Skip if MathJax is already loaded -// -if (!(window.MathJax && MathJax.Hub)) { - -// -// Get author configuration from MathJax variable, if any -// -if (window.MathJax) {window.MathJax = {AuthorConfig: window.MathJax}} - else {window.MathJax = {}} - -// MathJax.isPacked = true; // This line is uncommented by the packer. - -MathJax.version = "2.7.1"; -MathJax.fileversion = "2.7.1"; -MathJax.cdnVersion = "2.7.1"; // specifies a revision to break caching -MathJax.cdnFileVersions = {}; // can be used to specify revisions for individual files - -/**********************************************************/ - -(function (BASENAME) { - var BASE = window[BASENAME]; - if (!BASE) {BASE = window[BASENAME] = {}} - - var PROTO = []; // a static object used to indicate when a prototype is being created - var OBJECT = function (def) { - var obj = def.constructor; if (!obj) {obj = function () {}} - for (var id in def) {if (id !== 'constructor' && def.hasOwnProperty(id)) {obj[id] = def[id]}} - return obj; - }; - var CONSTRUCTOR = function () { - return function () {return arguments.callee.Init.call(this,arguments)}; - }; - - BASE.Object = OBJECT({ - constructor: CONSTRUCTOR(), - - Subclass: function (def,classdef) { - var obj = CONSTRUCTOR(); - obj.SUPER = this; obj.Init = this.Init; - obj.Subclass = this.Subclass; obj.Augment = this.Augment; - obj.protoFunction = this.protoFunction; - obj.can = this.can; obj.has = this.has; obj.isa = this.isa; - obj.prototype = new this(PROTO); - obj.prototype.constructor = obj; // the real constructor - obj.Augment(def,classdef); - return obj; - }, - - Init: function (args) { - var obj = this; - if (args.length === 1 && args[0] === PROTO) {return obj} - if (!(obj instanceof args.callee)) {obj = new args.callee(PROTO)} - return obj.Init.apply(obj,args) || obj; - }, - - Augment: function (def,classdef) { - var id; - if (def != null) { - for (id in def) {if (def.hasOwnProperty(id)) {this.protoFunction(id,def[id])}} - // MSIE doesn't list toString even if it is not native so handle it separately - if (def.toString !== this.prototype.toString && def.toString !== {}.toString) - {this.protoFunction('toString',def.toString)} - } - if (classdef != null) { - for (id in classdef) {if (classdef.hasOwnProperty(id)) {this[id] = classdef[id]}} - } - return this; - }, - - protoFunction: function (id,def) { - this.prototype[id] = def; - if (typeof def === "function") {def.SUPER = this.SUPER.prototype} - }, - - prototype: { - Init: function () {}, - SUPER: function (fn) {return fn.callee.SUPER}, - can: function (method) {return typeof(this[method]) === "function"}, - has: function (property) {return typeof(this[property]) !== "undefined"}, - isa: function (obj) {return (obj instanceof Object) && (this instanceof obj)} - }, - - can: function (method) {return this.prototype.can.call(this,method)}, - has: function (property) {return this.prototype.has.call(this,property)}, - isa: function (obj) { - var constructor = this; - while (constructor) { - if (constructor === obj) {return true} else {constructor = constructor.SUPER} - } - return false; - }, - - - SimpleSUPER: OBJECT({ - constructor: function (def) {return this.SimpleSUPER.define(def)}, - - define: function (src) { - var dst = {}; - if (src != null) { - for (var id in src) {if (src.hasOwnProperty(id)) {dst[id] = this.wrap(id,src[id])}} - // MSIE doesn't list toString even if it is not native so handle it separately - if (src.toString !== this.prototype.toString && src.toString !== {}.toString) - {dst.toString = this.wrap('toString',src.toString)} - } - return dst; - }, - - wrap: function (id,f) { - if (typeof(f) !== 'function' || !f.toString().match(/\.\s*SUPER\s*\(/)) {return f} - var fn = function () { - this.SUPER = fn.SUPER[id]; - try {var result = f.apply(this,arguments)} catch (err) {delete this.SUPER; throw err} - delete this.SUPER; - return result; - } - fn.toString = function () {return f.toString.apply(f,arguments)} - return fn; - } - - }) - }); - - BASE.Object.isArray = Array.isArray || function (obj) { - return Object.prototype.toString.call(obj) === "[object Array]"; - }; - - BASE.Object.Array = Array; - -})("MathJax"); - -/**********************************************************/ - -/* - * Create a callback function from various forms of data: - * - * MathJax.Callback(fn) -- callback to a function - * - * MathJax.Callback([fn]) -- callback to function - * MathJax.Callback([fn,data...]) - * -- callback to function with given data as arguments - * MathJax.Callback([object,fn]) - * -- call fn with object as "this" - * MathJax.Callback([object,fn,data...]) - * -- call fn with object as "this" and data as arguments - * MathJax.Callback(["method",object]) - * -- call method of object wth object as "this" - * MathJax.Callback(["method",object,data...]) - * -- as above, but with data as arguments to method - * - * MathJax.Callback({hook: fn, data: [...], object: this}) - * -- give function, data, and object to act as "this" explicitly - * - * MathJax.Callback("code") -- callback that compiles and executes a string - * - * MathJax.Callback([...],i) - * -- use slice of array starting at i and interpret - * result as above. (Used for passing "arguments" array - * and trimming initial arguments, if any.) - */ - -/* - * MathJax.Callback.After([...],cb1,cb2,...) - * -- make a callback that isn't called until all the other - * ones are called first. I.e., wait for a union of - * callbacks to occur before making the given callback. - */ - -/* - * MathJax.Callback.Queue([callback,...]) - * -- make a synchronized queue of commands that process - * sequentially, waiting for those that return uncalled - * callbacks. - */ - -/* - * MathJax.Callback.Signal(name) - * -- finds or creates a names signal, to which listeners - * can be attached and are signaled by messages posted - * to the signal. Responses can be asynchronous. - */ - -(function (BASENAME) { - var BASE = window[BASENAME]; - if (!BASE) {BASE = window[BASENAME] = {}} - var isArray = BASE.Object.isArray; - // - // Create a callback from an associative array - // - var CALLBACK = function (data) { - var cb = function () {return arguments.callee.execute.apply(arguments.callee,arguments)}; - for (var id in CALLBACK.prototype) { - if (CALLBACK.prototype.hasOwnProperty(id)) { - if (typeof(data[id]) !== 'undefined') {cb[id] = data[id]} - else {cb[id] = CALLBACK.prototype[id]} - } - } - cb.toString = CALLBACK.prototype.toString; - return cb; - }; - CALLBACK.prototype = { - isCallback: true, - hook: function () {}, - data: [], - object: window, - execute: function () { - if (!this.called || this.autoReset) { - this.called = !this.autoReset; - return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0))); - } - }, - reset: function () {delete this.called}, - toString: function () {return this.hook.toString.apply(this.hook,arguments)} - }; - var ISCALLBACK = function (f) { - return (typeof(f) === "function" && f.isCallback); - } - - // - // Evaluate a string in global context - // - var EVAL = function (code) {return eval.call(window,code)} - var TESTEVAL = function () { - EVAL("var __TeSt_VaR__ = 1"); // check if it works in global context - if (window.__TeSt_VaR__) { - try { delete window.__TeSt_VaR__; } // NOTE IE9 throws when in IE7 mode - catch (error) { window.__TeSt_VaR__ = null; } - } else { - if (window.execScript) { - // IE - EVAL = function (code) { - BASE.__code = code; - code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}"; - window.execScript(code); - var result = BASE.__result; delete BASE.__result; delete BASE.__code; - if (result instanceof Error) {throw result} - return result; - } - } else { - // Safari2 - EVAL = function (code) { - BASE.__code = code; - code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}"; - var head = (document.getElementsByTagName("head"))[0]; if (!head) {head = document.body} - var script = document.createElement("script"); - script.appendChild(document.createTextNode(code)); - head.appendChild(script); head.removeChild(script); - var result = BASE.__result; delete BASE.__result; delete BASE.__code; - if (result instanceof Error) {throw result} - return result; - } - } - } - TESTEVAL = null; - }; - - // - // Create a callback from various types of data - // - var USING = function (args,i) { - if (arguments.length > 1) { - if (arguments.length === 2 && !(typeof arguments[0] === 'function') && - arguments[0] instanceof Object && typeof arguments[1] === 'number') - {args = [].slice.call(args,i)} - else {args = [].slice.call(arguments,0)} - } - if (isArray(args) && args.length === 1) {args = args[0]} - if (typeof args === 'function') { - if (args.execute === CALLBACK.prototype.execute) {return args} - return CALLBACK({hook: args}); - } else if (isArray(args)) { - if (typeof(args[0]) === 'string' && args[1] instanceof Object && - typeof args[1][args[0]] === 'function') { - return CALLBACK({hook: args[1][args[0]], object: args[1], data: args.slice(2)}); - } else if (typeof args[0] === 'function') { - return CALLBACK({hook: args[0], data: args.slice(1)}); - } else if (typeof args[1] === 'function') { - return CALLBACK({hook: args[1], object: args[0], data: args.slice(2)}); - } - } else if (typeof(args) === 'string') { - if (TESTEVAL) TESTEVAL(); - return CALLBACK({hook: EVAL, data: [args]}); - } else if (args instanceof Object) { - return CALLBACK(args); - } else if (typeof(args) === 'undefined') { - return CALLBACK({}); - } - throw Error("Can't make callback from given data"); - }; - - // - // Wait for a given time to elapse and then perform the callback - // - var DELAY = function (time,callback) { - callback = USING(callback); - callback.timeout = setTimeout(callback,time); - return callback; - }; - - // - // Callback used by AFTER, QUEUE, and SIGNAL to check if calls have completed - // - var WAITFOR = function (callback,signal) { - callback = USING(callback); - if (!callback.called) {WAITSIGNAL(callback,signal); signal.pending++} - }; - var WAITEXECUTE = function () { - var signals = this.signal; delete this.signal; - this.execute = this.oldExecute; delete this.oldExecute; - var result = this.execute.apply(this,arguments); - if (ISCALLBACK(result) && !result.called) {WAITSIGNAL(result,signals)} else { - for (var i = 0, m = signals.length; i < m; i++) { - signals[i].pending--; - if (signals[i].pending <= 0) {signals[i].call()} - } - } - }; - var WAITSIGNAL = function (callback,signals) { - if (!isArray(signals)) {signals = [signals]} - if (!callback.signal) { - callback.oldExecute = callback.execute; - callback.execute = WAITEXECUTE; - callback.signal = signals; - } else if (signals.length === 1) {callback.signal.push(signals[0])} - else {callback.signal = callback.signal.concat(signals)} - }; - - // - // Create a callback that is called when a collection of other callbacks have - // all been executed. If the callback gets called immediately (i.e., the - // others are all already called), check if it returns another callback - // and return that instead. - // - var AFTER = function (callback) { - callback = USING(callback); - callback.pending = 0; - for (var i = 1, m = arguments.length; i < m; i++) - {if (arguments[i]) {WAITFOR(arguments[i],callback)}} - if (callback.pending === 0) { - var result = callback(); - if (ISCALLBACK(result)) {callback = result} - } - return callback; - }; - - // - // An array of prioritized hooks that are executed sequentially - // with a given set of data. - // - var HOOKS = MathJax.Object.Subclass({ - // - // Initialize the array and the auto-reset status - // - Init: function (reset) { - this.hooks = []; - this.remove = []; // used when hooks are removed during execution of list - this.reset = reset; - this.running = false; - }, - // - // Add a callback to the list, in priority order (default priority is 10) - // - Add: function (hook,priority) { - if (priority == null) {priority = 10} - if (!ISCALLBACK(hook)) {hook = USING(hook)} - hook.priority = priority; - var i = this.hooks.length; - while (i > 0 && priority < this.hooks[i-1].priority) {i--} - this.hooks.splice(i,0,hook); - return hook; - }, - Remove: function (hook) { - for (var i = 0, m = this.hooks.length; i < m; i++) { - if (this.hooks[i] === hook) { - if (this.running) {this.remove.push(i)} - else {this.hooks.splice(i,1)} - return; - } - } - }, - // - // Execute the list of callbacks, resetting them if requested. - // If any return callbacks, return a callback that will be - // executed when they all have completed. - // Remove any hooks that requested being removed during processing. - // - Execute: function () { - var callbacks = [{}]; - this.running = true; - for (var i = 0, m = this.hooks.length; i < m; i++) { - if (this.reset) {this.hooks[i].reset()} - var result = this.hooks[i].apply(window,arguments); - if (ISCALLBACK(result) && !result.called) {callbacks.push(result)} - } - this.running = false; - if (this.remove.length) {this.RemovePending()} - if (callbacks.length === 1) {return null} - if (callbacks.length === 2) {return callbacks[1]} - return AFTER.apply({},callbacks); - }, - // - // Remove hooks that asked to be removed during execution of list - // - RemovePending: function () { - this.remove = this.remove.sort(); - for (var i = this.remove.length-1; i >= 0; i--) {this.hooks.splice(i,1)} - this.remove = []; - } - - }); - - // - // Run an array of callbacks passing them the given data. - // (Legacy function, since this has been replaced by the HOOKS object). - // - var EXECUTEHOOKS = function (hooks,data,reset) { - if (!hooks) {return null} - if (!isArray(hooks)) {hooks = [hooks]} - if (!isArray(data)) {data = (data == null ? [] : [data])} - var handler = HOOKS(reset); - for (var i = 0, m = hooks.length; i < m; i++) {handler.Add(hooks[i])} - return handler.Execute.apply(handler,data); - }; - - // - // Command queue that performs commands in order, waiting when - // necessary for commands to complete asynchronousely - // - var QUEUE = BASE.Object.Subclass({ - // - // Create the queue and push any commands that are specified - // - Init: function () { - this.pending = this.running = 0; - this.queue = []; - this.Push.apply(this,arguments); - }, - // - // Add commands to the queue and run them. Adding a callback object - // (rather than a callback specification) queues a wait for that callback. - // Return the final callback for synchronization purposes. - // - Push: function () { - var callback; - for (var i = 0, m = arguments.length; i < m; i++) { - callback = USING(arguments[i]); - if (callback === arguments[i] && !callback.called) - {callback = USING(["wait",this,callback])} - this.queue.push(callback); - } - if (!this.running && !this.pending) {this.Process()} - return callback; - }, - // - // Process the command queue if we aren't waiting on another command - // - Process: function (queue) { - while (!this.running && !this.pending && this.queue.length) { - var callback = this.queue[0]; - queue = this.queue.slice(1); this.queue = []; - this.Suspend(); var result = callback(); this.Resume(); - if (queue.length) {this.queue = queue.concat(this.queue)} - if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)} - } - }, - // - // Suspend/Resume command processing on this queue - // - Suspend: function () {this.running++}, - Resume: function () {if (this.running) {this.running--}}, - // - // Used by WAITFOR to restart the queue when an action completes - // - call: function () {this.Process.apply(this,arguments)}, - wait: function (callback) {return callback} - }); - - // - // Create a named signal that listeners can attach to, to be signaled by - // postings made to the signal. Posts are queued if they occur while one - // is already in process. - // - var SIGNAL = QUEUE.Subclass({ - Init: function (name) { - QUEUE.prototype.Init.call(this); - this.name = name; - this.posted = []; // the messages posted so far - this.listeners = HOOKS(true); // those with interest in this signal - this.posting = false; - this.callback = null; - }, - // - // Post a message to the signal listeners, with callback for when complete - // - Post: function (message,callback,forget) { - callback = USING(callback); - if (this.posting || this.pending) { - this.Push(["Post",this,message,callback,forget]); - } else { - this.callback = callback; callback.reset(); - if (!forget) {this.posted.push(message)} - this.Suspend(); this.posting = true; - var result = this.listeners.Execute(message); - if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)} - this.Resume(); this.posting = false; - if (!this.pending) {this.call()} - } - return callback; - }, - // - // Clear the post history (so new listeners won't get old messages) - // - Clear: function (callback) { - callback = USING(callback); - if (this.posting || this.pending) { - callback = this.Push(["Clear",this,callback]); - } else { - this.posted = []; - callback(); - } - return callback; - }, - // - // Call the callback (all replies are in) and process the command queue - // - call: function () {this.callback(this); this.Process()}, - - // - // A listener calls this to register interest in the signal (so it will be called - // when posts occur). If ignorePast is true, it will not be sent the post history. - // - Interest: function (callback,ignorePast,priority) { - callback = USING(callback); - this.listeners.Add(callback,priority); - if (!ignorePast) { - for (var i = 0, m = this.posted.length; i < m; i++) { - callback.reset(); - var result = callback(this.posted[i]); - if (ISCALLBACK(result) && i === this.posted.length-1) {WAITFOR(result,this)} - } - } - return callback; - }, - // - // A listener calls this to remove itself from a signal - // - NoInterest: function (callback) { - this.listeners.Remove(callback); - }, - - // - // Hook a callback to a particular message on this signal - // - MessageHook: function (msg,callback,priority) { - callback = USING(callback); - if (!this.hooks) {this.hooks = {}; this.Interest(["ExecuteHooks",this])} - if (!this.hooks[msg]) {this.hooks[msg] = HOOKS(true)} - this.hooks[msg].Add(callback,priority); - for (var i = 0, m = this.posted.length; i < m; i++) - {if (this.posted[i] == msg) {callback.reset(); callback(this.posted[i])}} - callback.msg = msg; // keep track so we can remove it - return callback; - }, - // - // Execute the message hooks for the given message - // - ExecuteHooks: function (msg) { - var type = (isArray(msg) ? msg[0] : msg); - if (!this.hooks[type]) {return null} - return this.hooks[type].Execute(msg); - }, - // - // Remove a hook safely - // - RemoveHook: function (hook) { - this.hooks[hook.msg].Remove(hook); - } - - },{ - signals: {}, // the named signals - find: function (name) { - if (!SIGNAL.signals[name]) {SIGNAL.signals[name] = new SIGNAL(name)} - return SIGNAL.signals[name]; - } - }); - - // - // The main entry-points - // - BASE.Callback = BASE.CallBack = USING; - BASE.Callback.Delay = DELAY; - BASE.Callback.After = AFTER; - BASE.Callback.Queue = QUEUE; - BASE.Callback.Signal = SIGNAL.find; - BASE.Callback.Hooks = HOOKS; - BASE.Callback.ExecuteHooks = EXECUTEHOOKS; -})("MathJax"); - - -/**********************************************************/ - -(function (BASENAME) { - var BASE = window[BASENAME]; - if (!BASE) {BASE = window[BASENAME] = {}} - - var isSafari2 = (navigator.vendor === "Apple Computer, Inc." && - typeof navigator.vendorSub === "undefined"); - var sheets = 0; // used by Safari2 - - // - // Update sheets count and look up the head object - // - var HEAD = function (head) { - if (document.styleSheets && document.styleSheets.length > sheets) - {sheets = document.styleSheets.length} - if (!head) { - head = document.head || ((document.getElementsByTagName("head"))[0]); - if (!head) {head = document.body} - } - return head; - }; - - // - // Remove scripts that are completed so they don't clutter up the HEAD. - // This runs via setTimeout since IE7 can't remove the script while it is running. - // - var SCRIPTS = []; // stores scripts to be removed after a delay - var REMOVESCRIPTS = function () { - for (var i = 0, m = SCRIPTS.length; i < m; i++) {BASE.Ajax.head.removeChild(SCRIPTS[i])} - SCRIPTS = []; - }; - - var PATH = {}; - PATH[BASENAME] = ""; // empty path gets the root URL - PATH.a11y = '[MathJax]/extensions/a11y'; // a11y extensions - PATH.Contrib = "https://cdn.mathjax.org/mathjax/contrib"; // the third-party extensions - - BASE.Ajax = { - loaded: {}, // files already loaded - loading: {}, // files currently in process of loading - loadHooks: {}, // hooks to call when files are loaded - timeout: 15*1000, // timeout for loading of files (15 seconds) - styleDelay: 1, // delay to use before styles are available - config: { - root: "", // URL of root directory to load from - path: PATH // paths to named URL's (e.g., [MathJax]/...) - }, - params: {}, // filled in from MathJax.js?... - - STATUS: { - OK: 1, // file is loading or did load OK - ERROR: -1 // file timed out during load - }, - - // - // Return a complete URL to a file (replacing any root names) - // - fileURL: function (file) { - var match; - while ((match = file.match(/^\[([-._a-z0-9]+)\]/i)) && PATH.hasOwnProperty(match[1])) { - file = (PATH[match[1]]||this.config.root) + file.substr(match[1].length+2); - } - return file; - }, - // - // Replace root names if URL includes one - // - fileName: function (url) { - var root = this.config.root; - if (url.substr(0,root.length) === root) {url = "["+BASENAME+"]"+url.substr(root.length)} - do { - var recheck = false; - for (var id in PATH) {if (PATH.hasOwnProperty(id) && PATH[id]) { - if (url.substr(0,PATH[id].length) === PATH[id]) { - url = "["+id+"]"+url.substr(PATH[id].length); - recheck = true; - break; - } - }} - } while (recheck); - return url; - }, - // - // Cache-breaking revision number for file - // - fileRev: function (file) { - var V = BASE.cdnFileVersions[file] || BASE.cdnVersion || ''; - if (V) {V = "?V="+V} - return V; - }, - urlRev: function (file) {return this.fileURL(file)+this.fileRev(file)}, - - // - // Load a file if it hasn't been already. - // Make sure the file URL is "safe"? - // - Require: function (file,callback) { - callback = BASE.Callback(callback); var type; - if (file instanceof Object) { - for (var i in file) - {if (file.hasOwnProperty(i)) {type = i.toUpperCase(); file = file[i]}} - } else {type = file.split(/\./).pop().toUpperCase()} - if (this.params.noContrib && file.substr(0,9) === "[Contrib]") { - callback(this.STATUS.ERROR); - } else { - file = this.fileURL(file); - // FIXME: check that URL is OK - if (this.loaded[file]) { - callback(this.loaded[file]); - } else { - var FILE = {}; FILE[type] = file; - this.Load(FILE,callback); - } - } - return callback; - }, - - // - // Load a file regardless of where it is and whether it has - // already been loaded. - // - Load: function (file,callback) { - callback = BASE.Callback(callback); var type; - if (file instanceof Object) { - for (var i in file) - {if (file.hasOwnProperty(i)) {type = i.toUpperCase(); file = file[i]}} - } else {type = file.split(/\./).pop().toUpperCase()} - file = this.fileURL(file); - if (this.loading[file]) { - this.addHook(file,callback); - } else { - this.head = HEAD(this.head); - if (this.loader[type]) {this.loader[type].call(this,file,callback)} - else {throw Error("Can't load files of type "+type)} - } - return callback; - }, - - // - // Register a load hook for a particular file (it will be called when - // loadComplete() is called for that file) - // - LoadHook: function (file,callback,priority) { - callback = BASE.Callback(callback); - if (file instanceof Object) - {for (var i in file) {if (file.hasOwnProperty(i)) {file = file[i]}}} - file = this.fileURL(file); - if (this.loaded[file]) {callback(this.loaded[file])} - else {this.addHook(file,callback,priority)} - return callback; - }, - addHook: function (file,callback,priority) { - if (!this.loadHooks[file]) {this.loadHooks[file] = MathJax.Callback.Hooks()} - this.loadHooks[file].Add(callback,priority); - callback.file = file; - }, - removeHook: function (hook) { - if (this.loadHooks[hook.file]) { - this.loadHooks[hook.file].Remove(hook); - if (!this.loadHooks[hook.file].hooks.length) {delete this.loadHooks[hook.file]} - } - }, - - // - // Used when files are combined in a preloading configuration file - // - Preloading: function () { - for (var i = 0, m = arguments.length; i < m; i++) { - var file = this.fileURL(arguments[i]); - if (!this.loading[file]) {this.loading[file] = {preloaded: true}} - } - }, - - // - // Code used to load the various types of files - // (JS for JavaScript, CSS for style sheets) - // - loader: { - // - // Create a SCRIPT tag to load the file - // - JS: function (file,callback) { - var name = this.fileName(file); - var script = document.createElement("script"); - var timeout = BASE.Callback(["loadTimeout",this,file]); - this.loading[file] = { - callback: callback, - timeout: setTimeout(timeout,this.timeout), - status: this.STATUS.OK, - script: script - }; - // - // Add this to the structure above after it is created to prevent recursion - // when loading the initial localization file (before loading messsage is available) - // - this.loading[file].message = BASE.Message.File(name); - script.onerror = timeout; // doesn't work in IE and no apparent substitute - script.type = "text/javascript"; - script.src = file+this.fileRev(name); - this.head.appendChild(script); - }, - // - // Create a LINK tag to load the style sheet - // - CSS: function (file,callback) { - var name = this.fileName(file); - var link = document.createElement("link"); - link.rel = "stylesheet"; link.type = "text/css"; - link.href = file+this.fileRev(name); - this.loading[file] = { - callback: callback, - message: BASE.Message.File(name), - status: this.STATUS.OK - }; - this.head.appendChild(link); - this.timer.create.call(this,[this.timer.file,file],link); - } - }, - - // - // Timing code for checking when style sheets are available. - // - timer: { - // - // Create the timing callback and start the timing loop. - // We use a delay because some browsers need it to allow the styles - // to be processed. - // - create: function (callback,node) { - callback = BASE.Callback(callback); - if (node.nodeName === "STYLE" && node.styleSheet && - typeof(node.styleSheet.cssText) !== 'undefined') { - callback(this.STATUS.OK); // MSIE processes style immediately, but doesn't set its styleSheet! - } else if (window.chrome && node.nodeName === "LINK") { - callback(this.STATUS.OK); // Chrome doesn't give access to cssRules for stylesheet in - // a link node, so we can't detect when it is loaded. - } else if (isSafari2) { - this.timer.start(this,[this.timer.checkSafari2,sheets++,callback],this.styleDelay); - } else { - this.timer.start(this,[this.timer.checkLength,node,callback],this.styleDelay); - } - return callback; - }, - // - // Start the timer for the given callback checker - // - start: function (AJAX,check,delay,timeout) { - check = BASE.Callback(check); - check.execute = this.execute; check.time = this.time; - check.STATUS = AJAX.STATUS; check.timeout = timeout || AJAX.timeout; - check.delay = check.total = delay || 0; - if (delay) {setTimeout(check,delay)} else {check()} - }, - // - // Increment the time total, increase the delay - // and test if we are past the timeout time. - // - time: function (callback) { - this.total += this.delay; - this.delay = Math.floor(this.delay * 1.05 + 5); - if (this.total >= this.timeout) {callback(this.STATUS.ERROR); return 1} - return 0; - }, - // - // For JS file loads, call the proper routine according to status - // - file: function (file,status) { - if (status < 0) {BASE.Ajax.loadTimeout(file)} else {BASE.Ajax.loadComplete(file)} - }, - // - // Call the hook with the required data - // - execute: function () {this.hook.call(this.object,this,this.data[0],this.data[1])}, - // - // Safari2 doesn't set the link's stylesheet, so we need to look in the - // document.styleSheets array for the new sheet when it is created - // - checkSafari2: function (check,length,callback) { - if (check.time(callback)) return; - if (document.styleSheets.length > length && - document.styleSheets[length].cssRules && - document.styleSheets[length].cssRules.length) - {callback(check.STATUS.OK)} else {setTimeout(check,check.delay)} - }, - // - // Look for the stylesheets rules and check when they are defined - // and no longer of length zero. (This assumes there actually ARE - // some rules in the stylesheet.) - // - checkLength: function (check,node,callback) { - if (check.time(callback)) return; - var isStyle = 0; var sheet = (node.sheet || node.styleSheet); - try {if ((sheet.cssRules||sheet.rules||[]).length > 0) {isStyle = 1}} catch(err) { - if (err.message.match(/protected variable|restricted URI/)) {isStyle = 1} - else if (err.message.match(/Security error/)) { - // Firefox3 gives "Security error" for missing files, so - // can't distinguish that from OK files on remote servers. - // or OK files in different directory from local files. - isStyle = 1; // just say it is OK (can't really tell) - } - } - if (isStyle) { - // Opera 9.6 requires this setTimeout - setTimeout(BASE.Callback([callback,check.STATUS.OK]),0); - } else { - setTimeout(check,check.delay); - } - } - }, - - // - // JavaScript code must call this when they are completely initialized - // (this allows them to perform asynchronous actions before indicating - // that they are complete). - // - loadComplete: function (file) { - file = this.fileURL(file); - var loading = this.loading[file]; - if (loading && !loading.preloaded) { - BASE.Message.Clear(loading.message); - clearTimeout(loading.timeout); - if (loading.script) { - if (SCRIPTS.length === 0) {setTimeout(REMOVESCRIPTS,0)} - SCRIPTS.push(loading.script); - } - this.loaded[file] = loading.status; delete this.loading[file]; - this.addHook(file,loading.callback); - } else { - if (loading) {delete this.loading[file]} - this.loaded[file] = this.STATUS.OK; - loading = {status: this.STATUS.OK} - } - if (!this.loadHooks[file]) {return null} - return this.loadHooks[file].Execute(loading.status); - }, - - // - // If a file fails to load within the timeout period (or the onerror handler - // is called), this routine runs to signal the error condition. - // - loadTimeout: function (file) { - if (this.loading[file].timeout) {clearTimeout(this.loading[file].timeout)} - this.loading[file].status = this.STATUS.ERROR; - this.loadError(file); - this.loadComplete(file); - }, - - // - // The default error hook for file load failures - // - loadError: function (file) { - BASE.Message.Set(["LoadFailed","File failed to load: %1",file],null,2000); - BASE.Hub.signal.Post(["file load error",file]); - }, - - // - // Defines a style sheet from a hash of style declarations (key:value pairs - // where the key is the style selector and the value is a hash of CSS attributes - // and values). - // - Styles: function (styles,callback) { - var styleString = this.StyleString(styles); - if (styleString === "") { - callback = BASE.Callback(callback); - callback(); - } else { - var style = document.createElement("style"); style.type = "text/css"; - this.head = HEAD(this.head); - this.head.appendChild(style); - if (style.styleSheet && typeof(style.styleSheet.cssText) !== 'undefined') { - style.styleSheet.cssText = styleString; - } else { - style.appendChild(document.createTextNode(styleString)); - } - callback = this.timer.create.call(this,callback,style); - } - return callback; - }, - - // - // Create a stylesheet string from a style declaration object - // - StyleString: function (styles) { - if (typeof(styles) === 'string') {return styles} - var string = "", id, style; - for (id in styles) {if (styles.hasOwnProperty(id)) { - if (typeof styles[id] === 'string') { - string += id + " {"+styles[id]+"}\n"; - } else if (BASE.Object.isArray(styles[id])) { - for (var i = 0; i < styles[id].length; i++) { - style = {}; style[id] = styles[id][i]; - string += this.StyleString(style); - } - } else if (id.substr(0,6) === '@media') { - string += id + " {"+this.StyleString(styles[id])+"}\n"; - } else if (styles[id] != null) { - style = []; - for (var name in styles[id]) {if (styles[id].hasOwnProperty(name)) { - if (styles[id][name] != null) - {style[style.length] = name + ': ' + styles[id][name]} - }} - string += id +" {"+style.join('; ')+"}\n"; - } - }} - return string; - } - }; - -})("MathJax"); - -/**********************************************************/ - -MathJax.HTML = { - // - // Create an HTML element with given attributes and content. - // The def parameter is an (optional) object containing key:value pairs - // of the attributes and their values, and contents is an (optional) - // array of strings to be inserted as text, or arrays of the form - // [type,def,contents] that describes an HTML element to be inserted - // into the current element. Thus the contents can describe a complete - // HTML snippet of arbitrary complexity. E.g.: - // - // MathJax.HTML.Element("span",{id:"mySpan",style{"font-style":"italic"}},[ - // "(See the ",["a",{href:"http://www.mathjax.org/"},["MathJax home page"]], - // " for more details.)"]); - // - Element: function (type,def,contents) { - var obj = document.createElement(type), id; - if (def) { - if (def.hasOwnProperty("style")) { - var style = def.style; def.style = {}; - for (id in style) {if (style.hasOwnProperty(id)) - {def.style[id.replace(/-([a-z])/g,this.ucMatch)] = style[id]}} - } - MathJax.Hub.Insert(obj,def); - for (id in def) { - if (id === "role" || id.substr(0,5) === "aria-") obj.setAttribute(id,def[id]); - } - } - if (contents) { - if (!MathJax.Object.isArray(contents)) {contents = [contents]} - for (var i = 0, m = contents.length; i < m; i++) { - if (MathJax.Object.isArray(contents[i])) { - obj.appendChild(this.Element(contents[i][0],contents[i][1],contents[i][2])); - } else if (type === "script") { // IE throws an error if script is added as a text node - this.setScript(obj, contents[i]); - } else { - obj.appendChild(document.createTextNode(contents[i])); - } - } - } - return obj; - }, - ucMatch: function (match,c) {return c.toUpperCase()}, - addElement: function (span,type,def,contents) {return span.appendChild(this.Element(type,def,contents))}, - TextNode: function (text) {return document.createTextNode(text)}, - addText: function (span,text) {return span.appendChild(this.TextNode(text))}, - - // - // Set and get the text of a script - // - setScript: function (script,text) { - if (this.setScriptBug) {script.text = text} else { - while (script.firstChild) {script.removeChild(script.firstChild)} - this.addText(script,text); - } - }, - getScript: function (script) { - var text = (script.text === "" ? script.innerHTML : script.text); - return text.replace(/^\s+/,"").replace(/\s+$/,""); - }, - - // - // Manage cookies - // - Cookie: { - prefix: "mjx", - expires: 365, - - // - // Save an object as a named cookie - // - Set: function (name,def) { - var keys = []; - if (def) { - for (var id in def) {if (def.hasOwnProperty(id)) { - keys.push(id+":"+def[id].toString().replace(/&/g,"&&")); - }} - } - var cookie = this.prefix+"."+name+"="+escape(keys.join('&;')); - if (this.expires) { - var time = new Date(); time.setDate(time.getDate() + this.expires); - cookie += '; expires='+time.toGMTString(); - } - try {document.cookie = cookie+"; path=/"} catch (err) {} // ignore errors saving cookies - }, - - // - // Get the contents of a named cookie and incorporate - // it into the given object (or return a fresh one) - // - Get: function (name,obj) { - if (!obj) {obj = {}} - var pattern = new RegExp("(?:^|;\\s*)"+this.prefix+"\\."+name+"=([^;]*)(?:;|$)"); - var match; - try {match = pattern.exec(document.cookie)} catch (err) {}; // ignore errors reading cookies - if (match && match[1] !== "") { - var keys = unescape(match[1]).split('&;'); - for (var i = 0, m = keys.length; i < m; i++) { - match = keys[i].match(/([^:]+):(.*)/); - var value = match[2].replace(/&&/g,'&'); - if (value === "true") {value = true} else if (value === "false") {value = false} - else if (value.match(/^-?(\d+(\.\d+)?|\.\d+)$/)) {value = parseFloat(value)} - obj[match[1]] = value; - } - } - return obj; - } - } - -}; - - -/**********************************************************/ - -MathJax.Localization = { - - locale: "en", - directory: "[MathJax]/localization", - strings: { - // Currently, this list is not modified by the MathJax-i18n script. You can - // run the following command in MathJax/unpacked/localization to update it: - // - // find . -name "*.js" | xargs grep menuTitle\: | grep -v qqq | sed 's/^\.\/\(.*\)\/.*\.js\: / "\1"\: \{/' | sed 's/,$/\},/' | sed 's/"English"/"English", isLoaded: true/' > tmp ; sort tmp > tmp2 ; sed '$ s/,$//' tmp2 ; rm tmp* - // - // This only takes languages with localization data so you must also add - // the languages that use a remap but are not translated at all. - // - "ast": {menuTitle: "asturianu"}, - "bg": {menuTitle: "\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438"}, - "bcc": {menuTitle: "\u0628\u0644\u0648\u0686\u06CC"}, - "br": {menuTitle: "brezhoneg"}, - "ca": {menuTitle: "catal\u00E0"}, - "cdo": {menuTitle: "M\u00ECng-d\u0115\u0324ng-ng\u1E73\u0304"}, - "cs": {menuTitle: "\u010De\u0161tina"}, - "da": {menuTitle: "dansk"}, - "de": {menuTitle: "Deutsch"}, - "diq": {menuTitle: "Zazaki"}, - "en": {menuTitle: "English", isLoaded: true}, - "eo": {menuTitle: "Esperanto"}, - "es": {menuTitle: "espa\u00F1ol"}, - "fa": {menuTitle: "\u0641\u0627\u0631\u0633\u06CC"}, - "fi": {menuTitle: "suomi"}, - "fr": {menuTitle: "fran\u00E7ais"}, - "gl": {menuTitle: "galego"}, - "he": {menuTitle: "\u05E2\u05D1\u05E8\u05D9\u05EA"}, - "ia": {menuTitle: "interlingua"}, - "it": {menuTitle: "italiano"}, - "ja": {menuTitle: "\u65E5\u672C\u8A9E"}, - "kn": {menuTitle: "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1"}, - "ko": {menuTitle: "\uD55C\uAD6D\uC5B4"}, - "lb": {menuTitle: "L\u00EBtzebuergesch"}, - "lki": {menuTitle: "\u0644\u06D5\u06A9\u06CC"}, - "lt": {menuTitle: "lietuvi\u0173"}, - "mk": {menuTitle: "\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438"}, - "nl": {menuTitle: "Nederlands"}, - "oc": {menuTitle: "occitan"}, - "pl": {menuTitle: "polski"}, - "pt": {menuTitle: "portugus\u00EA"}, - "pt-br": {menuTitle: "portugu\u00EAs do Brasil"}, - "ru": {menuTitle: "\u0440\u0443\u0441\u0441\u043A\u0438\u0439"}, - "sco": {menuTitle: "Scots"}, - "scn": {menuTitle: "sicilianu"}, - "sl": {menuTitle: "sloven\u0161\u010Dina"}, - "sv": {menuTitle: "svenska"}, - "tr": {menuTitle: "T\u00FCrk\u00E7e"}, - "uk": {menuTitle: "\u0443\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"}, - "vi": {menuTitle: "Ti\u1EBFng Vi\u1EC7t"}, - "zh-hans": {menuTitle: "\u4E2D\u6587\uFF08\u7B80\u4F53\uFF09"} - }, - - // - // The pattern for substitution escapes: - // %n or %{n} or %{plural:%n|option1|option1|...} or %c - // - pattern: /%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g, - - SPLIT: ("axb".split(/(x)/).length === 3 ? - function (string,regex) {return string.split(regex)} : - // - // IE8 and below don't do split() correctly when the pattern includes - // parentheses (the split should include the matched exrepssions). - // So implement it by hand here. - // - function (string,regex) { - var result = [], match, last = 0; - regex.lastIndex = 0; - while ((match = regex.exec(string))) { - result.push(string.substr(last,match.index-last)); - result.push.apply(result,match.slice(1)); - last = match.index + match[0].length; - } - result.push(string.substr(last)); - return result; - }), - - _: function (id,phrase) { - if (MathJax.Object.isArray(phrase)) {return this.processSnippet(id,phrase)} - return this.processString(this.lookupPhrase(id,phrase),[].slice.call(arguments,2)); - }, - - processString: function (string,args,domain) { - // - // Process arguments for substitution - // If the argument is a snippet (and we are processing snippets) do so, - // Otherwise, if it is a number, convert it for the lacale - // - var i, m, isArray = MathJax.Object.isArray; - for (i = 0, m = args.length; i < m; i++) { - if (domain && isArray(args[i])) {args[i] = this.processSnippet(domain,args[i])} - } - // - // Split string at escapes and process them individually - // - var parts = this.SPLIT(string,this.pattern); - for (i = 1, m = parts.length; i < m; i += 2) { - var c = parts[i].charAt(0); // first char will be { or \d or a char to be kept literally - if (c >= "0" && c <= "9") { // %n - parts[i] = args[parts[i]-1]; - if (typeof parts[i] === "number") parts[i] = this.number(parts[i]); - } else if (c === "{") { // %{n} or %{plural:%n|...} - c = parts[i].substr(1); - if (c >= "0" && c <= "9") { // %{n} - parts[i] = args[parts[i].substr(1,parts[i].length-2)-1]; - if (typeof parts[i] === "number") parts[i] = this.number(parts[i]); - } else { // %{plural:%n|...} - var match = parts[i].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/); - if (match) { - if (match[1] === "plural") { - var n = args[match[2]-1]; - if (typeof n === "undefined") { - parts[i] = "???"; // argument doesn't exist - } else { - n = this.plural(n) - 1; // index of the form to use - var plurals = match[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/); // the parts (replacing %| with a special character) - if (n >= 0 && n < plurals.length) { - parts[i] = this.processString(plurals[n].replace(/\uEFEF/g,"|"),args,domain); - } else { - parts[i] = "???"; // no string for this index - } - } - } else {parts[i] = "%"+parts[i]} // not "plural", put back the % and leave unchanged - } - } - } - if (parts[i] == null) {parts[i] = "???"} - } - // - // If we are not forming a snippet, return the completed string - // - if (!domain) {return parts.join("")} - // - // We need to return an HTML snippet, so buld it from the - // broken up string with inserted parts (that could be snippets) - // - var snippet = [], part = ""; - for (i = 0; i < m; i++) { - part += parts[i]; i++; // add the string and move on to substitution result - if (i < m) { - if (isArray(parts[i])) { // substitution was a snippet - snippet.push(part); // add the accumulated string - snippet = snippet.concat(parts[i]); // concatenate the substution snippet - part = ""; // start accumulating a new string - } else { // substitution was a string - part += parts[i]; // add to accumulating string - } - } - } - if (part !== "") {snippet.push(part)} // add final string - return snippet; - }, - - processSnippet: function (domain,snippet) { - var result = []; // the new snippet - // - // Look through the original snippet for - // strings or snippets to translate - // - for (var i = 0, m = snippet.length; i < m; i++) { - if (MathJax.Object.isArray(snippet[i])) { - // - // This could be a sub-snippet: - // ["tag"] or ["tag",{properties}] or ["tag",{properties},snippet] - // Or it could be something to translate: - // [id,string,args] or [domain,snippet] - var data = snippet[i]; - if (typeof data[1] === "string") { // [id,string,args] - var id = data[0]; if (!MathJax.Object.isArray(id)) {id = [domain,id]} - var phrase = this.lookupPhrase(id,data[1]); - result = result.concat(this.processMarkdown(phrase,data.slice(2),domain)); - } else if (MathJax.Object.isArray(data[1])) { // [domain,snippet] - result = result.concat(this.processSnippet.apply(this,data)); - } else if (data.length >= 3) { // ["tag",{properties},snippet] - result.push([data[0],data[1],this.processSnippet(domain,data[2])]); - } else { // ["tag"] or ["tag",{properties}] - result.push(snippet[i]); - } - } else { // a string - result.push(snippet[i]); - } - } - return result; - }, - - markdownPattern: /(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/, - // %c or *bold*, **italics**, ***bold-italics***, or `code`, or [link](url) - - processMarkdown: function (phrase,args,domain) { - var result = [], data; - // - // Split the string by the Markdown pattern - // (the text blocks are separated by - // c,stars,star-text,backtics,code-text,link-text,URL). - // Start with teh first text string from the split. - // - var parts = phrase.split(this.markdownPattern); - var string = parts[0]; - // - // Loop through the matches and process them - // - for (var i = 1, m = parts.length; i < m; i += 8) { - if (parts[i+1]) { // stars (for bold/italic) - // - // Select the tag to use by number of stars (three stars requires two tags) - // - data = this.processString(parts[i+2],args,domain); - if (!MathJax.Object.isArray(data)) {data = [data]} - data = [["b","i","i"][parts[i+1].length-1],{},data]; // number of stars determines type - if (parts[i+1].length === 3) {data = ["b",{},data]} // bold-italic - } else if (parts[i+3]) { // backtics (for code) - // - // Remove one leading or trailing space, and process substitutions - // Make a tag - // - data = this.processString(parts[i+4].replace(/^\s/,"").replace(/\s$/,""),args,domain); - if (!MathJax.Object.isArray(data)) {data = [data]} - data = ["code",{},data]; - } else if (parts[i+5]) { // hyperlink - // - // Process the link text, and make an tag with the URL - // - data = this.processString(parts[i+5],args,domain); - if (!MathJax.Object.isArray(data)) {data = [data]} - data = ["a",{href:this.processString(parts[i+6],args),target:"_blank"},data]; - } else { - // - // Escaped character (%c) gets added into the string. - // - string += parts[i]; data = null; - } - // - // If there is a tag to insert, - // Add any pending string, then push the tag - // - if (data) { - result = this.concatString(result,string,args,domain); - result.push(data); string = ""; - } - // - // Process the string that follows matches pattern - // - if (parts[i+7] !== "") {string += parts[i+7]} - }; - // - // Add any pending string and return the resulting snippet - // - result = this.concatString(result,string,args,domain); - return result; - }, - concatString: function (result,string,args,domain) { - if (string != "") { - // - // Process the substutions. - // If the result is not a snippet, turn it into one. - // Then concatenate the snippet to the current one - // - string = this.processString(string,args,domain); - if (!MathJax.Object.isArray(string)) {string = [string]} - result = result.concat(string); - } - return result; - }, - - lookupPhrase: function (id,phrase,domain) { - // - // Get the domain and messageID - // - if (!domain) {domain = "_"} - if (MathJax.Object.isArray(id)) {domain = (id[0] || "_"); id = (id[1] || "")} - // - // Check if the data is available and if not, - // load it and throw a restart error so the calling - // code can wait for the load and try again. - // - var load = this.loadDomain(domain); - if (load) {MathJax.Hub.RestartAfter(load)} - // - // Look up the message in the localization data - // (if not found, the original English is used) - // - var localeData = this.strings[this.locale]; - if (localeData) { - if (localeData.domains && domain in localeData.domains) { - var domainData = localeData.domains[domain]; - if (domainData.strings && id in domainData.strings) - {phrase = domainData.strings[id]} - } - } - // - // return the translated phrase - // - return phrase; - }, - - // - // Load a langauge data file from the proper - // directory and file. - // - loadFile: function (file,data,callback) { - callback = MathJax.Callback(callback); - file = (data.file || file); // the data's file name or the default name - if (!file.match(/\.js$/)) {file += ".js"} // add .js if needed - // - // Add the directory if the file doesn't - // contain a full URL already. - // - if (!file.match(/^([a-z]+:|\[MathJax\])/)) { - var dir = (this.strings[this.locale].directory || - this.directory + "/" + this.locale || - "[MathJax]/localization/" + this.locale); - file = dir + "/" + file; - } - // - // Load the file and mark the data as loaded (even if it - // failed to load, so we don't continue to try to load it - // over and over). - // - var load = MathJax.Ajax.Require(file,function () {data.isLoaded = true; return callback()}); - // - // Return the callback if needed, otherwise null. - // - return (load.called ? null : load); - }, - - // - // Check to see if the localization data are loaded - // for the given domain; if not, load the data file, - // and return a callback for the loading operation. - // Otherwise return null (data are loaded). - // - loadDomain: function (domain,callback) { - var load, localeData = this.strings[this.locale]; - if (localeData) { - if (!localeData.isLoaded) { - load = this.loadFile(this.locale,localeData); - if (load) { - return MathJax.Callback.Queue( - load,["loadDomain",this,domain] // call again to load domain - ).Push(callback||{}); - } - } - if (localeData.domains && domain in localeData.domains) { - var domainData = localeData.domains[domain]; - if (!domainData.isLoaded) { - load = this.loadFile(domain,domainData); - if (load) {return MathJax.Callback.Queue(load).Push(callback)} - } - } - } - // localization data are loaded, so just do the callback - return MathJax.Callback(callback)(); - }, - - // - // Perform a function, properly handling - // restarts due to localization file loads. - // - // Note that this may return before the function - // has been called successfully, so you should - // consider fn as running asynchronously. (Callbacks - // can be used to synchronize it with other actions.) - // - Try: function (fn) { - fn = MathJax.Callback(fn); fn.autoReset = true; - try {fn()} catch (err) { - if (!err.restart) {throw err} - MathJax.Callback.After(["Try",this,fn],err.restart); - } - }, - - // - // Reset the current language - // - resetLocale: function(locale) { - // Selection algorithm: - // 1) Downcase locale name (e.g. "en-US" => "en-us") - // 2) Try a parent language (e.g. "en-us" => "en") - // 3) Try the fallback specified in the data (e.g. "pt" => "pt-br") - // 4) Otherwise don't change the locale. - if (!locale) return; - locale = locale.toLowerCase(); - while (!this.strings[locale]) { - var dashPos = locale.lastIndexOf("-"); - if (dashPos === -1) return; - locale = locale.substring(0, dashPos); - } - var remap = this.strings[locale].remap; - this.locale = remap ? remap : locale; - }, - - // - // Set the current language - // - setLocale: function(locale) { - this.resetLocale(locale); - if (MathJax.Menu) {this.loadDomain("MathMenu")} - }, - - // - // Add or update a language or domain - // - addTranslation: function (locale,domain,definition) { - var data = this.strings[locale], isNew = false; - if (!data) {data = this.strings[locale] = {}; isNew = true} - if (!data.domains) {data.domains = {}} - if (domain) { - if (!data.domains[domain]) {data.domains[domain] = {}} - data = data.domains[domain]; - } - MathJax.Hub.Insert(data,definition); - if (isNew && MathJax.Menu.menu) {MathJax.Menu.CreateLocaleMenu()} - }, - - // - // Set CSS for an element based on font requirements - // - setCSS: function (div) { - var locale = this.strings[this.locale]; - if (locale) { - if (locale.fontFamily) {div.style.fontFamily = locale.fontFamily} - if (locale.fontDirection) { - div.style.direction = locale.fontDirection; - if (locale.fontDirection === "rtl") {div.style.textAlign = "right"} - } - } - return div; - }, - - // - // Get the language's font family or direction - // - fontFamily: function () { - var locale = this.strings[this.locale]; - return (locale ? locale.fontFamily : null); - }, - fontDirection: function () { - var locale = this.strings[this.locale]; - return (locale ? locale.fontDirection : null); - }, - - // - // Get the language's plural index for a number - // - plural: function (n) { - var locale = this.strings[this.locale]; - if (locale && locale.plural) {return locale.plural(n)} - // default - if (n == 1) {return 1} // one - return 2; // other - }, - - // - // Convert a number to language-specific form - // - number: function(n) { - var locale = this.strings[this.locale]; - if (locale && locale.number) {return locale.number(n)} - // default - return n; - } -}; - - -/**********************************************************/ - -MathJax.Message = { - ready: false, // used to tell when the styles are available - log: [{}], current: null, - textNodeBug: (navigator.vendor === "Apple Computer, Inc." && - typeof navigator.vendorSub === "undefined") || - (window.hasOwnProperty && window.hasOwnProperty("konqueror")), // Konqueror displays some gibberish with text.nodeValue = "..." - - styles: { - "#MathJax_Message": { - position: "fixed", left: "1px", bottom: "2px", - 'background-color': "#E6E6E6", border: "1px solid #959595", - margin: "0px", padding: "2px 8px", - 'z-index': "102", color: "black", 'font-size': "80%", - width: "auto", 'white-space': "nowrap" - }, - - "#MathJax_MSIE_Frame": { - position: "absolute", - top:0, left: 0, width: "0px", 'z-index': 101, - border: "0px", margin: "0px", padding: "0px" - } - }, - - browsers: { - MSIE: function (browser) { - MathJax.Message.msieFixedPositionBug = ((document.documentMode||0) < 7); - if (MathJax.Message.msieFixedPositionBug) - {MathJax.Hub.config.styles["#MathJax_Message"].position = "absolute"} - MathJax.Message.quirks = (document.compatMode === "BackCompat"); - }, - Chrome: function (browser) { - MathJax.Hub.config.styles["#MathJax_Message"].bottom = "1.5em"; - MathJax.Hub.config.styles["#MathJax_Message"].left = "1em"; - } - }, - - Init: function (styles) { - if (styles) {this.ready = true} - if (!document.body || !this.ready) {return false} - // - // ASCIIMathML replaces the entire page with a copy of itself (@#!#%@!!) - // so check that this.div is still part of the page, otherwise look up - // the copy and use that. - // - if (this.div && this.div.parentNode == null) { - this.div = document.getElementById("MathJax_Message"); - if (this.div) {this.text = this.div.firstChild} - } - if (!this.div) { - var frame = document.body; - if (this.msieFixedPositionBug && window.attachEvent) { - frame = this.frame = this.addDiv(document.body); frame.removeAttribute("id"); - frame.style.position = "absolute"; - frame.style.border = frame.style.margin = frame.style.padding = "0px"; - frame.style.zIndex = "101"; frame.style.height = "0px"; - frame = this.addDiv(frame); - frame.id = "MathJax_MSIE_Frame"; - window.attachEvent("onscroll",this.MoveFrame); - window.attachEvent("onresize",this.MoveFrame); - this.MoveFrame(); - } - this.div = this.addDiv(frame); this.div.style.display = "none"; - this.text = this.div.appendChild(document.createTextNode("")); - } - return true; - }, - - addDiv: function (parent) { - var div = document.createElement("div"); - div.id = "MathJax_Message"; - if (parent.firstChild) {parent.insertBefore(div,parent.firstChild)} - else {parent.appendChild(div)} - return div; - }, - - MoveFrame: function () { - var body = (MathJax.Message.quirks ? document.body : document.documentElement); - var frame = MathJax.Message.frame; - frame.style.left = body.scrollLeft + 'px'; - frame.style.top = body.scrollTop + 'px'; - frame.style.width = body.clientWidth + 'px'; - frame = frame.firstChild; - frame.style.height = body.clientHeight + 'px'; - }, - - localize: function (message) { - return MathJax.Localization._(message,message); - }, - - filterText: function (text,n,id) { - if (MathJax.Hub.config.messageStyle === "simple") { - if (id === "LoadFile") { - if (!this.loading) {this.loading = this.localize("Loading") + " "} - text = this.loading; this.loading += "."; - } else if (id === "ProcessMath") { - if (!this.processing) {this.processing = this.localize("Processing") + " "} - text = this.processing; this.processing += "."; - } else if (id === "TypesetMath") { - if (!this.typesetting) {this.typesetting = this.localize("Typesetting") + " "} - text = this.typesetting; this.typesetting += "."; - } - } - return text; - }, - - clearCounts: function () { - delete this.loading; - delete this.processing; - delete this.typesetting; - }, - - Set: function (text,n,clearDelay) { - if (n == null) {n = this.log.length; this.log[n] = {}} - // - // Translate message if it is [id,message,arguments] - // - var id = ""; - if (MathJax.Object.isArray(text)) { - id = text[0]; if (MathJax.Object.isArray(id)) {id = id[1]} - // - // Localization._() will throw a restart error if a localization file - // needs to be loaded, so trap that and redo the Set() call - // after it is loaded. - // - try { - text = MathJax.Localization._.apply(MathJax.Localization,text); - } catch (err) { - if (!err.restart) {throw err} - if (!err.restart.called) { - // - // Mark it so we can tell if the Clear() comes before the message is displayed - // - if (this.log[n].restarted == null) {this.log[n].restarted = 0} - this.log[n].restarted++; delete this.log[n].cleared; - MathJax.Callback.After(["Set",this,text,n,clearDelay],err.restart); - return n; - } - } - } - // - // Clear the timout timer. - // - if (this.timer) {clearTimeout(this.timer); delete this.timer} - // - // Save the message and filtered message. - // - this.log[n].text = text; this.log[n].filteredText = text = this.filterText(text,n,id); - // - // Hook the message into the message list so we can tell - // what message to put up when this one is removed. - // - if (typeof(this.log[n].next) === "undefined") { - this.log[n].next = this.current; - if (this.current != null) {this.log[this.current].prev = n} - this.current = n; - } - // - // Show the message if it is the currently active one. - // - if (this.current === n && MathJax.Hub.config.messageStyle !== "none") { - if (this.Init()) { - if (this.textNodeBug) {this.div.innerHTML = text} else {this.text.nodeValue = text} - this.div.style.display = ""; - if (this.status) {window.status = ""; delete this.status} - } else { - window.status = text; - this.status = true; - } - } - // - // Check if the message was resetarted to load a localization file - // and if it has been cleared in the meanwhile. - // - if (this.log[n].restarted) { - if (this.log[n].cleared) {clearDelay = 0} - if (--this.log[n].restarted === 0) {delete this.log[n].cleared} - } - // - // Check if we need to clear the message automatically. - // - if (clearDelay) {setTimeout(MathJax.Callback(["Clear",this,n]),clearDelay)} - else if (clearDelay == 0) {this.Clear(n,0)} - // - // Return the message number. - // - return n; - }, - - Clear: function (n,delay) { - // - // Detatch the message from the active list. - // - if (this.log[n].prev != null) {this.log[this.log[n].prev].next = this.log[n].next} - if (this.log[n].next != null) {this.log[this.log[n].next].prev = this.log[n].prev} - // - // If it is the current message, get the next one to show. - // - if (this.current === n) { - this.current = this.log[n].next; - if (this.text) { - if (this.div.parentNode == null) {this.Init()} // see ASCIIMathML comments above - if (this.current == null) { - // - // If there are no more messages, remove the message box. - // - if (this.timer) {clearTimeout(this.timer); delete this.timer} - if (delay == null) {delay = 600} - if (delay === 0) {this.Remove()} - else {this.timer = setTimeout(MathJax.Callback(["Remove",this]),delay)} - } else if (MathJax.Hub.config.messageStyle !== "none") { - // - // If there is an old message, put it in place - // - if (this.textNodeBug) {this.div.innerHTML = this.log[this.current].filteredText} - else {this.text.nodeValue = this.log[this.current].filteredText} - } - if (this.status) {window.status = ""; delete this.status} - } else if (this.status) { - window.status = (this.current == null ? "" : this.log[this.current].text); - } - } - // - // Clean up the log data no longer needed - // - delete this.log[n].next; delete this.log[n].prev; - delete this.log[n].filteredText; - // - // If this is a restarted localization message, mark that it has been cleared - // while waiting for the file to load. - // - if (this.log[n].restarted) {this.log[n].cleared = true} - }, - - Remove: function () { - // FIXME: do a fade out or something else interesting? - this.text.nodeValue = ""; - this.div.style.display = "none"; - }, - - File: function (file) { - return this.Set(["LoadFile","Loading %1",file],null,null); - }, - - Log: function () { - var strings = []; - for (var i = 1, m = this.log.length; i < m; i++) {strings[i] = this.log[i].text} - return strings.join("\n"); - } - -}; - -/**********************************************************/ - -MathJax.Hub = { - config: { - root: "", - config: [], // list of configuration files to load - styleSheets: [], // list of CSS files to load - styles: { // styles to generate in-line - ".MathJax_Preview": {color: "#888"} - }, - jax: [], // list of input and output jax to load - extensions: [], // list of extensions to load - preJax: null, // pattern to remove from before math script tag - postJax: null, // pattern to remove from after math script tag - displayAlign: 'center', // how to align displayed equations (left, center, right) - displayIndent: '0', // indentation for displayed equations (when not centered) - preRemoveClass: 'MathJax_Preview', // class of objects to remove preceeding math script - showProcessingMessages: true, // display "Processing math: nn%" messages or not - messageStyle: "normal", // set to "none" or "simple" (for "Loading..." and "Processing...") - delayStartupUntil: "none", // set to "onload" to delay setup until the onload handler runs - // set to "configured" to delay startup until MathJax.Hub.Configured() is called - // set to a Callback to wait for before continuing with the startup - skipStartupTypeset: false, // set to true to skip PreProcess and Process during startup - elements: [], // array of elements to process when none is given explicitly - positionToHash: true, // after initial typeset pass, position to #hash location? - - showMathMenu: true, // attach math context menu to typeset math? - showMathMenuMSIE: true, // separtely determine if MSIE should have math menu - // (since the code for that is a bit delicate) - - menuSettings: { - zoom: "None", // when to do MathZoom - CTRL: false, // require CTRL for MathZoom? - ALT: false, // require Alt or Option? - CMD: false, // require CMD? - Shift: false, // require Shift? - discoverable: false, // make math menu discoverable on hover? - zscale: "200%", // the scaling factor for MathZoom - renderer: null, // set when Jax are loaded - font: "Auto", // what font HTML-CSS should use - context: "MathJax", // or "Browser" for pass-through to browser menu - locale: null, // the language to use for messages - mpContext: false, // true means pass menu events to MathPlayer in IE - mpMouse: false, // true means pass mouse events to MathPlayer in IE - texHints: true, // include class names for TeXAtom elements - FastPreview: null, // use PreviewHTML output as preview? - assistiveMML: null, // include hidden MathML for screen readers? - inTabOrder: true, // set to false if math elements should be included in the tabindex - semantics: false // add semantics tag with original form in MathML output - }, - - errorSettings: { - // localized HTML snippet structure for message to use - message: ["[",["MathProcessingError","Math Processing Error"],"]"], - style: {color: "#CC0000", "font-style":"italic"} // style for message - }, - - ignoreMMLattributes: {} // attributes not to copy to HTML-CSS or SVG output - // from MathML input (in addition to the ones in MML.nocopyAttributes). - // An id set to true will be ignored, one set to false will - // be allowed (even if other criteria normally would prevent - // it from being copied); use false carefully! - }, - - preProcessors: MathJax.Callback.Hooks(true), // list of callbacks for preprocessing (initialized by extensions) - inputJax: {}, // mime-type mapped to input jax (by registration) - outputJax: {order:{}}, // mime-type mapped to output jax list (by registration) - - processSectionDelay: 50, // pause between input and output phases of processing - processUpdateTime: 250, // time between screen updates when processing math (milliseconds) - processUpdateDelay: 10, // pause between screen updates to allow other processing (milliseconds) - - signal: MathJax.Callback.Signal("Hub"), // Signal used for Hub events - - Config: function (def) { - this.Insert(this.config,def); - if (this.config.Augment) {this.Augment(this.config.Augment)} - }, - CombineConfig: function (name,def) { - var config = this.config, id, parent; name = name.split(/\./); - for (var i = 0, m = name.length; i < m; i++) { - id = name[i]; if (!config[id]) {config[id] = {}} - parent = config; config = config[id]; - } - parent[id] = config = this.Insert(def,config); - return config; - }, - - Register: { - PreProcessor: function () {return MathJax.Hub.preProcessors.Add.apply(MathJax.Hub.preProcessors,arguments)}, - MessageHook: function () {return MathJax.Hub.signal.MessageHook.apply(MathJax.Hub.signal,arguments)}, - StartupHook: function () {return MathJax.Hub.Startup.signal.MessageHook.apply(MathJax.Hub.Startup.signal,arguments)}, - LoadHook: function () {return MathJax.Ajax.LoadHook.apply(MathJax.Ajax,arguments)} - }, - UnRegister: { - PreProcessor: function (hook) {MathJax.Hub.preProcessors.Remove(hook)}, - MessageHook: function (hook) {MathJax.Hub.signal.RemoveHook(hook)}, - StartupHook: function (hook) {MathJax.Hub.Startup.signal.RemoveHook(hook)}, - LoadHook: function (hook) {MathJax.Ajax.removeHook(hook)} - }, - - getAllJax: function (element) { - var jax = [], scripts = this.elementScripts(element); - for (var i = 0, m = scripts.length; i < m; i++) { - if (scripts[i].MathJax && scripts[i].MathJax.elementJax) - {jax.push(scripts[i].MathJax.elementJax)} - } - return jax; - }, - - getJaxByType: function (type,element) { - var jax = [], scripts = this.elementScripts(element); - for (var i = 0, m = scripts.length; i < m; i++) { - if (scripts[i].MathJax && scripts[i].MathJax.elementJax && - scripts[i].MathJax.elementJax.mimeType === type) - {jax.push(scripts[i].MathJax.elementJax)} - } - return jax; - }, - - getJaxByInputType: function (type,element) { - var jax = [], scripts = this.elementScripts(element); - for (var i = 0, m = scripts.length; i < m; i++) { - if (scripts[i].MathJax && scripts[i].MathJax.elementJax && - scripts[i].type && scripts[i].type.replace(/ *;(.|\s)*/,"") === type) - {jax.push(scripts[i].MathJax.elementJax)} - } - return jax; - }, - - getJaxFor: function (element) { - if (typeof(element) === 'string') {element = document.getElementById(element)} - if (element && element.MathJax) {return element.MathJax.elementJax} - if (this.isMathJaxNode(element)) { - if (!element.isMathJax) {element = element.firstChild} // for NativeMML output - while (element && !element.jaxID) {element = element.parentNode} - if (element) {return MathJax.OutputJax[element.jaxID].getJaxFromMath(element)} - } - return null; - }, - - isJax: function (element) { - if (typeof(element) === 'string') {element = document.getElementById(element)} - if (this.isMathJaxNode(element)) {return 1} - if (element && (element.tagName||"").toLowerCase() === 'script') { - if (element.MathJax) - {return (element.MathJax.state === MathJax.ElementJax.STATE.PROCESSED ? 1 : -1)} - if (element.type && this.inputJax[element.type.replace(/ *;(.|\s)*/,"")]) {return -1} - } - return 0; - }, - isMathJaxNode: function (element) { - return !!element && (element.isMathJax || (element.className||"") === "MathJax_MathML"); - }, - - setRenderer: function (renderer,type) { - if (!renderer) return; - if (!MathJax.OutputJax[renderer]) { - this.config.menuSettings.renderer = ""; - var file = "[MathJax]/jax/output/"+renderer+"/config.js"; - return MathJax.Ajax.Require(file,["setRenderer",this,renderer,type]); - } else { - this.config.menuSettings.renderer = renderer; - if (type == null) {type = "jax/mml"} - var jax = this.outputJax; - if (jax[type] && jax[type].length) { - if (renderer !== jax[type][0].id) { - jax[type].unshift(MathJax.OutputJax[renderer]); - return this.signal.Post(["Renderer Selected",renderer]); - } - } - return null; - } - }, - - Queue: function () { - return this.queue.Push.apply(this.queue,arguments); - }, - - Typeset: function (element,callback) { - if (!MathJax.isReady) return null; - var ec = this.elementCallback(element,callback); - if (ec.count) { - var queue = MathJax.Callback.Queue( - ["PreProcess",this,ec.elements], - ["Process",this,ec.elements] - ); - } - return queue.Push(ec.callback); - }, - - PreProcess: function (element,callback) { - var ec = this.elementCallback(element,callback); - var queue = MathJax.Callback.Queue(); - if (ec.count) { - var elements = (ec.count === 1 ? [ec.elements] : ec.elements); - queue.Push(["Post",this.signal,["Begin PreProcess",ec.elements]]); - for (var i = 0, m = elements.length; i < m; i++) { - if (elements[i]) {queue.Push(["Execute",this.preProcessors,elements[i]])} - } - queue.Push(["Post",this.signal,["End PreProcess",ec.elements]]); - } - return queue.Push(ec.callback); - }, - - Process: function (element,callback) {return this.takeAction("Process",element,callback)}, - Update: function (element,callback) {return this.takeAction("Update",element,callback)}, - Reprocess: function (element,callback) {return this.takeAction("Reprocess",element,callback)}, - Rerender: function (element,callback) {return this.takeAction("Rerender",element,callback)}, - - takeAction: function (action,element,callback) { - var ec = this.elementCallback(element,callback); - var elements = ec.elements; - var queue = MathJax.Callback.Queue(["Clear",this.signal]); - var state = { - scripts: [], // filled in by prepareScripts - start: new Date().getTime(), // timer for processing messages - i: 0, j: 0, // current script, current jax - jax: {}, // scripts grouped by output jax - jaxIDs: [] // id's of jax used - }; - if (ec.count) { - var delay = ["Delay",MathJax.Callback,this.processSectionDelay]; - if (!delay[2]) {delay = {}} - queue.Push( - ["clearCounts",MathJax.Message], - ["Post",this.signal,["Begin "+action,elements]], - ["Post",this.signal,["Begin Math",elements,action]], - ["prepareScripts",this,action,elements,state], - ["Post",this.signal,["Begin Math Input",elements,action]], - ["processInput",this,state], - ["Post",this.signal,["End Math Input",elements,action]], - delay, - ["prepareOutput",this,state,"preProcess"], - delay, - ["Post",this.signal,["Begin Math Output",elements,action]], - ["processOutput",this,state], - ["Post",this.signal,["End Math Output",elements,action]], - delay, - ["prepareOutput",this,state,"postProcess"], - delay, - ["Post",this.signal,["End Math",elements,action]], - ["Post",this.signal,["End "+action,elements]], - ["clearCounts",MathJax.Message] - ); - } - return queue.Push(ec.callback); - }, - - scriptAction: { - Process: function (script) {}, - Update: function (script) { - var jax = script.MathJax.elementJax; - if (jax && jax.needsUpdate()) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE} - else {script.MathJax.state = jax.STATE.PROCESSED} - }, - Reprocess: function (script) { - var jax = script.MathJax.elementJax; - if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE} - }, - Rerender: function (script) { - var jax = script.MathJax.elementJax; - if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.OUTPUT} - } - }, - - prepareScripts: function (action,element,state) { - if (arguments.callee.disabled) return; - var scripts = this.elementScripts(element); - var STATE = MathJax.ElementJax.STATE; - for (var i = 0, m = scripts.length; i < m; i++) { - var script = scripts[i]; - if (script.type && this.inputJax[script.type.replace(/ *;(.|\n)*/,"")]) { - if (script.MathJax) { - if (script.MathJax.elementJax && script.MathJax.elementJax.hover) { - MathJax.Extension.MathEvents.Hover.ClearHover(script.MathJax.elementJax); - } - if (script.MathJax.state !== STATE.PENDING) {this.scriptAction[action](script)} - } - if (!script.MathJax) {script.MathJax = {state: STATE.PENDING}} - if (script.MathJax.error) delete script.MathJax.error; - if (script.MathJax.state !== STATE.PROCESSED) {state.scripts.push(script)} - } - } - }, - - checkScriptSiblings: function (script) { - if (script.MathJax.checked) return; - var config = this.config, pre = script.previousSibling; - if (pre && pre.nodeName === "#text") { - var preJax,postJax, post = script.nextSibling; - if (post && post.nodeName !== "#text") {post = null} - if (config.preJax) { - if (typeof(config.preJax) === "string") {config.preJax = new RegExp(config.preJax+"$")} - preJax = pre.nodeValue.match(config.preJax); - } - if (config.postJax && post) { - if (typeof(config.postJax) === "string") {config.postJax = new RegExp("^"+config.postJax)} - postJax = post.nodeValue.match(config.postJax); - } - if (preJax && (!config.postJax || postJax)) { - pre.nodeValue = pre.nodeValue.replace - (config.preJax,(preJax.length > 1? preJax[1] : "")); - pre = null; - } - if (postJax && (!config.preJax || preJax)) { - post.nodeValue = post.nodeValue.replace - (config.postJax,(postJax.length > 1? postJax[1] : "")); - } - if (pre && !pre.nodeValue.match(/\S/)) {pre = pre.previousSibling} - } - if (config.preRemoveClass && pre && pre.className === config.preRemoveClass) - {script.MathJax.preview = pre} - script.MathJax.checked = 1; - }, - - processInput: function (state) { - var jax, STATE = MathJax.ElementJax.STATE; - var script, prev, m = state.scripts.length; - try { - // - // Loop through the scripts - // - while (state.i < m) { - script = state.scripts[state.i]; if (!script) {state.i++; continue} - // - // Remove previous error marker, if any - // - prev = script.previousSibling; - if (prev && prev.className === "MathJax_Error") {prev.parentNode.removeChild(prev)} - // - // Check if already processed or needs processing - // - if (!script.parentNode || !script.MathJax || script.MathJax.state === STATE.PROCESSED) {state.i++; continue}; - if (!script.MathJax.elementJax || script.MathJax.state === STATE.UPDATE) { - this.checkScriptSiblings(script); // remove preJax/postJax etc. - var type = script.type.replace(/ *;(.|\s)*/,""); // the input jax type - var input = this.inputJax[type]; // the input jax itself - jax = input.Process(script,state); // run the input jax - if (typeof jax === 'function') { // if a callback was returned - if (jax.called) continue; // go back and call Process() again - this.RestartAfter(jax); // wait for the callback - } - jax = jax.Attach(script,input.id); // register the jax on the script - this.saveScript(jax,state,script,STATE); // add script to state - this.postInputHooks.Execute(jax,input.id,script); // run global jax filters - } else if (script.MathJax.state === STATE.OUTPUT) { - this.saveScript(script.MathJax.elementJax,state,script,STATE); // add script to state - } - // - // Go on to the next script, and check if we need to update the processing message - // - state.i++; var now = new Date().getTime(); - if (now - state.start > this.processUpdateTime && state.i < state.scripts.length) - {state.start = now; this.RestartAfter(MathJax.Callback.Delay(1))} - } - } catch (err) {return this.processError(err,state,"Input")} - // - // Put up final message, reset the state and return - // - if (state.scripts.length && this.config.showProcessingMessages) - {MathJax.Message.Set(["ProcessMath","Processing math: %1%%",100],0)} - state.start = new Date().getTime(); state.i = state.j = 0; - return null; - }, - postInputHooks: MathJax.Callback.Hooks(true), // hooks to run after element jax is created - saveScript: function (jax,state,script,STATE) { - // - // Check that output jax exists - // - if (!this.outputJax[jax.mimeType]) { - script.MathJax.state = STATE.UPDATE; - throw Error("No output jax registered for "+jax.mimeType); - } - // - // Record the output jax - // and put this script in the queue for that jax - // - jax.outputJax = this.outputJax[jax.mimeType][0].id; - if (!state.jax[jax.outputJax]) { - if (state.jaxIDs.length === 0) { - // use original array until we know there are more (rather than two copies) - state.jax[jax.outputJax] = state.scripts; - } else { - if (state.jaxIDs.length === 1) // get the script so far for the existing jax - {state.jax[state.jaxIDs[0]] = state.scripts.slice(0,state.i)} - state.jax[jax.outputJax] = []; // start a new array for the new jax - } - state.jaxIDs.push(jax.outputJax); // save the ID of the jax - } - if (state.jaxIDs.length > 1) {state.jax[jax.outputJax].push(script)} - // - // Mark script as needing output - // - script.MathJax.state = STATE.OUTPUT; - }, - - // - // Pre- and post-process scripts by jax - // (to get scaling factors, hide/show output, and so on) - // Since this can cause the jax to load, we need to trap restarts - // - prepareOutput: function (state,method) { - while (state.j < state.jaxIDs.length) { - var id = state.jaxIDs[state.j], JAX = MathJax.OutputJax[id]; - if (JAX[method]) { - try { - var result = JAX[method](state); - if (typeof result === 'function') { - if (result.called) continue; // go back and try again - this.RestartAfter(result); - } - } catch (err) { - if (!err.restart) { - MathJax.Message.Set(["PrepError","Error preparing %1 output (%2)",id,method],null,600); - MathJax.Hub.lastPrepError = err; - state.j++; - } - return MathJax.Callback.After(["prepareOutput",this,state,method],err.restart); - } - } - state.j++; - } - return null; - }, - - processOutput: function (state) { - var result, STATE = MathJax.ElementJax.STATE, script, m = state.scripts.length; - try { - // - // Loop through the scripts - // - while (state.i < m) { - // - // Check that there is an element jax - // - script = state.scripts[state.i]; - if (!script || !script.parentNode || !script.MathJax || script.MathJax.error) {state.i++; continue} - var jax = script.MathJax.elementJax; if (!jax) {state.i++; continue} - // - // Call the output Jax's Process method (which will be its Translate() - // method once loaded). Mark it as complete and remove the preview unless - // the Process() call returns an explicit false value (in which case, it will - // handle this later during the postProcess phase, as HTML-CSS does). - // - try{ - result = MathJax.OutputJax[jax.outputJax].Process(script,state); - }catch(e){ - if(state.i == state.lastErr){ - state.i++; - console.log("state.i: " + state.i); - }else{ - state.lastErr = state.i; - console.log("other: " + state.i); - } - throw e; - } - if (result !== false) { - script.MathJax.state = STATE.PROCESSED; - if (script.MathJax.preview) { - script.MathJax.preview.innerHTML = ""; - script.MathJax.preview.style.display = "none"; - } - // - // Signal that new math is available - // - this.signal.Post(["New Math",jax.inputID]); // FIXME: wait for this? (i.e., restart if returns uncalled callback) - } - // - // Go on to next math expression - // - state.i++; - // - // Update the processing message, if needed - // - var now = new Date().getTime(); - if (now - state.start > this.processUpdateTime && state.i < state.scripts.length) - {state.start = now; this.RestartAfter(MathJax.Callback.Delay(this.processUpdateDelay))} - } - } catch (err) {return this.processError(err,state,"Output")} - // - // Put up the typesetting-complete message - // - if (state.scripts.length && this.config.showProcessingMessages) { - MathJax.Message.Set(["TypesetMath","Typesetting math: %1%%",100],0); - MathJax.Message.Clear(0); - } - state.i = state.j = 0; - return null; - }, - - processMessage: function (state,type) { - var m = Math.floor(state.i/(state.scripts.length)*100); - var message = (type === "Output" ? ["TypesetMath","Typesetting math: %1%%"] : - ["ProcessMath","Processing math: %1%%"]); - if (this.config.showProcessingMessages) {MathJax.Message.Set(message.concat(m),0)} - }, - - processError: function (err,state,type) { - if (!err.restart) { - if (!this.config.errorSettings.message) {throw err} - this.formatError(state.scripts[state.i],err); state.i++; - } - this.processMessage(state,type); - return MathJax.Callback.After(["process"+type,this,state],err.restart); - }, - - formatError: function (script,err) { - var LOCALIZE = function (id,text,arg1,arg2) {return MathJax.Localization._(id,text,arg1,arg2)}; - // - // Get the error message, URL, and line, and save it for - // reporting in the Show Math As Error menu - // - var message = LOCALIZE("ErrorMessage","Error: %1",err.message)+"\n"; - if (err.sourceURL||err.fileName) message += "\n"+LOCALIZE("ErrorFile","file: %1",err.sourceURL||err.fileName); - if (err.line||err.lineNumber) message += "\n"+LOCALIZE("ErrorLine","line: %1",err.line||err.lineNumber); - message += "\n\n"+LOCALIZE("ErrorTips","Debugging tips: use %1, inspect %2 in the browser console","'unpacked/MathJax.js'","'MathJax.Hub.lastError'"); - script.MathJax.error = MathJax.OutputJax.Error.Jax(message,script); - if (script.MathJax.elementJax) - script.MathJax.error.inputID = script.MathJax.elementJax.inputID; - // - // Create the [Math Processing Error] span - // - var errorSettings = this.config.errorSettings; - var errorText = LOCALIZE(errorSettings.messageId,errorSettings.message); - var error = MathJax.HTML.Element("span", { - className:"MathJax_Error", jaxID:"Error", isMathJax:true, - id: script.MathJax.error.inputID+"-Frame" - },[["span",null,errorText]]); - // - // Attach the menu events - // - MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js",function () { - var EVENT = MathJax.Extension.MathEvents.Event, - HUB = MathJax.Hub; - error.oncontextmenu = EVENT.Menu; - error.onmousedown = EVENT.Mousedown; - error.onkeydown = EVENT.Keydown; - error.tabIndex = HUB.getTabOrder(HUB.getJaxFor(script)); - }); - // - // Insert the error into the page and remove any preview - // - var node = document.getElementById(error.id); - if (node) node.parentNode.removeChild(node); - if (script.parentNode) script.parentNode.insertBefore(error,script); - if (script.MathJax.preview) { - script.MathJax.preview.innerHTML = ""; - script.MathJax.preview.style.display = "none"; - } - // - // Save the error for debugging purposes - // Report the error as a signal - // - this.lastError = err; - this.signal.Post(["Math Processing Error",script,err]); - }, - - RestartAfter: function (callback) { - throw this.Insert(Error("restart"),{restart: MathJax.Callback(callback)}); - }, - - elementCallback: function (element,callback) { - if (callback == null && (MathJax.Object.isArray(element) || typeof element === 'function')) - {try {MathJax.Callback(element); callback = element; element = null} catch(e) {}} - if (element == null) {element = this.config.elements || []} - if (this.isHTMLCollection(element)) {element = this.HTMLCollection2Array(element)} - if (!MathJax.Object.isArray(element)) {element = [element]} - element = [].concat(element); // make a copy so the original isn't changed - for (var i = 0, m = element.length; i < m; i++) - {if (typeof(element[i]) === 'string') {element[i] = document.getElementById(element[i])}} - if (!document.body) {document.body = document.getElementsByTagName("body")[0]} - if (element.length == 0) {element.push(document.body)} - if (!callback) {callback = {}} - return { - count: element.length, - elements: (element.length === 1 ? element[0] : element), - callback: callback - }; - }, - - elementScripts: function (element) { - var scripts = []; - if (MathJax.Object.isArray(element) || this.isHTMLCollection(element)) { - for (var i = 0, m = element.length; i < m; i++) { - var alreadyDone = 0; - for (var j = 0; j < i && !alreadyDone; j++) - {alreadyDone = element[j].contains(element[i])} - if (!alreadyDone) scripts.push.apply(scripts,this.elementScripts(element[i])); - } - return scripts; - } - if (typeof(element) === 'string') {element = document.getElementById(element)} - if (!document.body) {document.body = document.getElementsByTagName("body")[0]} - if (element == null) {element = document.body} - if (element.tagName != null && element.tagName.toLowerCase() === "script") {return [element]} - scripts = element.getElementsByTagName("script"); - if (this.msieHTMLCollectionBug) {scripts = this.HTMLCollection2Array(scripts)} - return scripts; - }, - - // - // IE8 fails to check "obj instanceof HTMLCollection" for some values of obj. - // - isHTMLCollection: function (obj) { - return ("HTMLCollection" in window && typeof(obj) === "object" && obj instanceof HTMLCollection); - }, - // - // IE8 doesn't deal with HTMLCollection as an array, so convert to array - // - HTMLCollection2Array: function (nodes) { - if (!this.msieHTMLCollectionBug) {return [].slice.call(nodes)} - var NODES = []; - for (var i = 0, m = nodes.length; i < m; i++) {NODES[i] = nodes[i]} - return NODES; - }, - - Insert: function (dst,src) { - for (var id in src) {if (src.hasOwnProperty(id)) { - // allow for concatenation of arrays? - if (typeof src[id] === 'object' && !(MathJax.Object.isArray(src[id])) && - (typeof dst[id] === 'object' || typeof dst[id] === 'function')) { - this.Insert(dst[id],src[id]); - } else { - dst[id] = src[id]; - } - }} - return dst; - }, - - getTabOrder: function(script) { - return this.config.menuSettings.inTabOrder ? 0 : -1; - }, - - // Old browsers (e.g. Internet Explorer <= 8) do not support trim(). - SplitList: ("trim" in String.prototype ? - function (list) {return list.trim().split(/\s+/)} : - function (list) {return list.replace(/^\s+/,''). - replace(/\s+$/,'').split(/\s+/)}) -}; -MathJax.Hub.Insert(MathJax.Hub.config.styles,MathJax.Message.styles); -MathJax.Hub.Insert(MathJax.Hub.config.styles,{".MathJax_Error":MathJax.Hub.config.errorSettings.style}); - -// -// Storage area for extensions and preprocessors -// -MathJax.Extension = {}; - -// -// Hub Startup code -// -MathJax.Hub.Configured = MathJax.Callback({}); // called when configuration is complete -MathJax.Hub.Startup = { - script: "", // the startup script from the SCRIPT call that loads MathJax.js - queue: MathJax.Callback.Queue(), // Queue used for startup actions - signal: MathJax.Callback.Signal("Startup"), // Signal used for startup events - params: {}, - - // - // Load the configuration files - // - Config: function () { - this.queue.Push(["Post",this.signal,"Begin Config"]); - // - // Make sure root is set before loading any files - // - if (MathJax.AuthorConfig && MathJax.AuthorConfig.root) - MathJax.Ajax.config.root = MathJax.AuthorConfig.root; - // - // If a locale is given as a parameter, - // set the locale and the default menu value for the locale - // - if (this.params.locale) { - MathJax.Localization.resetLocale(this.params.locale); - MathJax.Hub.config.menuSettings.locale = this.params.locale; - } - // - // Run the config files, if any are given in the parameter list - // - if (this.params.config) { - var files = this.params.config.split(/,/); - for (var i = 0, m = files.length; i < m; i++) { - if (!files[i].match(/\.js$/)) {files[i] += ".js"} - this.queue.Push(["Require",MathJax.Ajax,this.URL("config",files[i])]); - } - } - // - // Perform author configuration from in-line MathJax = {...} - // - this.queue.Push(["Config",MathJax.Hub,MathJax.AuthorConfig]); - // - // Run the deprecated configuration script, if any (ignoring return value) - // Wait for the startup delay signal - // Run the mathjax-config blocks - // Load the files in the configuration's config array - // - if (this.script.match(/\S/)) {this.queue.Push(this.script+";\n1;")} - this.queue.Push( - ["ConfigDelay",this], - ["ConfigBlocks",this], - [function (THIS) {return THIS.loadArray(MathJax.Hub.config.config,"config",null,true)},this], - ["Post",this.signal,"End Config"] - ); - }, - // - // Return the delay callback - // - ConfigDelay: function () { - var delay = this.params.delayStartupUntil || MathJax.Hub.config.delayStartupUntil; - if (delay === "onload") {return this.onload} - if (delay === "configured") {return MathJax.Hub.Configured} - return delay; - }, - // - // Run the scripts of type=text/x-mathjax-config - // - ConfigBlocks: function () { - var scripts = document.getElementsByTagName("script"); - var queue = MathJax.Callback.Queue(); - for (var i = 0, m = scripts.length; i < m; i++) { - var type = String(scripts[i].type).replace(/ /g,""); - if (type.match(/^text\/x-mathjax-config(;.*)?$/) && !type.match(/;executed=true/)) { - scripts[i].type += ";executed=true"; - queue.Push(scripts[i].innerHTML+";\n1;"); - } - } - return queue.Push(function () {MathJax.Ajax.config.root = MathJax.Hub.config.root}); - }, - - // - // Read cookie and set up menu defaults - // (set the locale according to the cookie) - // (adjust the jax to accommodate renderer preferences) - // - Cookie: function () { - return this.queue.Push( - ["Post",this.signal,"Begin Cookie"], - ["Get",MathJax.HTML.Cookie,"menu",MathJax.Hub.config.menuSettings], - [function (config) { - var SETTINGS = config.menuSettings; - if (SETTINGS.locale) MathJax.Localization.resetLocale(SETTINGS.locale); - var renderer = config.menuSettings.renderer, jax = config.jax; - if (renderer) { - var name = "output/"+renderer; jax.sort(); - for (var i = 0, m = jax.length; i < m; i++) { - if (jax[i].substr(0,7) === "output/") break; - } - if (i == m-1) {jax.pop()} else { - while (i < m) {if (jax[i] === name) {jax.splice(i,1); break}; i++} - } - jax.unshift(name); - } - if (SETTINGS.CHTMLpreview != null) { - if (SETTINGS.FastPreview == null) SETTINGS.FastPreview = SETTINGS.CHTMLpreview; - delete SETTINGS.CHTMLpreview; - } - if (SETTINGS.FastPreview && !MathJax.Extension["fast-preview"]) - MathJax.Hub.config.extensions.push("fast-preview.js"); - if (config.menuSettings.assistiveMML && !MathJax.Extension.AssistiveMML) - MathJax.Hub.config.extensions.push("AssistiveMML.js"); - },MathJax.Hub.config], - ["Post",this.signal,"End Cookie"] - ); - }, - // - // Setup stylesheets and extra styles - // - Styles: function () { - return this.queue.Push( - ["Post",this.signal,"Begin Styles"], - ["loadArray",this,MathJax.Hub.config.styleSheets,"config"], - ["Styles",MathJax.Ajax,MathJax.Hub.config.styles], - ["Post",this.signal,"End Styles"] - ); - }, - // - // Load the input and output jax - // - Jax: function () { - var config = MathJax.Hub.config, jax = MathJax.Hub.outputJax; - // Save the order of the output jax since they are loading asynchronously - for (var i = 0, m = config.jax.length, k = 0; i < m; i++) { - var name = config.jax[i].substr(7); - if (config.jax[i].substr(0,7) === "output/" && jax.order[name] == null) - {jax.order[name] = k; k++} - } - var queue = MathJax.Callback.Queue(); - return queue.Push( - ["Post",this.signal,"Begin Jax"], - ["loadArray",this,config.jax,"jax","config.js"], - ["Post",this.signal,"End Jax"] - ); - }, - // - // Load the extensions - // - Extensions: function () { - var queue = MathJax.Callback.Queue(); - return queue.Push( - ["Post",this.signal,"Begin Extensions"], - ["loadArray",this,MathJax.Hub.config.extensions,"extensions"], - ["Post",this.signal,"End Extensions"] - ); - }, - - // - // Initialize the Message system - // - Message: function () { - MathJax.Message.Init(true); - }, - - // - // Set the math menu renderer, if it isn't already - // (this must come after the jax are loaded) - // - Menu: function () { - var menu = MathJax.Hub.config.menuSettings, jax = MathJax.Hub.outputJax, registered; - for (var id in jax) {if (jax.hasOwnProperty(id)) { - if (jax[id].length) {registered = jax[id]; break} - }} - if (registered && registered.length) { - if (menu.renderer && menu.renderer !== registered[0].id) - {registered.unshift(MathJax.OutputJax[menu.renderer])} - menu.renderer = registered[0].id; - } - }, - - // - // Set the location to the designated hash position - // - Hash: function () { - if (MathJax.Hub.config.positionToHash && document.location.hash && - document.body && document.body.scrollIntoView) { - var name = document.location.hash.substr(1); - var target = document.getElementById(name); - if (!target) { - var a = document.getElementsByTagName("a"); - for (var i = 0, m = a.length; i < m; i++) - {if (a[i].name === name) {target = a[i]; break}} - } - if (target) { - while (!target.scrollIntoView) {target = target.parentNode} - target = this.HashCheck(target); - if (target && target.scrollIntoView) - {setTimeout(function () {target.scrollIntoView(true)},1)} - } - } - }, - HashCheck: function (target) { - var jax = MathJax.Hub.getJaxFor(target); - if (jax && MathJax.OutputJax[jax.outputJax].hashCheck) - {target = MathJax.OutputJax[jax.outputJax].hashCheck(target)} - return target; - }, - - // - // Load the Menu and Zoom code, if it hasn't already been loaded. - // This is called after the initial typeset, so should no longer be - // competing with other page loads, but will make these available - // if needed later on. - // - MenuZoom: function () { - if (MathJax.Hub.config.showMathMenu) { - if (!MathJax.Extension.MathMenu) { - setTimeout( - function () { - MathJax.Callback.Queue( - ["Require",MathJax.Ajax,"[MathJax]/extensions/MathMenu.js",{}], - ["loadDomain",MathJax.Localization,"MathMenu"] - ) - },1000 - ); - } else { - setTimeout( - MathJax.Callback(["loadDomain",MathJax.Localization,"MathMenu"]), - 1000 - ); - } - if (!MathJax.Extension.MathZoom) { - setTimeout( - MathJax.Callback(["Require",MathJax.Ajax,"[MathJax]/extensions/MathZoom.js",{}]), - 2000 - ); - } - } - }, - - // - // Setup the onload callback - // - onLoad: function () { - var onload = this.onload = - MathJax.Callback(function () {MathJax.Hub.Startup.signal.Post("onLoad")}); - if (document.body && document.readyState) - if (MathJax.Hub.Browser.isMSIE) { - // IE can change from loading to interactive before - // full page is ready, so go with complete (even though - // that means we may have to wait longer). - if (document.readyState === "complete") {return [onload]} - } else if (document.readyState !== "loading") {return [onload]} - if (window.addEventListener) { - window.addEventListener("load",onload,false); - if (!this.params.noDOMContentEvent) - {window.addEventListener("DOMContentLoaded",onload,false)} - } - else if (window.attachEvent) {window.attachEvent("onload",onload)} - else {window.onload = onload} - return onload; - }, - - // - // Perform the initial typesetting (or skip if configuration says to) - // - Typeset: function (element,callback) { - if (MathJax.Hub.config.skipStartupTypeset) {return function () {}} - return this.queue.Push( - ["Post",this.signal,"Begin Typeset"], - ["Typeset",MathJax.Hub,element,callback], - ["Post",this.signal,"End Typeset"] - ); - }, - - // - // Create a URL in the MathJax hierarchy - // - URL: function (dir,name) { - if (!name.match(/^([a-z]+:\/\/|\[|\/)/)) {name = "[MathJax]/"+dir+"/"+name} - return name; - }, - - // - // Load an array of files, waiting for all of them - // to be loaded before going on - // - loadArray: function (files,dir,name,synchronous) { - if (files) { - if (!MathJax.Object.isArray(files)) {files = [files]} - if (files.length) { - var queue = MathJax.Callback.Queue(), callback = {}, file; - for (var i = 0, m = files.length; i < m; i++) { - file = this.URL(dir,files[i]); - if (name) {file += "/" + name} - if (synchronous) {queue.Push(["Require",MathJax.Ajax,file,callback])} - else {queue.Push(MathJax.Ajax.Require(file,callback))} - } - return queue.Push({}); // wait for everything to finish - } - } - return null; - } - -}; - - -/**********************************************************/ - -(function (BASENAME) { - var BASE = window[BASENAME], ROOT = "["+BASENAME+"]"; - var HUB = BASE.Hub, AJAX = BASE.Ajax, CALLBACK = BASE.Callback; - - var JAX = MathJax.Object.Subclass({ - JAXFILE: "jax.js", - require: null, // array of files to load before jax.js is complete - config: {}, - // - // Make a subclass and return an instance of it. - // (FIXME: should we replace config with a copy of the constructor's - // config? Otherwise all subclasses share the same config structure.) - // - Init: function (def,cdef) { - if (arguments.length === 0) {return this} - return (this.constructor.Subclass(def,cdef))(); - }, - // - // Augment by merging with class definition (not replacing) - // - Augment: function (def,cdef) { - var cObject = this.constructor, ndef = {}; - if (def != null) { - for (var id in def) {if (def.hasOwnProperty(id)) { - if (typeof def[id] === "function") - {cObject.protoFunction(id,def[id])} else {ndef[id] = def[id]} - }} - // MSIE doesn't list toString even if it is not native so handle it separately - if (def.toString !== cObject.prototype.toString && def.toString !== {}.toString) - {cObject.protoFunction('toString',def.toString)} - } - HUB.Insert(cObject.prototype,ndef); - cObject.Augment(null,cdef); - return this; - }, - Translate: function (script,state) { - throw Error(this.directory+"/"+this.JAXFILE+" failed to define the Translate() method"); - }, - Register: function (mimetype) {}, - Config: function () { - this.config = HUB.CombineConfig(this.id,this.config); - if (this.config.Augment) {this.Augment(this.config.Augment)} - }, - Startup: function () {}, - loadComplete: function (file) { - if (file === "config.js") { - return AJAX.loadComplete(this.directory+"/"+file); - } else { - var queue = CALLBACK.Queue(); - queue.Push( - HUB.Register.StartupHook("End Config",{}), // wait until config complete - ["Post",HUB.Startup.signal,this.id+" Jax Config"], - ["Config",this], - ["Post",HUB.Startup.signal,this.id+" Jax Require"], - // Config may set the required and extensions array, - // so use functions to delay making the reference until needed - [function (THIS) {return MathJax.Hub.Startup.loadArray(THIS.require,this.directory)},this], - [function (config,id) {return MathJax.Hub.Startup.loadArray(config.extensions,"extensions/"+id)},this.config||{},this.id], - ["Post",HUB.Startup.signal,this.id+" Jax Startup"], - ["Startup",this], - ["Post",HUB.Startup.signal,this.id+" Jax Ready"] - ); - if (this.copyTranslate) { - queue.Push( - [function (THIS) { - THIS.preProcess = THIS.preTranslate; - THIS.Process = THIS.Translate; - THIS.postProcess = THIS.postTranslate; - },this.constructor.prototype] - ); - } - return queue.Push(["loadComplete",AJAX,this.directory+"/"+file]); - } - } - },{ - id: "Jax", - version: "2.7.1", - directory: ROOT+"/jax", - extensionDir: ROOT+"/extensions" - }); - - /***********************************/ - - BASE.InputJax = JAX.Subclass({ - elementJax: "mml", // the element jax to load for this input jax - sourceMenuTitle: /*_(MathMenu)*/ ["Original","Original Form"], - copyTranslate: true, - Process: function (script,state) { - var queue = CALLBACK.Queue(), file; - // Load any needed element jax - var jax = this.elementJax; if (!BASE.Object.isArray(jax)) {jax = [jax]} - for (var i = 0, m = jax.length; i < m; i++) { - file = BASE.ElementJax.directory+"/"+jax[i]+"/"+this.JAXFILE; - if (!this.require) {this.require = []} - else if (!BASE.Object.isArray(this.require)) {this.require = [this.require]}; - this.require.push(file); // so Startup will wait for it to be loaded - queue.Push(AJAX.Require(file)); - } - // Load the input jax - file = this.directory+"/"+this.JAXFILE; - var load = queue.Push(AJAX.Require(file)); - if (!load.called) { - this.constructor.prototype.Process = function () { - if (!load.called) {return load} - throw Error(file+" failed to load properly"); - } - } - // Load the associated output jax - jax = HUB.outputJax["jax/"+jax[0]]; - if (jax) {queue.Push(AJAX.Require(jax[0].directory+"/"+this.JAXFILE))} - return queue.Push({}); - }, - needsUpdate: function (jax) { - var script = jax.SourceElement(); - return (jax.originalText !== BASE.HTML.getScript(script)); - }, - Register: function (mimetype) { - if (!HUB.inputJax) {HUB.inputJax = {}} - HUB.inputJax[mimetype] = this; - } - },{ - id: "InputJax", - version: "2.7.1", - directory: JAX.directory+"/input", - extensionDir: JAX.extensionDir - }); - - /***********************************/ - - BASE.OutputJax = JAX.Subclass({ - copyTranslate: true, - preProcess: function (state) { - var load, file = this.directory+"/"+this.JAXFILE; - this.constructor.prototype.preProcess = function (state) { - if (!load.called) {return load} - throw Error(file+" failed to load properly"); - } - load = AJAX.Require(file); - return load; - }, - Register: function (mimetype) { - var jax = HUB.outputJax; - if (!jax[mimetype]) {jax[mimetype] = []} - // If the output jax is earlier in the original configuration list, put it first here - if (jax[mimetype].length && (this.id === HUB.config.menuSettings.renderer || - (jax.order[this.id]||0) < (jax.order[jax[mimetype][0].id]||0))) - {jax[mimetype].unshift(this)} else {jax[mimetype].push(this)} - // Make sure the element jax is loaded before Startup is called - if (!this.require) {this.require = []} - else if (!BASE.Object.isArray(this.require)) {this.require = [this.require]}; - this.require.push(BASE.ElementJax.directory+"/"+(mimetype.split(/\//)[1])+"/"+this.JAXFILE); - }, - Remove: function (jax) {} - },{ - id: "OutputJax", - version: "2.7.1", - directory: JAX.directory+"/output", - extensionDir: JAX.extensionDir, - fontDir: ROOT+(BASE.isPacked?"":"/..")+"/fonts", - imageDir: ROOT+(BASE.isPacked?"":"/..")+"/images" - }); - - /***********************************/ - - BASE.ElementJax = JAX.Subclass({ - // make a subclass, not an instance - Init: function (def,cdef) {return this.constructor.Subclass(def,cdef)}, - - inputJax: null, - outputJax: null, - inputID: null, - originalText: "", - mimeType: "", - sourceMenuTitle: /*_(MathMenu)*/ ["MathMLcode","MathML Code"], - - Text: function (text,callback) { - var script = this.SourceElement(); - BASE.HTML.setScript(script,text); - script.MathJax.state = this.STATE.UPDATE; - return HUB.Update(script,callback); - }, - Reprocess: function (callback) { - var script = this.SourceElement(); - script.MathJax.state = this.STATE.UPDATE; - return HUB.Reprocess(script,callback); - }, - Update: function (callback) {return this.Rerender(callback)}, - Rerender: function (callback) { - var script = this.SourceElement(); - script.MathJax.state = this.STATE.OUTPUT; - return HUB.Process(script,callback); - }, - Remove: function (keep) { - if (this.hover) {this.hover.clear(this)} - BASE.OutputJax[this.outputJax].Remove(this); - if (!keep) { - HUB.signal.Post(["Remove Math",this.inputID]); // wait for this to finish? - this.Detach(); - } - }, - needsUpdate: function () { - return BASE.InputJax[this.inputJax].needsUpdate(this); - }, - - SourceElement: function () {return document.getElementById(this.inputID)}, - - Attach: function (script,inputJax) { - var jax = script.MathJax.elementJax; - if (script.MathJax.state === this.STATE.UPDATE) { - jax.Clone(this); - } else { - jax = script.MathJax.elementJax = this; - if (script.id) {this.inputID = script.id} - else {script.id = this.inputID = BASE.ElementJax.GetID(); this.newID = 1} - } - jax.originalText = BASE.HTML.getScript(script); - jax.inputJax = inputJax; - if (jax.root) {jax.root.inputID = jax.inputID} - return jax; - }, - Detach: function () { - var script = this.SourceElement(); if (!script) return; - try {delete script.MathJax} catch(err) {script.MathJax = null} - if (this.newID) {script.id = ""} - }, - Clone: function (jax) { - var id; - for (id in this) { - if (!this.hasOwnProperty(id)) continue; - if (typeof(jax[id]) === 'undefined' && id !== 'newID') {delete this[id]} - } - for (id in jax) { - if (!jax.hasOwnProperty(id)) continue; - if (typeof(this[id]) === 'undefined' || (this[id] !== jax[id] && id !== 'inputID')) - {this[id] = jax[id]} - } - } - },{ - id: "ElementJax", - version: "2.7.1", - directory: JAX.directory+"/element", - extensionDir: JAX.extensionDir, - ID: 0, // jax counter (for IDs) - STATE: { - PENDING: 1, // script is identified as math but not yet processed - PROCESSED: 2, // script has been processed - UPDATE: 3, // elementJax should be updated - OUTPUT: 4 // output should be updated (input is OK) - }, - - GetID: function () {this.ID++; return "MathJax-Element-"+this.ID}, - Subclass: function () { - var obj = JAX.Subclass.apply(this,arguments); - obj.loadComplete = this.prototype.loadComplete; - return obj; - } - }); - BASE.ElementJax.prototype.STATE = BASE.ElementJax.STATE; - - // - // Some "Fake" jax used to allow menu access for "Math Processing Error" messages - // - BASE.OutputJax.Error = { - id: "Error", version: "2.7.1", config: {}, errors: 0, - ContextMenu: function () {return BASE.Extension.MathEvents.Event.ContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)}, - Mousedown: function () {return BASE.Extension.MathEvents.Event.AltContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)}, - getJaxFromMath: function (math) {return (math.nextSibling.MathJax||{}).error}, - Jax: function (text,script) { - var jax = MathJax.Hub.inputJax[script.type.replace(/ *;(.|\s)*/,"")]; - this.errors++; - return { - inputJax: (jax||{id:"Error"}).id, // Use Error InputJax as fallback - outputJax: "Error", - inputID: "MathJax-Error-"+this.errors, - sourceMenuTitle: /*_(MathMenu)*/ ["ErrorMessage","Error Message"], - sourceMenuFormat: "Error", - originalText: MathJax.HTML.getScript(script), - errorText: text - } - } - }; - BASE.InputJax.Error = { - id: "Error", version: "2.7.1", config: {}, - sourceMenuTitle: /*_(MathMenu)*/ ["Original","Original Form"] - }; - -})("MathJax"); - -/**********************************************************/ - -(function (BASENAME) { - var BASE = window[BASENAME]; - if (!BASE) {BASE = window[BASENAME] = {}} - - var HUB = BASE.Hub; var STARTUP = HUB.Startup; var CONFIG = HUB.config; - var HEAD = document.head || (document.getElementsByTagName("head")[0]); - if (!HEAD) {HEAD = document.childNodes[0]}; - var scripts = (document.documentElement || document).getElementsByTagName("script"); - if (scripts.length === 0 && HEAD.namespaceURI) - scripts = document.getElementsByTagNameNS(HEAD.namespaceURI,"script"); - var namePattern = new RegExp("(^|/)"+BASENAME+"\\.js(\\?.*)?$"); - for (var i = scripts.length-1; i >= 0; i--) { - if ((scripts[i].src||"").match(namePattern)) { - STARTUP.script = scripts[i].innerHTML; - if (RegExp.$2) { - var params = RegExp.$2.substr(1).split(/\&/); - for (var j = 0, m = params.length; j < m; j++) { - var KV = params[j].match(/(.*)=(.*)/); - if (KV) {STARTUP.params[unescape(KV[1])] = unescape(KV[2])} - else {STARTUP.params[params[j]] = true} - } - } - CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,''); - BASE.Ajax.config.root = CONFIG.root; - BASE.Ajax.params = STARTUP.params; - break; - } - } - - var AGENT = navigator.userAgent; - var BROWSERS = { - isMac: (navigator.platform.substr(0,3) === "Mac"), - isPC: (navigator.platform.substr(0,3) === "Win"), - isMSIE: ("ActiveXObject" in window && "clipboardData" in window), - isEdge: ("MSGestureEvent" in window && "chrome" in window && - window.chrome.loadTimes == null), - isFirefox: (!!AGENT.match(/Gecko\//) && !AGENT.match(/like Gecko/)), - isSafari: (!!AGENT.match(/ (Apple)?WebKit\//) && !AGENT.match(/ like iPhone /) && - (!window.chrome || window.chrome.app == null)), - isChrome: ("chrome" in window && window.chrome.loadTimes != null), - isOpera: ("opera" in window && window.opera.version != null), - isKonqueror: ("konqueror" in window && navigator.vendor == "KDE"), - versionAtLeast: function (v) { - var bv = (this.version).split('.'); v = (new String(v)).split('.'); - for (var i = 0, m = v.length; i < m; i++) - {if (bv[i] != v[i]) {return parseInt(bv[i]||"0") >= parseInt(v[i])}} - return true; - }, - Select: function (choices) { - var browser = choices[HUB.Browser]; - if (browser) {return browser(HUB.Browser)} - return null; - } - }; - - var xAGENT = AGENT - .replace(/^Mozilla\/(\d+\.)+\d+ /,"") // remove initial Mozilla, which is never right - .replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"") // remove linux version - .replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,""); // special case for these - - HUB.Browser = HUB.Insert(HUB.Insert(new String("Unknown"),{version: "0.0"}),BROWSERS); - for (var browser in BROWSERS) {if (BROWSERS.hasOwnProperty(browser)) { - if (BROWSERS[browser] && browser.substr(0,2) === "is") { - browser = browser.slice(2); - if (browser === "Mac" || browser === "PC") continue; - HUB.Browser = HUB.Insert(new String(browser),BROWSERS); - var VERSION = new RegExp( - ".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|" + // for Safari, Opera10, and IE11+ - ".*("+browser+")"+(browser == "MSIE" ? " " : "/")+"((?:\\d+\\.)*\\d+)|"+ // for one of the main browsers - "(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"); // for unrecognized browser - var MATCH = VERSION.exec(xAGENT) || ["","","","unknown","0.0"]; - HUB.Browser.name = (MATCH[1] != "" ? browser : (MATCH[3] || MATCH[5])); - HUB.Browser.version = MATCH[2] || MATCH[4] || MATCH[6]; - break; - } - }}; - - // - // Initial browser-specific info (e.g., touch up version or name, check for MathPlayer, etc.) - // Wrap in try/catch just in case of error (see issue #1155). - // - try {HUB.Browser.Select({ - Safari: function (browser) { - var v = parseInt((String(browser.version).split("."))[0]); - if (v > 85) {browser.webkit = browser.version} - if (v >= 538) {browser.version = "8.0"} - else if (v >= 537) {browser.version = "7.0"} - else if (v >= 536) {browser.version = "6.0"} - else if (v >= 534) {browser.version = "5.1"} - else if (v >= 533) {browser.version = "5.0"} - else if (v >= 526) {browser.version = "4.0"} - else if (v >= 525) {browser.version = "3.1"} - else if (v > 500) {browser.version = "3.0"} - else if (v > 400) {browser.version = "2.0"} - else if (v > 85) {browser.version = "1.0"} - browser.webkit = (navigator.appVersion.match(/WebKit\/(\d+)\./))[1]; - browser.isMobile = (navigator.appVersion.match(/Mobile/i) != null); - browser.noContextMenu = browser.isMobile; - }, - Firefox: function (browser) { - if ((browser.version === "0.0" || AGENT.match(/Firefox/) == null) && - navigator.product === "Gecko") { - var rv = AGENT.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/); - if (rv) {browser.version = rv[1]} - else { - var date = (navigator.buildID||navigator.productSub||"0").substr(0,8); - if (date >= "20111220") {browser.version = "9.0"} - else if (date >= "20111120") {browser.version = "8.0"} - else if (date >= "20110927") {browser.version = "7.0"} - else if (date >= "20110816") {browser.version = "6.0"} - else if (date >= "20110621") {browser.version = "5.0"} - else if (date >= "20110320") {browser.version = "4.0"} - else if (date >= "20100121") {browser.version = "3.6"} - else if (date >= "20090630") {browser.version = "3.5"} - else if (date >= "20080617") {browser.version = "3.0"} - else if (date >= "20061024") {browser.version = "2.0"} - } - } - browser.isMobile = (navigator.appVersion.match(/Android/i) != null || - AGENT.match(/ Fennec\//) != null || - AGENT.match(/Mobile/) != null); - }, - Chrome: function (browser) { - browser.noContextMenu = browser.isMobile = !!navigator.userAgent.match(/ Mobile[ \/]/); - }, - Opera: function (browser) {browser.version = opera.version()}, - Edge: function (browser) { - browser.isMobile = !!navigator.userAgent.match(/ Phone/); - }, - MSIE: function (browser) { - browser.isMobile = !!navigator.userAgent.match(/ Phone/); - browser.isIE9 = !!(document.documentMode && (window.performance || window.msPerformance)); - MathJax.HTML.setScriptBug = !browser.isIE9 || document.documentMode < 9; - MathJax.Hub.msieHTMLCollectionBug = (document.documentMode < 9); - // - // MathPlayer doesn't function properly in IE10, and not at all in IE11, - // so don't even try to load it. - // - if (document.documentMode < 10 && !STARTUP.params.NoMathPlayer) { - try { - new ActiveXObject("MathPlayer.Factory.1"); - browser.hasMathPlayer = true; - } catch (err) {} - try { - if (browser.hasMathPlayer) { - var mathplayer = document.createElement("object"); - mathplayer.id = "mathplayer"; mathplayer.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987"; - HEAD.appendChild(mathplayer); - document.namespaces.add("m","http://www.w3.org/1998/Math/MathML"); - browser.mpNamespace = true; - if (document.readyState && (document.readyState === "loading" || - document.readyState === "interactive")) { - document.write(''); - browser.mpImported = true; - } - } else { - // Adding any namespace avoids a crash in IE9 in IE9-standards mode - // (any reference to document.namespaces before document.readyState is - // "complete" causes an "unspecified error" to be thrown) - document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink"); - } - } catch (err) {} - } - } - });} catch (err) { - console.error(err.message); - } - HUB.Browser.Select(MathJax.Message.browsers); - - if (BASE.AuthorConfig && typeof BASE.AuthorConfig.AuthorInit === "function") {BASE.AuthorConfig.AuthorInit()} - HUB.queue = BASE.Callback.Queue(); - HUB.queue.Push( - ["Post",STARTUP.signal,"Begin"], - ["Config",STARTUP], - ["Cookie",STARTUP], - ["Styles",STARTUP], - ["Message",STARTUP], - function () { - // Do Jax and Extensions in parallel, but wait for them all to complete - var queue = BASE.Callback.Queue( - STARTUP.Jax(), - STARTUP.Extensions() - ); - return queue.Push({}); - }, - ["Menu",STARTUP], - STARTUP.onLoad(), - function () {MathJax.isReady = true}, // indicates that MathJax is ready to process math - ["Typeset",STARTUP], - ["Hash",STARTUP], - ["MenuZoom",STARTUP], - ["Post",STARTUP.signal,"End"] - ); - -})("MathJax"); - -}} +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.3";MathJax.fileversion="2.7.3";MathJax.cdnVersion="2.7.3";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; From 73ee4fa619470f6b7fda93e3c1568b77ca6f10d4 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Wed, 21 Feb 2018 20:06:51 -0600 Subject: [PATCH 350/439] fixed formatting --- MacDown/Code/Document/MPDocument.m | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4379927f..88a75501 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -820,9 +820,11 @@ - (BOOL)textViewShouldMoveToLeftEndOfLine:(NSTextView *)textView #pragma mark - WebResourceLoadDelegate -- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource{ +- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource +{ - if([[request.URL lastPathComponent] isEqualToString:@"MathJax.js"]){ + if ([[request.URL lastPathComponent] isEqualToString:@"MathJax.js"]) + { NSURLComponents *origComps = [NSURLComponents componentsWithURL:[request URL] resolvingAgainstBaseURL:YES]; NSURLComponents *updatedComps = [NSURLComponents componentsWithURL:[[NSBundle mainBundle] URLForResource:@"MathJax" withExtension:@"js" subdirectory:@"MathJax"] resolvingAgainstBaseURL:NO]; [updatedComps setQueryItems:[origComps queryItems]]; @@ -1029,7 +1031,8 @@ - (NSString *)rendererHighlightingThemeName:(MPRenderer *)renderer - (void)renderer:(MPRenderer *)renderer didProduceHTMLOutput:(NSString *)html { - if (self.alreadyRenderingInWeb){ + if (self.alreadyRenderingInWeb) + { self.renderToWebPending = YES; return; } From 15da826882e53b40e9c7d98b7c54c312c2234eec Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Wed, 21 Feb 2018 20:56:13 -0600 Subject: [PATCH 351/439] fixed formatting --- MacDown/Code/Document/MPDocument.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 88a75501..b2f56206 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -172,7 +172,7 @@ - (int)rendererFlags @interface MPDocument () = 101100 - WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate,WebResourceLoadDelegate, + WebEditingDelegate, WebFrameLoadDelegate, WebPolicyDelegate, WebResourceLoadDelegate, #endif MPAutosaving, MPRendererDataSource, MPRendererDelegate> @@ -829,7 +829,7 @@ - (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequ NSURLComponents *updatedComps = [NSURLComponents componentsWithURL:[[NSBundle mainBundle] URLForResource:@"MathJax" withExtension:@"js" subdirectory:@"MathJax"] resolvingAgainstBaseURL:NO]; [updatedComps setQueryItems:[origComps queryItems]]; - request = [NSMutableURLRequest requestWithURL:[updatedComps URL]]; + request = [NSURLRequest requestWithURL:[updatedComps URL]]; } return request; From ebbefe8b55c93ca261881d1a305cc78eb2a6c961 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Thu, 22 Feb 2018 14:48:30 +0800 Subject: [PATCH 352/439] Fix group path on case-sensitive file system --- MacDown.xcodeproj/project.pbxproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index a37f9a7c..a82208d5 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -807,8 +807,7 @@ 1F8858BB1A2D8D82008DC543 /* MPArgumentProcessor.m */, 1FBE8E0E1A11DB1E003E1EF4 /* main.m */, ); - name = "macdown-cmd"; - path = "MacDown-cmd"; + path = "macdown-cmd"; sourceTree = ""; }; AC6D1A361B8B63012D598BC7 /* Pods */ = { From 74d66808dc30d5534cc6067770cffeb8ef61c602 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Thu, 1 Mar 2018 03:50:52 -0600 Subject: [PATCH 353/439] a good proof of concept --- MacDown/Code/Document/MPDocument.m | 104 ++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 16 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index b2f56206..4316da11 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -29,7 +29,7 @@ #import "MPMathJaxListener.h" #import "WebView+WebViewPrivateHeaders.h" #import "MPToolbarController.h" - +@import JavaScriptCore; static NSString * const kMPDefaultAutosaveName = @"Untitled"; @@ -1667,26 +1667,98 @@ - (void)scaleWebview #endif } +-(NSInteger) lineNumberForCharacterIndex:(NSInteger)character inDocument:(NSArray*)documentLines{ + for(NSInteger lineNumber = 0;lineNumber < [documentLines count];lineNumber++){ + NSString *line = documentLines[lineNumber]; + + if(character > [line length]){ + character -= ([line length] + 1); + }else{ + return lineNumber; + } + } + return [documentLines count]; +} + - (void)syncScrollers { - NSRect contentBounds = [self.editor.enclosingScrollView.contentView bounds]; - NSRect realContentRect = self.editor.contentRect; + NSRect visibleRect = [[[self.editor enclosingScrollView] contentView] documentVisibleRect]; + NSLayoutManager *layoutManager = [self.editor layoutManager]; + NSRange visibleGlyphRange = [layoutManager glyphRangeForBoundingRect:visibleRect inTextContainer:[self.editor textContainer]]; + NSRange visibleCharRange = [layoutManager characterRangeForGlyphRange:visibleGlyphRange actualGlyphRange:NULL]; - CGFloat ratio = 0.0; - if (realContentRect.size.height > contentBounds.size.height) - { - ratio = contentBounds.origin.y / - (realContentRect.size.height - contentBounds.size.height); + + NSArray* documentLines = [self.editor.string componentsSeparatedByString:@"\n"]; + NSInteger firstVisibleLine = [self lineNumberForCharacterIndex:visibleCharRange.location inDocument:documentLines]; + NSInteger lastVisibleLine = [self lineNumberForCharacterIndex:visibleCharRange.location + visibleCharRange.length inDocument:documentLines]; + + NSLog(@"visible lines: %@ => %@", @(firstVisibleLine), @(lastVisibleLine)); + + NSInteger relativeHeader = -1; // start of document + NSInteger characterCount = 0; + + NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; + + CGFloat minY = 0; + CGFloat maxY = 0; + CGFloat currY = NSMinY(self.editor.enclosingScrollView.contentView.bounds); + + NSMutableArray* offsetForHeaderInEditor = [NSMutableArray array]; + + for(NSInteger lineNumber = 0;lineNumber < [documentLines count];lineNumber++){ + NSString *line = documentLines[lineNumber]; + + if([regex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]){ + NSRange glyphRange = [layoutManager glyphRangeForCharacterRange:NSMakeRange(characterCount, [line length]) actualCharacterRange:nil]; + NSRect topRect = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:[self.editor textContainer]]; + CGFloat headerY = NSMidY(topRect); + + [offsetForHeaderInEditor addObject:@(headerY)]; + + if(headerY < currY){ + relativeHeader += 1; + minY = headerY; + }else if(maxY == 0){ + maxY = headerY; + } + } + + characterCount += [line length] + 1; + } + + if(maxY == 0){ + maxY = NSHeight(self.editor.enclosingScrollView.contentView.bounds); } + + currY = MAX(0, currY - minY); + maxY -= minY; + minY -= minY; - NSScrollView *previewScrollView = self.preview.enclosingScrollView; - NSClipView *previewContentView = previewScrollView.contentView; - NSView *previewDocumentView = previewScrollView.documentView; - NSRect previewContentBounds = previewContentView.bounds; - previewContentBounds.origin.y = - ratio * (previewDocumentView.frame.size.height - - previewContentBounds.size.height); - previewContentView.bounds = previewContentBounds; + NSLog(@"header %@ => %@", @(relativeHeader), @(relativeHeader+1)); + NSLog(@" - %.2f between %.2f => %.2f", currY,minY, maxY); + +// self.preview.enclosingScrollView.contentSize.height; + + NSArray* headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; + CGFloat offset = NSMinY(self.preview.enclosingScrollView.contentView.bounds); + + CGFloat topHeaderY = 0; + CGFloat bottomHeaderY = ceilf(NSHeight(self.preview.enclosingScrollView.contentView.bounds)); + + if([headerLocations count] > relativeHeader){ + topHeaderY = floorf([headerLocations[relativeHeader] doubleValue] + offset); + } + + if([headerLocations count] > relativeHeader + 1){ + bottomHeaderY = ceilf([headerLocations[relativeHeader + 1] doubleValue] + offset); + } + + NSLog(@"scroll %@ between: %@ => %@", @(round(currY / maxY * 100)), @(topHeaderY), @(bottomHeaderY)); + + CGFloat previewY = topHeaderY + (bottomHeaderY - topHeaderY) * (currY / maxY); + NSRect contentBounds = self.preview.enclosingScrollView.contentView.bounds; + contentBounds.origin.y = previewY; + self.preview.enclosingScrollView.contentView.bounds = contentBounds; } - (void)setSplitViewDividerLocation:(CGFloat)ratio From c31b0126e5fbc6f36275c8432359dd1e8e65ce55 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Thu, 1 Mar 2018 03:56:22 -0600 Subject: [PATCH 354/439] Syncs with both headers and images --- MacDown/Code/Document/MPDocument.m | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 4316da11..c4b95351 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1697,7 +1697,8 @@ - (void)syncScrollers NSInteger relativeHeader = -1; // start of document NSInteger characterCount = 0; - NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; + NSRegularExpression* hRegex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; + NSRegularExpression* imgRegex = [NSRegularExpression regularExpressionWithPattern:@"!\\[[^\\]]*\\]\\([^)]*\\)" options:0 error:nil]; CGFloat minY = 0; CGFloat maxY = 0; @@ -1708,7 +1709,8 @@ - (void)syncScrollers for(NSInteger lineNumber = 0;lineNumber < [documentLines count];lineNumber++){ NSString *line = documentLines[lineNumber]; - if([regex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]){ + if([imgRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])] || + [hRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]){ NSRange glyphRange = [layoutManager glyphRangeForCharacterRange:NSMakeRange(characterCount, [line length]) actualCharacterRange:nil]; NSRect topRect = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:[self.editor textContainer]]; CGFloat headerY = NSMidY(topRect); @@ -1739,7 +1741,7 @@ - (void)syncScrollers // self.preview.enclosingScrollView.contentSize.height; - NSArray* headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; + NSArray* headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; CGFloat offset = NSMinY(self.preview.enclosingScrollView.contentView.bounds); CGFloat topHeaderY = 0; From 3f8e7e1201b2b922c22e31533c37592421471356 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Thu, 1 Mar 2018 20:58:26 -0600 Subject: [PATCH 355/439] Cleaned up the code and added comments --- MacDown/Code/Document/MPDocument.m | 120 ++++++++++++++--------------- 1 file changed, 59 insertions(+), 61 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index c4b95351..99bc07b7 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1667,60 +1667,49 @@ - (void)scaleWebview #endif } --(NSInteger) lineNumberForCharacterIndex:(NSInteger)character inDocument:(NSArray*)documentLines{ - for(NSInteger lineNumber = 0;lineNumber < [documentLines count];lineNumber++){ - NSString *line = documentLines[lineNumber]; - - if(character > [line length]){ - character -= ([line length] + 1); - }else{ - return lineNumber; - } - } - return [documentLines count]; -} - - (void)syncScrollers { - NSRect visibleRect = [[[self.editor enclosingScrollView] contentView] documentVisibleRect]; NSLayoutManager *layoutManager = [self.editor layoutManager]; - NSRange visibleGlyphRange = [layoutManager glyphRangeForBoundingRect:visibleRect inTextContainer:[self.editor textContainer]]; - NSRange visibleCharRange = [layoutManager characterRangeForGlyphRange:visibleGlyphRange actualGlyphRange:NULL]; - - - NSArray* documentLines = [self.editor.string componentsSeparatedByString:@"\n"]; - NSInteger firstVisibleLine = [self lineNumberForCharacterIndex:visibleCharRange.location inDocument:documentLines]; - NSInteger lastVisibleLine = [self lineNumberForCharacterIndex:visibleCharRange.location + visibleCharRange.length inDocument:documentLines]; - - NSLog(@"visible lines: %@ => %@", @(firstVisibleLine), @(lastVisibleLine)); - - NSInteger relativeHeader = -1; // start of document + NSArray *documentLines = [self.editor.string componentsSeparatedByString:@"\n"]; + CGFloat editorContentHeight = ceilf(NSHeight(self.editor.enclosingScrollView.documentView.bounds)); + CGFloat editorVisibleHeight = ceilf(NSHeight(self.editor.enclosingScrollView.contentView.bounds)); + CGFloat previewContentHeight = ceilf(NSHeight(self.preview.enclosingScrollView.documentView.bounds)); + CGFloat previewVisibleHeight = ceilf(NSHeight(self.preview.enclosingScrollView.contentView.bounds)); + NSInteger relativeHeaderIndex = -1; // -1 is start of document, before any other header NSInteger characterCount = 0; - - NSRegularExpression* hRegex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; - NSRegularExpression* imgRegex = [NSRegularExpression regularExpressionWithPattern:@"!\\[[^\\]]*\\]\\([^)]*\\)" options:0 error:nil]; - + CGFloat currY = NSMinY(self.editor.enclosingScrollView.contentView.bounds); CGFloat minY = 0; CGFloat maxY = 0; - CGFloat currY = NSMinY(self.editor.enclosingScrollView.contentView.bounds); - - NSMutableArray* offsetForHeaderInEditor = [NSMutableArray array]; - for(NSInteger lineNumber = 0;lineNumber < [documentLines count];lineNumber++){ + // These are the patterns for markdown headers and images respectively. we're only going to + // handle images that are not inline with other text/images + NSRegularExpression *headerRegex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; + NSRegularExpression *imgRegex = [NSRegularExpression regularExpressionWithPattern:@"^!\\[[^\\]]*\\]\\([^)]*\\)$" options:0 error:nil]; + + // We start by splitting our document into lines, and then searching + // line by line for headers or images. + for (NSInteger lineNumber = 0; lineNumber < [documentLines count]; lineNumber++) + { NSString *line = documentLines[lineNumber]; - - if([imgRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])] || - [hRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]){ + + if ([imgRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])] || + [headerRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]) + { + // Calculate where this header/image appears vertically in the editor NSRange glyphRange = [layoutManager glyphRangeForCharacterRange:NSMakeRange(characterCount, [line length]) actualCharacterRange:nil]; NSRect topRect = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:[self.editor textContainer]]; CGFloat headerY = NSMidY(topRect); - [offsetForHeaderInEditor addObject:@(headerY)]; - - if(headerY < currY){ - relativeHeader += 1; + if (headerY < currY) + { + // The header is before our current scroll position. the closest + // of these will be our first reference node + relativeHeaderIndex += 1; minY = headerY; - }else if(maxY == 0){ + } else if (maxY == 0 && headerY < editorContentHeight - editorVisibleHeight) + { + // Skip any headers that are within the last screen of the editor. + // we'll interpolate to the end of the document in that case. maxY = headerY; } } @@ -1728,36 +1717,45 @@ - (void)syncScrollers characterCount += [line length] + 1; } - if(maxY == 0){ - maxY = NSHeight(self.editor.enclosingScrollView.contentView.bounds); + // Usually, we'll be scrolling between two reference nodes, but toward the end + // of the document we'll ignore nodes and reference the end of the document instead + BOOL interpolateToEndOfDocument = NO; + + if (maxY == 0) + { + // We only have a reference node before our current position, + // but not after, so we'll use the end of the document. + maxY = editorContentHeight - editorVisibleHeight; + interpolateToEndOfDocument = YES; } + // We are currently at currY offset, between minY and maxY, which represent + // headers indexed by relativeHeaderIndex and relativeHeaderIndex+1. currY = MAX(0, currY - minY); maxY -= minY; minY -= minY; - - NSLog(@"header %@ => %@", @(relativeHeader), @(relativeHeader+1)); - NSLog(@" - %.2f between %.2f => %.2f", currY,minY, maxY); - -// self.preview.enclosingScrollView.contentSize.height; - - NSArray* headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; + CGFloat percentScrolledBetweenHeaders = currY / maxY; + + // Now that we know where the editor position is relative to two reference nodes, + // we need to find the positions of those nodes in the HTML preview + NSArray *headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img:only-child\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; CGFloat offset = NSMinY(self.preview.enclosingScrollView.contentView.bounds); - CGFloat topHeaderY = 0; - CGFloat bottomHeaderY = ceilf(NSHeight(self.preview.enclosingScrollView.contentView.bounds)); - - if([headerLocations count] > relativeHeader){ - topHeaderY = floorf([headerLocations[relativeHeader] doubleValue] + offset); + CGFloat bottomHeaderY = previewContentHeight - previewVisibleHeight; + + // Find the Y positions in the preview window that we're scrolling between + if ([headerLocations count] > relativeHeaderIndex) + { + topHeaderY = floorf([headerLocations[relativeHeaderIndex] doubleValue] + offset); } - - if([headerLocations count] > relativeHeader + 1){ - bottomHeaderY = ceilf([headerLocations[relativeHeader + 1] doubleValue] + offset); + + if (!interpolateToEndOfDocument && [headerLocations count] > relativeHeaderIndex + 1) + { + bottomHeaderY = ceilf([headerLocations[relativeHeaderIndex + 1] doubleValue] + offset); } - - NSLog(@"scroll %@ between: %@ => %@", @(round(currY / maxY * 100)), @(topHeaderY), @(bottomHeaderY)); - CGFloat previewY = topHeaderY + (bottomHeaderY - topHeaderY) * (currY / maxY); + // Now we scroll percentScrolledBetweenHeaders percent between those two positions in the webview + CGFloat previewY = topHeaderY + (bottomHeaderY - topHeaderY) * percentScrolledBetweenHeaders; NSRect contentBounds = self.preview.enclosingScrollView.contentView.bounds; contentBounds.origin.y = previewY; self.preview.enclosingScrollView.contentView.bounds = contentBounds; From 1296ffa7693d32af16dc13b2f085093fede41efc Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Thu, 1 Mar 2018 21:13:19 -0600 Subject: [PATCH 356/439] Also handle headers defined by dashes under a text line --- MacDown/Code/Document/MPDocument.m | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 99bc07b7..0776b8d6 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1683,8 +1683,10 @@ - (void)syncScrollers // These are the patterns for markdown headers and images respectively. we're only going to // handle images that are not inline with other text/images + NSRegularExpression *dashRegex = [NSRegularExpression regularExpressionWithPattern:@"^([-]+)$" options:0 error:nil]; NSRegularExpression *headerRegex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; NSRegularExpression *imgRegex = [NSRegularExpression regularExpressionWithPattern:@"^!\\[[^\\]]*\\]\\([^)]*\\)$" options:0 error:nil]; + BOOL previousLineHadContent = NO; // We start by splitting our document into lines, and then searching // line by line for headers or images. @@ -1692,7 +1694,8 @@ - (void)syncScrollers { NSString *line = documentLines[lineNumber]; - if ([imgRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])] || + if ((previousLineHadContent && [dashRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]) || + [imgRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])] || [headerRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]) { // Calculate where this header/image appears vertically in the editor @@ -1714,6 +1717,8 @@ - (void)syncScrollers } } + previousLineHadContent = [line length] && ![dashRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]; + characterCount += [line length] + 1; } From 79cbdc90bc1be6a85d08da1149d72aa541017f9c Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Thu, 1 Mar 2018 21:23:39 -0600 Subject: [PATCH 357/439] Don't allow over/under scrolling the webframe during scroll sync --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 0776b8d6..ea49216b 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1739,7 +1739,7 @@ - (void)syncScrollers currY = MAX(0, currY - minY); maxY -= minY; minY -= minY; - CGFloat percentScrolledBetweenHeaders = currY / maxY; + CGFloat percentScrolledBetweenHeaders = MAX(0, MIN(1.0, currY / maxY)); // Now that we know where the editor position is relative to two reference nodes, // we need to find the positions of those nodes in the HTML preview From fb0775a9bfd7dfc00d139fc4f7440cfc34e968de Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Thu, 1 Mar 2018 21:35:30 -0600 Subject: [PATCH 358/439] moved to #import syntax from @import --- MacDown/Code/Document/MPDocument.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index ea49216b..139133ef 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -29,7 +29,7 @@ #import "MPMathJaxListener.h" #import "WebView+WebViewPrivateHeaders.h" #import "MPToolbarController.h" -@import JavaScriptCore; +#import static NSString * const kMPDefaultAutosaveName = @"Untitled"; From 1cf488759ec6f36b399a42fd0fd8808171f100d6 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Sat, 3 Mar 2018 18:22:30 -0600 Subject: [PATCH 359/439] Don't refresh the header locations in the HTML during scrolling. the javascript running was adding a small framedrop to scrolling the webview. --- MacDown/Code/Document/MPDocument.m | 51 ++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 139133ef..52a9fd45 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -211,12 +211,15 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property (nonatomic) BOOL needsToUnregister; @property (nonatomic) BOOL alreadyRenderingInWeb; @property (nonatomic) BOOL renderToWebPending; +@property (strong) NSArray *headerLocations; +@property (nonatomic) BOOL inLiveScroll; // Store file content in initializer until nib is loaded. @property (copy) NSString *loadedString; - (void)scaleWebview; - (void)syncScrollers; +-(void) updateHeaderLocations; @end @@ -233,6 +236,7 @@ static void (^MPGetPreviewLoadingCompletionHandler(MPDocument *doc))() [weakObj scaleWebview]; if (weakObj.preferences.editorSyncScrolling) { + [weakObj updateHeaderLocations]; [weakObj syncScrollers]; } else @@ -410,6 +414,12 @@ - (void)windowControllerDidLoadNib:(NSWindowController *)controller name:MPDidRequestEditorSetupNotification object:nil]; [center addObserver:self selector:@selector(didRequestPreviewReload:) name:MPDidRequestPreviewRenderNotification object:nil]; + [center addObserver:self selector:@selector(willStartLiveScroll:) + name:NSScrollViewWillStartLiveScrollNotification + object:self.editor.enclosingScrollView]; + [center addObserver:self selector:@selector(didEndLiveScroll:) + name:NSScrollViewDidEndLiveScrollNotification + object:self.editor.enclosingScrollView]; if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber10_9) { [center addObserver:self selector:@selector(previewDidLiveScroll:) @@ -1139,6 +1149,17 @@ - (void)editorFrameDidChange:(NSNotification *)notification [self adjustEditorInsets]; } +- (void)willStartLiveScroll:(NSNotification *)notification +{ + [self updateHeaderLocations]; + _inLiveScroll = YES; +} + +-(void)didEndLiveScroll:(NSNotification *)notification +{ + _inLiveScroll = NO; +} + - (void)editorBoundsDidChange:(NSNotification *)notification { if (!self.shouldHandleBoundsChange) @@ -1148,6 +1169,10 @@ - (void)editorBoundsDidChange:(NSNotification *)notification { @synchronized(self) { self.shouldHandleBoundsChange = NO; + if(!_inLiveScroll){ + [self updateHeaderLocations]; + } + [self syncScrollers]; self.shouldHandleBoundsChange = YES; } @@ -1667,6 +1692,22 @@ - (void)scaleWebview #endif } +-(void) updateHeaderLocations +{ + CGFloat offset = NSMinY(self.preview.enclosingScrollView.contentView.bounds); + NSMutableArray *locations = [NSMutableArray array]; + + _headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img:only-child\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; + + // add offset to all numbers + for (NSNumber *location in _headerLocations) + { + [locations addObject:@([location floatValue] + offset)]; + } + + _headerLocations = locations; +} + - (void)syncScrollers { NSLayoutManager *layoutManager = [self.editor layoutManager]; @@ -1743,20 +1784,18 @@ - (void)syncScrollers // Now that we know where the editor position is relative to two reference nodes, // we need to find the positions of those nodes in the HTML preview - NSArray *headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img:only-child\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; - CGFloat offset = NSMinY(self.preview.enclosingScrollView.contentView.bounds); CGFloat topHeaderY = 0; CGFloat bottomHeaderY = previewContentHeight - previewVisibleHeight; // Find the Y positions in the preview window that we're scrolling between - if ([headerLocations count] > relativeHeaderIndex) + if ([_headerLocations count] > relativeHeaderIndex) { - topHeaderY = floorf([headerLocations[relativeHeaderIndex] doubleValue] + offset); + topHeaderY = floorf([_headerLocations[relativeHeaderIndex] doubleValue]); } - if (!interpolateToEndOfDocument && [headerLocations count] > relativeHeaderIndex + 1) + if (!interpolateToEndOfDocument && [_headerLocations count] > relativeHeaderIndex + 1) { - bottomHeaderY = ceilf([headerLocations[relativeHeaderIndex + 1] doubleValue] + offset); + bottomHeaderY = ceilf([_headerLocations[relativeHeaderIndex + 1] doubleValue]); } // Now we scroll percentScrolledBetweenHeaders percent between those two positions in the webview From 7a5eafbdc558387f3dc76164bc320fd093dd54b6 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Sat, 3 Mar 2018 19:32:31 -0600 Subject: [PATCH 360/439] Optimize scrolling sync. This caches the header locations in both the editor and the webview. --- MacDown/Code/Document/MPDocument.m | 83 +++++++++++++++++------------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 52a9fd45..cef71317 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -211,7 +211,8 @@ typedef NS_ENUM(NSUInteger, MPWordCountType) { @property (nonatomic) BOOL needsToUnregister; @property (nonatomic) BOOL alreadyRenderingInWeb; @property (nonatomic) BOOL renderToWebPending; -@property (strong) NSArray *headerLocations; +@property (strong) NSArray *webViewHeaderLocations; +@property (strong) NSArray *editorHeaderLocations; @property (nonatomic) BOOL inLiveScroll; // Store file content in initializer until nib is loaded. @@ -1697,38 +1698,30 @@ -(void) updateHeaderLocations CGFloat offset = NSMinY(self.preview.enclosingScrollView.contentView.bounds); NSMutableArray *locations = [NSMutableArray array]; - _headerLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img:only-child\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; + _webViewHeaderLocations = [[self.preview.mainFrame.javaScriptContext evaluateScript:@"var arr = Array.prototype.slice.call(document.querySelectorAll(\"h1, h2, h3, h4, h5, h6, img:only-child\")); arr.map(function(n){ return n.getBoundingClientRect().top })"] toArray]; // add offset to all numbers - for (NSNumber *location in _headerLocations) + for (NSNumber *location in _webViewHeaderLocations) { [locations addObject:@([location floatValue] + offset)]; } - _headerLocations = locations; -} + _webViewHeaderLocations = [locations copy]; + -- (void)syncScrollers -{ + // Next, cache the locations of all of the reference nodes in the editor view. + NSInteger characterCount = 0; NSLayoutManager *layoutManager = [self.editor layoutManager]; NSArray *documentLines = [self.editor.string componentsSeparatedByString:@"\n"]; - CGFloat editorContentHeight = ceilf(NSHeight(self.editor.enclosingScrollView.documentView.bounds)); - CGFloat editorVisibleHeight = ceilf(NSHeight(self.editor.enclosingScrollView.contentView.bounds)); - CGFloat previewContentHeight = ceilf(NSHeight(self.preview.enclosingScrollView.documentView.bounds)); - CGFloat previewVisibleHeight = ceilf(NSHeight(self.preview.enclosingScrollView.contentView.bounds)); - NSInteger relativeHeaderIndex = -1; // -1 is start of document, before any other header - NSInteger characterCount = 0; - CGFloat currY = NSMinY(self.editor.enclosingScrollView.contentView.bounds); - CGFloat minY = 0; - CGFloat maxY = 0; - + [locations removeAllObjects]; + // These are the patterns for markdown headers and images respectively. we're only going to // handle images that are not inline with other text/images NSRegularExpression *dashRegex = [NSRegularExpression regularExpressionWithPattern:@"^([-]+)$" options:0 error:nil]; NSRegularExpression *headerRegex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; NSRegularExpression *imgRegex = [NSRegularExpression regularExpressionWithPattern:@"^!\\[[^\\]]*\\]\\([^)]*\\)$" options:0 error:nil]; BOOL previousLineHadContent = NO; - + // We start by splitting our document into lines, and then searching // line by line for headers or images. for (NSInteger lineNumber = 0; lineNumber < [documentLines count]; lineNumber++) @@ -1743,25 +1736,45 @@ - (void)syncScrollers NSRange glyphRange = [layoutManager glyphRangeForCharacterRange:NSMakeRange(characterCount, [line length]) actualCharacterRange:nil]; NSRect topRect = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:[self.editor textContainer]]; CGFloat headerY = NSMidY(topRect); - - if (headerY < currY) - { - // The header is before our current scroll position. the closest - // of these will be our first reference node - relativeHeaderIndex += 1; - minY = headerY; - } else if (maxY == 0 && headerY < editorContentHeight - editorVisibleHeight) - { - // Skip any headers that are within the last screen of the editor. - // we'll interpolate to the end of the document in that case. - maxY = headerY; - } + + [locations addObject:@(headerY)]; } previousLineHadContent = [line length] && ![dashRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]; characterCount += [line length] + 1; } + + _editorHeaderLocations = [locations copy]; +} + +- (void)syncScrollers +{ + CGFloat editorContentHeight = ceilf(NSHeight(self.editor.enclosingScrollView.documentView.bounds)); + CGFloat editorVisibleHeight = ceilf(NSHeight(self.editor.enclosingScrollView.contentView.bounds)); + CGFloat previewContentHeight = ceilf(NSHeight(self.preview.enclosingScrollView.documentView.bounds)); + CGFloat previewVisibleHeight = ceilf(NSHeight(self.preview.enclosingScrollView.contentView.bounds)); + NSInteger relativeHeaderIndex = -1; // -1 is start of document, before any other header + CGFloat currY = NSMinY(self.editor.enclosingScrollView.contentView.bounds); + CGFloat minY = 0; + CGFloat maxY = 0; + + // We start by splitting our document into lines, and then searching + // line by line for headers or images. + for (NSNumber *headerY in _editorHeaderLocations) { + if ([headerY floatValue] < currY) + { + // The header is before our current scroll position. the closest + // of these will be our first reference node + relativeHeaderIndex += 1; + minY = [headerY floatValue]; + } else if (maxY == 0 && [headerY floatValue] < editorContentHeight - editorVisibleHeight) + { + // Skip any headers that are within the last screen of the editor. + // we'll interpolate to the end of the document in that case. + maxY = [headerY floatValue]; + } + } // Usually, we'll be scrolling between two reference nodes, but toward the end // of the document we'll ignore nodes and reference the end of the document instead @@ -1788,14 +1801,14 @@ - (void)syncScrollers CGFloat bottomHeaderY = previewContentHeight - previewVisibleHeight; // Find the Y positions in the preview window that we're scrolling between - if ([_headerLocations count] > relativeHeaderIndex) + if ([_webViewHeaderLocations count] > relativeHeaderIndex) { - topHeaderY = floorf([_headerLocations[relativeHeaderIndex] doubleValue]); + topHeaderY = floorf([_webViewHeaderLocations[relativeHeaderIndex] doubleValue]); } - if (!interpolateToEndOfDocument && [_headerLocations count] > relativeHeaderIndex + 1) + if (!interpolateToEndOfDocument && [_webViewHeaderLocations count] > relativeHeaderIndex + 1) { - bottomHeaderY = ceilf([_headerLocations[relativeHeaderIndex + 1] doubleValue]); + bottomHeaderY = ceilf([_webViewHeaderLocations[relativeHeaderIndex + 1] doubleValue]); } // Now we scroll percentScrolledBetweenHeaders percent between those two positions in the webview From 87341da13b88b1d5d8c17f6ec032441b5e24d240 Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Mon, 19 Mar 2018 00:28:43 -0500 Subject: [PATCH 361/439] Align editor and web view at the middle of the screen instead of top of the screen, unless the editor is at its very top or bottom. --- MacDown/Code/Document/MPDocument.m | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index cef71317..459da032 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1758,21 +1758,29 @@ - (void)syncScrollers CGFloat currY = NSMinY(self.editor.enclosingScrollView.contentView.bounds); CGFloat minY = 0; CGFloat maxY = 0; + + // align the documents at the middle of the screen, except at top/bottom of document + CGFloat topTaper = MAX(0, MIN(1.0, currY / editorVisibleHeight)); + CGFloat bottomTaper = 1.0 - MAX(0, MIN(1.0, (currY - editorContentHeight + 2 * editorVisibleHeight) / editorVisibleHeight)); + CGFloat adjustmentForScroll = topTaper * bottomTaper * editorVisibleHeight / 2; // We start by splitting our document into lines, and then searching // line by line for headers or images. - for (NSNumber *headerY in _editorHeaderLocations) { - if ([headerY floatValue] < currY) + for (NSNumber *headerYNum in _editorHeaderLocations) { + CGFloat headerY = [headerYNum floatValue]; + headerY -= adjustmentForScroll; + + if (headerY < currY) { // The header is before our current scroll position. the closest // of these will be our first reference node relativeHeaderIndex += 1; - minY = [headerY floatValue]; - } else if (maxY == 0 && [headerY floatValue] < editorContentHeight - editorVisibleHeight) + minY = headerY; + } else if (maxY == 0 && headerY < editorContentHeight - editorVisibleHeight) { // Skip any headers that are within the last screen of the editor. // we'll interpolate to the end of the document in that case. - maxY = [headerY floatValue]; + maxY = headerY; } } @@ -1784,10 +1792,10 @@ - (void)syncScrollers { // We only have a reference node before our current position, // but not after, so we'll use the end of the document. - maxY = editorContentHeight - editorVisibleHeight; + maxY = editorContentHeight - editorVisibleHeight + adjustmentForScroll; interpolateToEndOfDocument = YES; } - + // We are currently at currY offset, between minY and maxY, which represent // headers indexed by relativeHeaderIndex and relativeHeaderIndex+1. currY = MAX(0, currY - minY); @@ -1803,12 +1811,12 @@ - (void)syncScrollers // Find the Y positions in the preview window that we're scrolling between if ([_webViewHeaderLocations count] > relativeHeaderIndex) { - topHeaderY = floorf([_webViewHeaderLocations[relativeHeaderIndex] doubleValue]); + topHeaderY = floorf([_webViewHeaderLocations[relativeHeaderIndex] doubleValue]) - adjustmentForScroll; } if (!interpolateToEndOfDocument && [_webViewHeaderLocations count] > relativeHeaderIndex + 1) { - bottomHeaderY = ceilf([_webViewHeaderLocations[relativeHeaderIndex + 1] doubleValue]); + bottomHeaderY = ceilf([_webViewHeaderLocations[relativeHeaderIndex + 1] doubleValue]) - adjustmentForScroll; } // Now we scroll percentScrolledBetweenHeaders percent between those two positions in the webview From b268b2b257cf0bba76728886d2c0a1e5a2e3cc9c Mon Sep 17 00:00:00 2001 From: Adam Wulf Date: Mon, 19 Mar 2018 01:15:04 -0500 Subject: [PATCH 362/439] Ignore any header that appears in the last screen height of the document. This prevents jumping the scroll as its tapering in that last screen height. --- MacDown/Code/Document/MPDocument.m | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/MacDown/Code/Document/MPDocument.m b/MacDown/Code/Document/MPDocument.m index 96321916..bbdc721f 100644 --- a/MacDown/Code/Document/MPDocument.m +++ b/MacDown/Code/Document/MPDocument.m @@ -1742,6 +1742,9 @@ -(void) updateHeaderLocations NSRegularExpression *headerRegex = [NSRegularExpression regularExpressionWithPattern:@"^(#+)\\s" options:0 error:nil]; NSRegularExpression *imgRegex = [NSRegularExpression regularExpressionWithPattern:@"^!\\[[^\\]]*\\]\\([^)]*\\)$" options:0 error:nil]; BOOL previousLineHadContent = NO; + + CGFloat editorContentHeight = ceilf(NSHeight(self.editor.enclosingScrollView.documentView.bounds)); + CGFloat editorVisibleHeight = ceilf(NSHeight(self.editor.enclosingScrollView.contentView.bounds)); // We start by splitting our document into lines, and then searching // line by line for headers or images. @@ -1758,7 +1761,9 @@ -(void) updateHeaderLocations NSRect topRect = [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:[self.editor textContainer]]; CGFloat headerY = NSMidY(topRect); - [locations addObject:@(headerY)]; + if(headerY <= editorContentHeight - editorVisibleHeight){ + [locations addObject:@(headerY)]; + } } previousLineHadContent = [line length] && ![dashRegex numberOfMatchesInString:line options:0 range:NSMakeRange(0, [line length])]; From 4648919cd6da6b6597b791003caf2278a32777bb Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Wed, 21 Mar 2018 23:35:59 -0400 Subject: [PATCH 363/439] Fix bug of rendering only the first Graphviz image Assumption: - Graphviz images are always in code blocks. - Code blocks are constructed as CODE tag in PRE tag. - The CODE tag has "language-*" class. --- MacDown/Resources/Extensions/viz.init.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/MacDown/Resources/Extensions/viz.init.js b/MacDown/Resources/Extensions/viz.init.js index 4f1eaf12..d370d228 100644 --- a/MacDown/Resources/Extensions/viz.init.js +++ b/MacDown/Resources/Extensions/viz.init.js @@ -8,17 +8,12 @@ "twopi"]; function doGraphviz(engine) { - var domAllDot = document.querySelectorAll(".language-" + engine); + var domAllDot = document.querySelectorAll("code.language-" + engine); for (var i = 0; i < domAllDot.length; i++) { var dom = domAllDot[i]; var graphSource = dom.innerText || dom.textContent; - - dom = dom.parentElement; - if (dom.tagName === "PRE") { - dom = dom.parentElement; - } - dom.innerHTML = Viz(graphSource, { engine: engine}); + dom.parentElement.parentElement.innerHTML = Viz(graphSource, { engine: engine}); } } @@ -32,4 +27,4 @@ } else { window.attachEvent("onload", init); } -})(); \ No newline at end of file +})(); From 5749970b7033ddbe40c14f16582287824b22f8e6 Mon Sep 17 00:00:00 2001 From: Franklin Yu Date: Thu, 22 Mar 2018 22:05:00 -0400 Subject: [PATCH 364/439] Make Graphviz more robust Failure in one graph should not affect others. --- MacDown/Resources/Extensions/viz.init.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MacDown/Resources/Extensions/viz.init.js b/MacDown/Resources/Extensions/viz.init.js index d370d228..42caa419 100644 --- a/MacDown/Resources/Extensions/viz.init.js +++ b/MacDown/Resources/Extensions/viz.init.js @@ -13,7 +13,11 @@ var dom = domAllDot[i]; var graphSource = dom.innerText || dom.textContent; - dom.parentElement.parentElement.innerHTML = Viz(graphSource, { engine: engine}); + try { + dom.parentElement.parentElement.innerHTML = Viz(graphSource, {engine: engine}); + } catch (e) { + console.error("Error when parsing node:", dom, e); + } } } From 345d02c5960a777f5c014807d69101cbcab4eaca Mon Sep 17 00:00:00 2001 From: Jack Weatherilt Date: Thu, 29 Mar 2018 12:27:43 +0100 Subject: [PATCH 365/439] css: Change printing margins to standard 2cm This commit adds `body { margin: 2cm; }` or the equivalent `padding` to each of the standard CSS files. This changes the standard printing and PDF format to something users are more familiar with, and are hopefully more pleased with. The 2cm margin is standard A4 paper margin for Apple Pages. Fixes: #948 --- MacDown/Resources/Styles/Clearness Dark.css | 5 ++++- MacDown/Resources/Styles/Clearness.css | 5 ++++- MacDown/Resources/Styles/GitHub.css | 5 ++++- MacDown/Resources/Styles/GitHub2.css | 3 +++ MacDown/Resources/Styles/Solarized (Dark).css | 5 ++++- MacDown/Resources/Styles/Solarized (Light).css | 5 ++++- 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/MacDown/Resources/Styles/Clearness Dark.css b/MacDown/Resources/Styles/Clearness Dark.css index 0b158bc1..8aa8c84c 100755 --- a/MacDown/Resources/Styles/Clearness Dark.css +++ b/MacDown/Resources/Styles/Clearness Dark.css @@ -156,4 +156,7 @@ kbd { table, pre { page-break-inside: avoid; } -} \ No newline at end of file + body { + margin: 2cm 2cm 2cm 2cm; + } +} diff --git a/MacDown/Resources/Styles/Clearness.css b/MacDown/Resources/Styles/Clearness.css index eef609d5..e3f0822f 100755 --- a/MacDown/Resources/Styles/Clearness.css +++ b/MacDown/Resources/Styles/Clearness.css @@ -157,4 +157,7 @@ kbd { table, pre { page-break-inside: avoid; } -} \ No newline at end of file + body { + margin: 2cm 2cm 2cm 2cm; + } +} diff --git a/MacDown/Resources/Styles/GitHub.css b/MacDown/Resources/Styles/GitHub.css index 7b030172..32957ce5 100755 --- a/MacDown/Resources/Styles/GitHub.css +++ b/MacDown/Resources/Styles/GitHub.css @@ -90,4 +90,7 @@ kbd { pre { word-wrap: break-word; } -} \ No newline at end of file + body { + padding: 2cm 2cm 2cm 2cm; + } +} diff --git a/MacDown/Resources/Styles/GitHub2.css b/MacDown/Resources/Styles/GitHub2.css index ca62d29f..1f11eb5d 100755 --- a/MacDown/Resources/Styles/GitHub2.css +++ b/MacDown/Resources/Styles/GitHub2.css @@ -309,4 +309,7 @@ kbd { pre { word-wrap: break-word; } + body { + padding: 2cm 2cm 2cm 2cm; + } } diff --git a/MacDown/Resources/Styles/Solarized (Dark).css b/MacDown/Resources/Styles/Solarized (Dark).css index 8ab1d03b..298de17b 100755 --- a/MacDown/Resources/Styles/Solarized (Dark).css +++ b/MacDown/Resources/Styles/Solarized (Dark).css @@ -196,4 +196,7 @@ kbd { * { color: #000 !important; } -} \ No newline at end of file + body { + margin: 2cm 2cm 2cm 2cm; + } +} diff --git a/MacDown/Resources/Styles/Solarized (Light).css b/MacDown/Resources/Styles/Solarized (Light).css index ba6590c6..d0543dc1 100755 --- a/MacDown/Resources/Styles/Solarized (Light).css +++ b/MacDown/Resources/Styles/Solarized (Light).css @@ -196,4 +196,7 @@ kbd { * { color: #000 !important; } -} \ No newline at end of file + body { + margin: 2cm 2cm 2cm 2cm; + } +} From a99901b847017d6246a175f6d98d51dca339d538 Mon Sep 17 00:00:00 2001 From: Jack Weatherilt Date: Thu, 29 Mar 2018 12:44:38 +0100 Subject: [PATCH 366/439] css: Remove forced black text colour. Duplicate and conflicting styles for the `body` margin were also removed. Fixes: #949 --- MacDown/Resources/Styles/Clearness Dark.css | 3 --- MacDown/Resources/Styles/Clearness.css | 3 --- MacDown/Resources/Styles/Solarized (Dark).css | 6 ------ MacDown/Resources/Styles/Solarized (Light).css | 6 ------ 4 files changed, 18 deletions(-) diff --git a/MacDown/Resources/Styles/Clearness Dark.css b/MacDown/Resources/Styles/Clearness Dark.css index 8aa8c84c..4b70c45e 100755 --- a/MacDown/Resources/Styles/Clearness Dark.css +++ b/MacDown/Resources/Styles/Clearness Dark.css @@ -150,9 +150,6 @@ kbd { } } @media print { - body,code,pre code,h1,h2,h3,h4,h5,h6 { - color: black; - } table, pre { page-break-inside: avoid; } diff --git a/MacDown/Resources/Styles/Clearness.css b/MacDown/Resources/Styles/Clearness.css index e3f0822f..77d206a6 100755 --- a/MacDown/Resources/Styles/Clearness.css +++ b/MacDown/Resources/Styles/Clearness.css @@ -151,9 +151,6 @@ kbd { } } @media print { - body,code,pre code,h1,h2,h3,h4,h5,h6 { - color: black; - } table, pre { page-break-inside: avoid; } diff --git a/MacDown/Resources/Styles/Solarized (Dark).css b/MacDown/Resources/Styles/Solarized (Dark).css index 298de17b..24dc9c8c 100755 --- a/MacDown/Resources/Styles/Solarized (Dark).css +++ b/MacDown/Resources/Styles/Solarized (Dark).css @@ -190,12 +190,6 @@ kbd { } @media print { - body { - margin: 0; - } - * { - color: #000 !important; - } body { margin: 2cm 2cm 2cm 2cm; } diff --git a/MacDown/Resources/Styles/Solarized (Light).css b/MacDown/Resources/Styles/Solarized (Light).css index d0543dc1..64304d7a 100755 --- a/MacDown/Resources/Styles/Solarized (Light).css +++ b/MacDown/Resources/Styles/Solarized (Light).css @@ -190,12 +190,6 @@ kbd { } @media print { - body { - margin: 0; - } - * { - color: #000 !important; - } body { margin: 2cm 2cm 2cm 2cm; } From 9b393539c59d6bd78945404a9f766c894111b0c6 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Fri, 6 Apr 2018 18:46:05 +0800 Subject: [PATCH 367/439] Fork handlebars-objc and update Podfile Fix #954. --- MacDown.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | 8 ++++++++ Podfile | 2 +- Podfile.lock | 6 +++--- 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 MacDown.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/MacDown.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/MacDown.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/MacDown.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Podfile b/Podfile index ad07d31b..946b38b3 100644 --- a/Podfile +++ b/Podfile @@ -1,6 +1,6 @@ platform :osx, "10.8" -source 'https://github.com/MacDownApp/cocoapods-specs.git' # Patched Howdown. +source 'https://github.com/MacDownApp/cocoapods-specs.git' # Patched libraries. source 'https://github.com/CocoaPods/Specs.git' project 'MacDown.xcodeproj' diff --git a/Podfile.lock b/Podfile.lock index 15bdd80a..c815182e 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,6 +1,6 @@ PODS: - GBCli (1.1) - - handlebars-objc (1.4.4) + - handlebars-objc (1.4.5) - hoedown (3.0.7): - hoedown/standard (= 3.0.7) - hoedown/standard (3.0.7) @@ -24,7 +24,7 @@ DEPENDENCIES: SPEC CHECKSUMS: GBCli: e5f988fadb68e1e3c01919f134009fed9796fde0 - handlebars-objc: ffad49df7e6dd17630ecccb2ef5e91cbaf12ad70 + handlebars-objc: dde09557cfee1dd0f34ab39595bd5eae7e17cb8b hoedown: 8141833441f6430686c06bbc5159d7ce615155fb JJPluralForm: 9a6235813990a33a63fb3eff457eb2c633af6acd LibYAML: 3af2c5adf3a40dff936d087aa6a77edc10036bc5 @@ -33,6 +33,6 @@ SPEC CHECKSUMS: PAPreferences: 9f0ffb1e67174a0df001af9d3320166ceb9ee6f5 Sparkle: 06ea33170007c5937ee54da481b4481af98fac79 -PODFILE CHECKSUM: 69e73b80f886f1262b23e4a59632685ac15c0ac3 +PODFILE CHECKSUM: 1c5b20dfe418eb7c8d4ad108b08133a493681f55 COCOAPODS: 1.3.1 From b8f7aca89d23bf491eca12f606bc8272af332b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Cattiau?= Date: Mon, 9 Apr 2018 13:12:12 -0700 Subject: [PATCH 368/439] Fix duplication of mermaid graph --- MacDown/Resources/Extensions/mermaid.init.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MacDown/Resources/Extensions/mermaid.init.js b/MacDown/Resources/Extensions/mermaid.init.js index f185b857..8e48f39d 100644 --- a/MacDown/Resources/Extensions/mermaid.init.js +++ b/MacDown/Resources/Extensions/mermaid.init.js @@ -22,9 +22,9 @@ } var insertSvg = function(svgCode, bindFunctions){ - dom.innerHTML = svgCode; + this.innerHTML = svgCode; }; - var graph = mermaidAPI.render('graphDiv' + i, graphSource, insertSvg) + var graph = mermaidAPI.render('graphDiv' + i, graphSource, insertSvg.bind(dom)) } }; @@ -33,4 +33,4 @@ } else { window.attachEvent("onload", init); } -})(); \ No newline at end of file +})(); From 7c740e675fa6f2f233a9c0fbca5d7124eb70fac8 Mon Sep 17 00:00:00 2001 From: Jack Weatherilt Date: Tue, 10 Apr 2018 13:38:10 +0100 Subject: [PATCH 369/439] css: Simplify margin syntax. --- MacDown/Resources/Styles/Clearness Dark.css | 2 +- MacDown/Resources/Styles/Clearness.css | 2 +- MacDown/Resources/Styles/GitHub.css | 2 +- MacDown/Resources/Styles/GitHub2.css | 2 +- MacDown/Resources/Styles/Solarized (Dark).css | 2 +- MacDown/Resources/Styles/Solarized (Light).css | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MacDown/Resources/Styles/Clearness Dark.css b/MacDown/Resources/Styles/Clearness Dark.css index 4b70c45e..5f192ca9 100755 --- a/MacDown/Resources/Styles/Clearness Dark.css +++ b/MacDown/Resources/Styles/Clearness Dark.css @@ -154,6 +154,6 @@ kbd { page-break-inside: avoid; } body { - margin: 2cm 2cm 2cm 2cm; + margin: 2cm; } } diff --git a/MacDown/Resources/Styles/Clearness.css b/MacDown/Resources/Styles/Clearness.css index 77d206a6..33c094f2 100755 --- a/MacDown/Resources/Styles/Clearness.css +++ b/MacDown/Resources/Styles/Clearness.css @@ -155,6 +155,6 @@ kbd { page-break-inside: avoid; } body { - margin: 2cm 2cm 2cm 2cm; + margin: 2cm; } } diff --git a/MacDown/Resources/Styles/GitHub.css b/MacDown/Resources/Styles/GitHub.css index 32957ce5..bf910b0a 100755 --- a/MacDown/Resources/Styles/GitHub.css +++ b/MacDown/Resources/Styles/GitHub.css @@ -91,6 +91,6 @@ kbd { word-wrap: break-word; } body { - padding: 2cm 2cm 2cm 2cm; + padding: 2cm; } } diff --git a/MacDown/Resources/Styles/GitHub2.css b/MacDown/Resources/Styles/GitHub2.css index 1f11eb5d..805173aa 100755 --- a/MacDown/Resources/Styles/GitHub2.css +++ b/MacDown/Resources/Styles/GitHub2.css @@ -310,6 +310,6 @@ kbd { word-wrap: break-word; } body { - padding: 2cm 2cm 2cm 2cm; + padding: 2cm; } } diff --git a/MacDown/Resources/Styles/Solarized (Dark).css b/MacDown/Resources/Styles/Solarized (Dark).css index 24dc9c8c..19edc75a 100755 --- a/MacDown/Resources/Styles/Solarized (Dark).css +++ b/MacDown/Resources/Styles/Solarized (Dark).css @@ -191,6 +191,6 @@ kbd { @media print { body { - margin: 2cm 2cm 2cm 2cm; + margin: 2cm; } } diff --git a/MacDown/Resources/Styles/Solarized (Light).css b/MacDown/Resources/Styles/Solarized (Light).css index 64304d7a..ec2f95e6 100755 --- a/MacDown/Resources/Styles/Solarized (Light).css +++ b/MacDown/Resources/Styles/Solarized (Light).css @@ -191,6 +191,6 @@ kbd { @media print { body { - margin: 2cm 2cm 2cm 2cm; + margin: 2cm; } } From 5bdcacd19bf6d4c9a92651003a58d13333c62d04 Mon Sep 17 00:00:00 2001 From: sitelight Date: Sat, 28 Apr 2018 07:53:57 +0200 Subject: [PATCH 370/439] Update MPDocument.xib --- .../Localization/Base.lproj/MPDocument.xib | 282 +++++++++++++++++- 1 file changed, 281 insertions(+), 1 deletion(-) diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index e0b87d9f..037d5424 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -2,9 +2,11 @@ + + @@ -27,7 +29,7 @@ - + @@ -49,6 +51,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -147,4 +411,20 @@ + + + + + + + + + + + + + + + + From 36580d366c8ab219d5f6080b7fd100c72404c7dd Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 May 2018 15:41:00 +0800 Subject: [PATCH 371/439] Update translations --- .gitignore | 1 + MacDown.xcodeproj/project.pbxproj | 90 +++++ .../Localization/ar.lproj/Localizable.strings | 1 - .../Localization/ar.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | 1 - ...ExportPanelAccessoryViewController.strings | 1 - ...MPGeneralPreferencesViewController.strings | 1 - .../MPHtmlPreferencesViewController.strings | 1 - ...PMarkdownPreferencesViewController.strings | 1 - ...PTerminalPreferencesViewController.strings | 1 - .../Localization/ar.lproj/MainMenu.strings | 1 - .../de-DE.lproj/Localizable.strings | 0 .../de-DE.lproj/MPDocument.strings | 0 .../MPEditorPreferencesViewController.strings | 0 ...ExportPanelAccessoryViewController.strings | 0 ...MPGeneralPreferencesViewController.strings | 0 .../MPHtmlPreferencesViewController.strings | 0 ...PMarkdownPreferencesViewController.strings | 0 ...PTerminalPreferencesViewController.strings | 0 .../Localization/de-DE.lproj/MainMenu.strings | 0 .../Localization/de.lproj/Localizable.strings | Bin 2834 -> 4140 bytes .../Localization/de.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 2986 -> 5920 bytes ...ExportPanelAccessoryViewController.strings | Bin 271 -> 544 bytes ...MPGeneralPreferencesViewController.strings | Bin 1301 -> 2600 bytes .../MPHtmlPreferencesViewController.strings | Bin 2619 -> 5222 bytes ...PMarkdownPreferencesViewController.strings | Bin 1693 -> 3380 bytes ...PTerminalPreferencesViewController.strings | 1 - .../Localization/de.lproj/MainMenu.strings | Bin 13358 -> 26568 bytes .../Localization/es.lproj/Localizable.strings | Bin 2823 -> 5664 bytes .../Localization/es.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 3011 -> 5978 bytes ...ExportPanelAccessoryViewController.strings | Bin 271 -> 544 bytes ...MPGeneralPreferencesViewController.strings | Bin 1407 -> 2810 bytes .../MPHtmlPreferencesViewController.strings | Bin 2729 -> 5438 bytes ...PMarkdownPreferencesViewController.strings | Bin 1627 -> 3248 bytes ...PTerminalPreferencesViewController.strings | Bin 26 -> 1874 bytes .../Localization/es.lproj/MainMenu.strings | Bin 13296 -> 26502 bytes .../Localization/et.lproj/Localizable.strings | 0 .../Localization/et.lproj/MPDocument.strings | 0 .../MPEditorPreferencesViewController.strings | 0 ...ExportPanelAccessoryViewController.strings | 0 ...MPGeneralPreferencesViewController.strings | 0 .../MPHtmlPreferencesViewController.strings | 0 ...PMarkdownPreferencesViewController.strings | 0 ...PTerminalPreferencesViewController.strings | 0 .../Localization/et.lproj/MainMenu.strings | 0 .../Localization/fr.lproj/Localizable.strings | Bin 2885 -> 5650 bytes .../Localization/fr.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 3048 -> 6024 bytes ...ExportPanelAccessoryViewController.strings | Bin 277 -> 556 bytes ...MPGeneralPreferencesViewController.strings | Bin 1411 -> 2788 bytes .../MPHtmlPreferencesViewController.strings | Bin 2754 -> 5910 bytes ...PMarkdownPreferencesViewController.strings | Bin 1641 -> 3280 bytes ...PTerminalPreferencesViewController.strings | Bin 954 -> 1900 bytes .../Localization/fr.lproj/MainMenu.strings | Bin 13356 -> 26516 bytes .../Localization/is.lproj/Localizable.strings | Bin 1905 -> 3772 bytes .../Localization/is.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 1642 -> 3240 bytes ...ExportPanelAccessoryViewController.strings | 1 - ...MPGeneralPreferencesViewController.strings | Bin 824 -> 1614 bytes .../MPHtmlPreferencesViewController.strings | Bin 712 -> 1412 bytes ...PMarkdownPreferencesViewController.strings | Bin 788 -> 1568 bytes ...PTerminalPreferencesViewController.strings | Bin 620 -> 1230 bytes .../Localization/is.lproj/MainMenu.strings | Bin 11440 -> 22652 bytes .../it-IT.lproj/Localizable.strings | Bin 2751 -> 4002 bytes .../it-IT.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 2929 -> 5836 bytes ...ExportPanelAccessoryViewController.strings | Bin 261 -> 524 bytes ...MPGeneralPreferencesViewController.strings | Bin 1340 -> 2682 bytes .../MPHtmlPreferencesViewController.strings | Bin 2401 -> 4804 bytes ...PMarkdownPreferencesViewController.strings | Bin 1545 -> 3090 bytes ...PTerminalPreferencesViewController.strings | 1 - .../Localization/it-IT.lproj/MainMenu.strings | Bin 12763 -> 25482 bytes .../Localization/ja.lproj/Localizable.strings | Bin 3091 -> 5080 bytes .../Localization/ja.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 3043 -> 5300 bytes ...ExportPanelAccessoryViewController.strings | Bin 296 -> 502 bytes ...MPGeneralPreferencesViewController.strings | Bin 1341 -> 2296 bytes .../MPHtmlPreferencesViewController.strings | Bin 2765 -> 5252 bytes ...PMarkdownPreferencesViewController.strings | Bin 1693 -> 3076 bytes ...PTerminalPreferencesViewController.strings | Bin 26 -> 1694 bytes .../Localization/ja.lproj/MainMenu.strings | Bin 13557 -> 24970 bytes .../ko-KR.lproj/Localizable.strings | Bin 425 -> 3044 bytes .../ko-KR.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 1220 -> 2544 bytes ...ExportPanelAccessoryViewController.strings | Bin 263 -> 484 bytes ...MPGeneralPreferencesViewController.strings | Bin 228 -> 422 bytes .../MPHtmlPreferencesViewController.strings | Bin 466 -> 886 bytes ...PMarkdownPreferencesViewController.strings | Bin 211 -> 842 bytes ...PTerminalPreferencesViewController.strings | 1 - .../Localization/ko-KR.lproj/MainMenu.strings | Bin 9263 -> 18846 bytes .../nb-NO.lproj/Localizable.strings | Bin 0 -> 7208 bytes .../nb-NO.lproj/MPDocument.strings | 0 .../MPEditorPreferencesViewController.strings | Bin 0 -> 5850 bytes ...ExportPanelAccessoryViewController.strings | Bin 0 -> 536 bytes ...MPGeneralPreferencesViewController.strings | Bin 0 -> 2654 bytes .../MPHtmlPreferencesViewController.strings | Bin 0 -> 5662 bytes ...PMarkdownPreferencesViewController.strings | Bin 0 -> 3262 bytes ...PTerminalPreferencesViewController.strings | Bin 0 -> 1814 bytes .../Localization/nb-NO.lproj/MainMenu.strings | Bin 0 -> 26714 bytes .../nl-NL.lproj/Localizable.strings | 1 - .../nl-NL.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | 63 ---- ...ExportPanelAccessoryViewController.strings | 6 - ...MPGeneralPreferencesViewController.strings | 27 -- .../MPHtmlPreferencesViewController.strings | 57 --- ...PMarkdownPreferencesViewController.strings | 42 --- ...PTerminalPreferencesViewController.strings | 18 - .../Localization/nl-NL.lproj/MainMenu.strings | 351 ------------------ .../pt-BR.lproj/Localizable.strings | Bin 2871 -> 4088 bytes .../pt-BR.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 2981 -> 5926 bytes ...ExportPanelAccessoryViewController.strings | Bin 267 -> 536 bytes ...MPGeneralPreferencesViewController.strings | Bin 1380 -> 2742 bytes .../MPHtmlPreferencesViewController.strings | Bin 2716 -> 5404 bytes ...PMarkdownPreferencesViewController.strings | Bin 1672 -> 3322 bytes ...PTerminalPreferencesViewController.strings | Bin 942 -> 1864 bytes .../Localization/pt-BR.lproj/MainMenu.strings | Bin 13303 -> 26470 bytes .../sk-SK.lproj/Localizable.strings | 0 .../sk-SK.lproj/MPDocument.strings | 0 .../MPEditorPreferencesViewController.strings | 0 ...ExportPanelAccessoryViewController.strings | 0 ...MPGeneralPreferencesViewController.strings | 0 .../MPHtmlPreferencesViewController.strings | 0 ...PMarkdownPreferencesViewController.strings | 0 ...PTerminalPreferencesViewController.strings | 0 .../Localization/sk-SK.lproj/MainMenu.strings | 0 .../Localization/sk.lproj/Localizable.strings | Bin 26 -> 4036 bytes .../Localization/sk.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 2937 -> 5774 bytes ...ExportPanelAccessoryViewController.strings | Bin 274 -> 536 bytes ...MPGeneralPreferencesViewController.strings | Bin 550 -> 2056 bytes .../MPHtmlPreferencesViewController.strings | Bin 1043 -> 3682 bytes ...PMarkdownPreferencesViewController.strings | Bin 26 -> 2064 bytes ...PTerminalPreferencesViewController.strings | Bin 26 -> 970 bytes .../Localization/sk.lproj/MainMenu.strings | Bin 26 -> 22020 bytes .../Localization/sv.lproj/Localizable.strings | Bin 1153 -> 2282 bytes .../Localization/sv.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 1229 -> 2446 bytes ...ExportPanelAccessoryViewController.strings | 1 - ...MPGeneralPreferencesViewController.strings | Bin 1050 -> 2090 bytes .../MPHtmlPreferencesViewController.strings | Bin 1794 -> 3574 bytes ...PMarkdownPreferencesViewController.strings | Bin 1148 -> 2298 bytes ...PTerminalPreferencesViewController.strings | 1 - .../Localization/sv.lproj/MainMenu.strings | Bin 9311 -> 18468 bytes .../Localization/tr.lproj/Localizable.strings | Bin 0 -> 2808 bytes .../Localization/tr.lproj/MPDocument.strings | 0 .../MPEditorPreferencesViewController.strings | Bin 0 -> 3938 bytes ...ExportPanelAccessoryViewController.strings | 0 ...MPGeneralPreferencesViewController.strings | Bin 0 -> 1652 bytes .../MPHtmlPreferencesViewController.strings | Bin 0 -> 3042 bytes ...PMarkdownPreferencesViewController.strings | Bin 0 -> 1602 bytes ...PTerminalPreferencesViewController.strings | Bin 0 -> 890 bytes .../Localization/tr.lproj/MainMenu.strings | Bin 0 -> 16492 bytes .../zh-Hans.lproj/Localizable.strings | Bin 765 -> 6284 bytes .../zh-Hans.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 1604 -> 5174 bytes ...ExportPanelAccessoryViewController.strings | Bin 26 -> 476 bytes ...MPGeneralPreferencesViewController.strings | Bin 531 -> 2228 bytes .../MPHtmlPreferencesViewController.strings | Bin 759 -> 5112 bytes ...PMarkdownPreferencesViewController.strings | Bin 334 -> 3008 bytes ...PTerminalPreferencesViewController.strings | Bin 26 -> 1646 bytes .../zh-Hans.lproj/MainMenu.strings | Bin 7743 -> 24776 bytes .../zh-Hant.lproj/Localizable.strings | Bin 1097 -> 1928 bytes .../zh-Hant.lproj/MPDocument.strings | 1 - .../MPEditorPreferencesViewController.strings | Bin 2534 -> 4634 bytes ...ExportPanelAccessoryViewController.strings | Bin 257 -> 476 bytes ...MPGeneralPreferencesViewController.strings | Bin 1245 -> 2232 bytes .../MPHtmlPreferencesViewController.strings | Bin 1530 -> 2862 bytes ...PMarkdownPreferencesViewController.strings | Bin 333 -> 640 bytes ...PTerminalPreferencesViewController.strings | 1 - .../zh-Hant.lproj/MainMenu.strings | Bin 9339 -> 17608 bytes 173 files changed, 91 insertions(+), 594 deletions(-) create mode 100644 MacDown/Localization/de-DE.lproj/Localizable.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPDocument.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/de-DE.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/de-DE.lproj/MainMenu.strings create mode 100644 MacDown/Localization/et.lproj/Localizable.strings create mode 100644 MacDown/Localization/et.lproj/MPDocument.strings create mode 100644 MacDown/Localization/et.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/et.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/et.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/et.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/et.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/et.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/et.lproj/MainMenu.strings create mode 100644 MacDown/Localization/nb-NO.lproj/Localizable.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPDocument.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/nb-NO.lproj/MainMenu.strings create mode 100644 MacDown/Localization/sk-SK.lproj/Localizable.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPDocument.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/sk-SK.lproj/MainMenu.strings create mode 100644 MacDown/Localization/tr.lproj/Localizable.strings create mode 100644 MacDown/Localization/tr.lproj/MPDocument.strings create mode 100644 MacDown/Localization/tr.lproj/MPEditorPreferencesViewController.strings create mode 100644 MacDown/Localization/tr.lproj/MPExportPanelAccessoryViewController.strings create mode 100644 MacDown/Localization/tr.lproj/MPGeneralPreferencesViewController.strings create mode 100644 MacDown/Localization/tr.lproj/MPHtmlPreferencesViewController.strings create mode 100644 MacDown/Localization/tr.lproj/MPMarkdownPreferencesViewController.strings create mode 100644 MacDown/Localization/tr.lproj/MPTerminalPreferencesViewController.strings create mode 100644 MacDown/Localization/tr.lproj/MainMenu.strings diff --git a/.gitignore b/.gitignore index 7ad2a141..8ec45878 100644 --- a/.gitignore +++ b/.gitignore @@ -172,6 +172,7 @@ xcuserdata !Podfile.lock !Gemfile.lock +*.py[co] Build/ Pods/ Tools/__pycache__/ diff --git a/MacDown.xcodeproj/project.pbxproj b/MacDown.xcodeproj/project.pbxproj index 91d8ec8d..1b144036 100644 --- a/MacDown.xcodeproj/project.pbxproj +++ b/MacDown.xcodeproj/project.pbxproj @@ -219,6 +219,15 @@ 1F0D9DAE194AC905008E1856 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Code/main.m; sourceTree = ""; }; 1F0D9DB5194ACA33008E1856 /* MacDown-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "MacDown-Prefix.pch"; path = "Code/MacDown-Prefix.pch"; sourceTree = ""; }; 1F0F3BFB195F75F200FC0B3B /* MathJax */ = {isa = PBXFileReference; lastKnownFileType = folder; name = MathJax; path = Resources/MathJax; sourceTree = ""; }; + 1F20EA242099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/Localizable.strings"; sourceTree = ""; }; + 1F20EA252099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1F20EA262099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MainMenu.strings"; sourceTree = ""; }; + 1F20EA272099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1F20EA282099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "nb-NO.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F20EA292099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1F20EA2A2099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1F20EA2B2099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1F20EA2C2099A18A00C81510 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "Localization/nb-NO.lproj/MPDocument.strings"; sourceTree = ""; }; 1F23A91F19928E650052DB78 /* MPMathJaxListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPMathJaxListener.h; sourceTree = ""; }; 1F23A92019928E650052DB78 /* MPMathJaxListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPMathJaxListener.m; sourceTree = ""; }; 1F25E1C21A50F4F10029371D /* MPColorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPColorTests.m; sourceTree = ""; }; @@ -261,6 +270,15 @@ 1F41FF7A1C8EEE9200FD9886 /* Templates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Templates; path = Resources/Templates; sourceTree = ""; }; 1F4C8E99194AE0B9004BF82E /* MarkdownDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = MarkdownDocument.icns; path = Resources/MarkdownDocument.icns; sourceTree = ""; }; 1F51C9A1194564670015A96F /* libPods-MacDown-PAPreferences.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-MacDown-PAPreferences.a"; path = "../../../../Library/Developer/Xcode/DerivedData/MacDown-ggdtxvuybojeqbhjydkhilziizrv/Build/Products/Debug/libPods-MacDown-PAPreferences.a"; sourceTree = ""; }; + 1F56013E2099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/Localizable.strings"; sourceTree = ""; }; + 1F56013F2099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1F5601402099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MainMenu.strings"; sourceTree = ""; }; + 1F5601412099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "de-DE.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F5601422099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1F5601432099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1F5601442099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1F5601452099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1F5601462099A1E60035F207 /* de-DE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "de-DE"; path = "Localization/de-DE.lproj/MPDocument.strings"; sourceTree = ""; }; 1F59491A1AB57C78007394CB /* syntax_highlighting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = syntax_highlighting.json; path = Resources/syntax_highlighting.json; sourceTree = ""; }; 1F59491C1AB57D87007394CB /* NSJSONSerialization+File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSJSONSerialization+File.h"; sourceTree = ""; }; 1F59491D1AB57D87007394CB /* NSJSONSerialization+File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSJSONSerialization+File.m"; sourceTree = ""; }; @@ -371,6 +389,15 @@ 1F9A14EB194EEE9900D1C6A9 /* MPMainController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MPMainController.m; path = Code/Application/MPMainController.m; sourceTree = ""; }; 1F9A14EE194EEEDD00D1C6A9 /* Styles */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Styles; path = Resources/Styles; sourceTree = ""; }; 1F9A14F3194EF6A600D1C6A9 /* Themes */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Themes; path = Resources/Themes; sourceTree = ""; }; + 1F9F351C2099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/Localizable.strings"; sourceTree = ""; }; + 1F9F351D2099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MPExportPanelAccessoryViewController.strings"; sourceTree = ""; }; + 1F9F351E2099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MainMenu.strings"; sourceTree = ""; }; + 1F9F351F2099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MPHtmlPreferencesViewController.strings"; sourceTree = ""; }; + 1F9F35202099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "sk-SK.lproj/MPTerminalPreferencesViewController.strings"; sourceTree = ""; }; + 1F9F35212099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MPEditorPreferencesViewController.strings"; sourceTree = ""; }; + 1F9F35222099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MPGeneralPreferencesViewController.strings"; sourceTree = ""; }; + 1F9F35232099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MPMarkdownPreferencesViewController.strings"; sourceTree = ""; }; + 1F9F35242099A1FC00C4B4F1 /* sk-SK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "sk-SK"; path = "Localization/sk-SK.lproj/MPDocument.strings"; sourceTree = ""; }; 1FA6CDB81952D2CD008D5CA0 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = dsa_pub.pem; path = Resources/dsa_pub.pem; sourceTree = ""; }; 1FA6DE211941CC9E000409FB /* MacDown.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MacDown.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1FA6DE241941CC9E000409FB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; @@ -380,8 +407,26 @@ 1FA6DE451941CC9E000409FB /* MacDownTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MacDownTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 1FA9196B1E4723A200850517 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = Localization/en.lproj/Localizable.strings; sourceTree = ""; }; 1FB3C0231E5061A2002AEB6A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Localization/Base.lproj/MPExportPanelAccessoryViewController.xib; sourceTree = ""; }; + 1FB813A32099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/Localizable.strings; sourceTree = ""; }; + 1FB813A42099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1FB813A52099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MainMenu.strings; sourceTree = ""; }; + 1FB813A62099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1FB813A72099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1FB813A82099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1FB813A92099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1FB813AA2099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1FB813AB2099A228004EC5D7 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = Localization/et.lproj/MPDocument.strings; sourceTree = ""; }; 1FBBD4C9194CA35900BB3C88 /* hoedown_html_patch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hoedown_html_patch.h; sourceTree = ""; }; 1FBBD4CA194CA36500BB3C88 /* hoedown_html_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hoedown_html_patch.c; sourceTree = ""; }; + 1FBD430D2099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/Localizable.strings; sourceTree = ""; }; + 1FBD430E2099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MPExportPanelAccessoryViewController.strings; sourceTree = ""; }; + 1FBD430F2099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MainMenu.strings; sourceTree = ""; }; + 1FBD43102099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/MPTerminalPreferencesViewController.strings; sourceTree = ""; }; + 1FBD43112099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MPHtmlPreferencesViewController.strings; sourceTree = ""; }; + 1FBD43122099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MPEditorPreferencesViewController.strings; sourceTree = ""; }; + 1FBD43132099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MPGeneralPreferencesViewController.strings; sourceTree = ""; }; + 1FBD43142099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MPMarkdownPreferencesViewController.strings; sourceTree = ""; }; + 1FBD43152099A1A200B348CD /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localization/tr.lproj/MPDocument.strings; sourceTree = ""; }; 1FBDFE9B196170FE00BEEA70 /* Extensions */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Extensions; path = Resources/Extensions; sourceTree = ""; }; 1FBDFE9E1962A25A00BEEA70 /* MPGeneralPreferencesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGeneralPreferencesViewController.h; sourceTree = ""; }; 1FBDFE9F1962A25A00BEEA70 /* MPGeneralPreferencesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPGeneralPreferencesViewController.m; sourceTree = ""; }; @@ -1283,6 +1328,11 @@ 1F05E8BD1F36E58700E4D06C /* ko-KR */, 1F05E8C61F36E5A900E4D06C /* pt-BR */, 1F6B58F21F5D2EA2006559CB /* nl-NL */, + 1F20EA262099A18A00C81510 /* nb-NO */, + 1FBD430F2099A1A200B348CD /* tr */, + 1F5601402099A1E60035F207 /* de-DE */, + 1F9F351E2099A1FC00C4B4F1 /* sk-SK */, + 1FB813A52099A228004EC5D7 /* et */, ); name = MainMenu.xib; sourceTree = ""; @@ -1305,6 +1355,11 @@ 1F05E8C41F36E58800E4D06C /* ko-KR */, 1F05E8CD1F36E5AA00E4D06C /* pt-BR */, 1F6B58F91F5D2EA3006559CB /* nl-NL */, + 1F20EA2C2099A18A00C81510 /* nb-NO */, + 1FBD43152099A1A200B348CD /* tr */, + 1F5601462099A1E60035F207 /* de-DE */, + 1F9F35242099A1FC00C4B4F1 /* sk-SK */, + 1FB813AB2099A228004EC5D7 /* et */, ); name = MPDocument.xib; path = ../..; @@ -1328,6 +1383,11 @@ 1F05E8C11F36E58800E4D06C /* ko-KR */, 1F05E8CA1F36E5AA00E4D06C /* pt-BR */, 1F6B58F61F5D2EA2006559CB /* nl-NL */, + 1F20EA292099A18A00C81510 /* nb-NO */, + 1FBD43122099A1A200B348CD /* tr */, + 1F5601432099A1E60035F207 /* de-DE */, + 1F9F35212099A1FC00C4B4F1 /* sk-SK */, + 1FB813A82099A228004EC5D7 /* et */, ); name = MPEditorPreferencesViewController.xib; path = ../..; @@ -1351,6 +1411,11 @@ 1F05E8C21F36E58800E4D06C /* ko-KR */, 1F05E8CB1F36E5AA00E4D06C /* pt-BR */, 1F6B58F71F5D2EA2006559CB /* nl-NL */, + 1F20EA272099A18A00C81510 /* nb-NO */, + 1FBD43112099A1A200B348CD /* tr */, + 1F5601422099A1E60035F207 /* de-DE */, + 1F9F351F2099A1FC00C4B4F1 /* sk-SK */, + 1FB813A72099A228004EC5D7 /* et */, ); name = MPHtmlPreferencesViewController.xib; path = ../..; @@ -1374,6 +1439,11 @@ 1F05E8C01F36E58700E4D06C /* ko-KR */, 1F05E8C91F36E5AA00E4D06C /* pt-BR */, 1F6B58F51F5D2EA2006559CB /* nl-NL */, + 1F20EA2B2099A18A00C81510 /* nb-NO */, + 1FBD43142099A1A200B348CD /* tr */, + 1F5601452099A1E60035F207 /* de-DE */, + 1F9F35232099A1FC00C4B4F1 /* sk-SK */, + 1FB813AA2099A228004EC5D7 /* et */, ); name = MPMarkdownPreferencesViewController.xib; path = ../..; @@ -1439,6 +1509,11 @@ 1F2ABD021F381099005FB620 /* ko-KR */, 1F2ABD031F38109A005FB620 /* pt-BR */, 1F6B58FB1F5D2EE5006559CB /* nl-NL */, + 1F20EA242099A18A00C81510 /* nb-NO */, + 1FBD430D2099A1A200B348CD /* tr */, + 1F56013E2099A1E60035F207 /* de-DE */, + 1F9F351C2099A1FC00C4B4F1 /* sk-SK */, + 1FB813A32099A228004EC5D7 /* et */, ); name = Localizable.strings; sourceTree = ""; @@ -1461,6 +1536,11 @@ 1F05E8C31F36E58800E4D06C /* ko-KR */, 1F05E8CC1F36E5AA00E4D06C /* pt-BR */, 1F6B58F81F5D2EA2006559CB /* nl-NL */, + 1F20EA282099A18A00C81510 /* nb-NO */, + 1FBD43102099A1A200B348CD /* tr */, + 1F5601412099A1E60035F207 /* de-DE */, + 1F9F35202099A1FC00C4B4F1 /* sk-SK */, + 1FB813A62099A228004EC5D7 /* et */, ); name = MPTerminalPreferencesViewController.xib; path = ../../Localization; @@ -1484,6 +1564,11 @@ 1F05E8BE1F36E58700E4D06C /* ko-KR */, 1F05E8C71F36E5A900E4D06C /* pt-BR */, 1F6B58F31F5D2EA2006559CB /* nl-NL */, + 1F20EA252099A18A00C81510 /* nb-NO */, + 1FBD430E2099A1A200B348CD /* tr */, + 1F56013F2099A1E60035F207 /* de-DE */, + 1F9F351D2099A1FC00C4B4F1 /* sk-SK */, + 1FB813A42099A228004EC5D7 /* et */, ); name = MPExportPanelAccessoryViewController.xib; sourceTree = ""; @@ -1506,6 +1591,11 @@ 1F05E8BF1F36E58700E4D06C /* ko-KR */, 1F05E8C81F36E5AA00E4D06C /* pt-BR */, 1F6B58F41F5D2EA2006559CB /* nl-NL */, + 1F20EA2A2099A18A00C81510 /* nb-NO */, + 1FBD43132099A1A200B348CD /* tr */, + 1F5601442099A1E60035F207 /* de-DE */, + 1F9F35222099A1FC00C4B4F1 /* sk-SK */, + 1FB813A92099A228004EC5D7 /* et */, ); name = MPGeneralPreferencesViewController.xib; path = ../..; diff --git a/MacDown/Localization/ar.lproj/Localizable.strings b/MacDown/Localization/ar.lproj/Localizable.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/Localizable.strings +++ b/MacDown/Localization/ar.lproj/Localizable.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPDocument.strings b/MacDown/Localization/ar.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPDocument.strings +++ b/MacDown/Localization/ar.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/ar.lproj/MPEditorPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/ar.lproj/MPExportPanelAccessoryViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/ar.lproj/MPGeneralPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/ar.lproj/MPHtmlPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/ar.lproj/MPMarkdownPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/ar.lproj/MPTerminalPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ar.lproj/MainMenu.strings b/MacDown/Localization/ar.lproj/MainMenu.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ar.lproj/MainMenu.strings +++ b/MacDown/Localization/ar.lproj/MainMenu.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de-DE.lproj/Localizable.strings b/MacDown/Localization/de-DE.lproj/Localizable.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPDocument.strings b/MacDown/Localization/de-DE.lproj/MPDocument.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/de-DE.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/de-DE.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/de-DE.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/de-DE.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/de-DE.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/de-DE.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de-DE.lproj/MainMenu.strings b/MacDown/Localization/de-DE.lproj/MainMenu.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/de.lproj/Localizable.strings b/MacDown/Localization/de.lproj/Localizable.strings index 93c677a6b935c8e6311acafca1efb4e348e5429a..2e856aaed31c40c10534fa515c81eaac1912a5b2 100644 GIT binary patch literal 4140 zcmcInTT5F(5T0lMLEn}_L4{WOYA@89cq3|vu|g@7n46*TL{4Hu`@{R#_WNdBcQ@x4 zO;kdXJ$sq?=Jw5=e}6Y*U7XYUdo?WJO-es#NgYla^d# zWg=^sbMgUSuAN|}C7E>ao8yUu;daiJ?CBGo2gSn|{%rF}3Xoyt@=@aZ7 z;yb}kr{^3bkMPW=47;g|yG@Qq_+F0g-1RX+%Y6fBLuXOq05WsTbAOEg3bS4LiE~}x zCZ3i)_3=-a^a>=rB8#9@_a6}e7LqE;)#;kn~ z)-rOmm1i^9=<|Yk5IjXaQ|w`Gn}uceG5?5X1P^*2I$`dNG+TIS_2jK9eI0<-xJg==c_tbmztdF&YG?@G2X|{-6#tf2`68n#q6VI zhpHVRk{M7!cA(c-!}BJYh}F*QBZnAzGDsO~RIsOv4`%Cy5?MK90%{m)l~M~k z3HuBC1$D-iMYibOps`H6zp|E#z%Dc~LOD*E+l z-75SV)^XJ=_Vv4mIeLMN8=tNN2@#d&gYoGY{6Nj-$NAW1`%=ishoLjShQ3zB_eJw} zth`9Je+b5XU=Lk-et$oQ%n3f$LB0P{3BgfqWwIPR?Z-7y2h+NS7c1FW;`FM!v=jb^d;F>CGe}gKn#LQ5pjrBRz+%;);u~7Nh zU|CgVgidF7f}&5$ipT*j@r_6y!si92wMzptmc^K|z5{`q*jy`&WX;`Ya#G?i8Ei{+u{$!CdiZ5zV)o<>o?Y6q-QJGu zmSg^4%t9w2*1&ynHXq;KuA9(A3A}^E-a1mvPw~ERroF4O;2Xi2a^vLomVYLH5OuTF GBmEC-g`?Z~Tr4@JMaGJ3#(7Sqleu(Dl9rTqB$ag{&tc;ozB^lg z^**?LcP683WhmLW_qG4I;Va1tQsPRc!bz=&jnM{96K#s>jd$B=KIkYajR^rs>Q1I!_nmId@>qzj(VfXpnoy! z^e3b7@Z{`M2Wl}A_H*FqC)iHHsC^ORN01q~7r*BPXozzb;mu?#-3Vk7d9 zLMMmc0u@(dJ=ST85IH1S<&GjNNjhBZYyLAzjjF_H0BF{LK(*Rw?xWoB)<6@W{Ej=I z9U5-s?-y-sl!@}O$CIkBH=2H0I)^Ux@zn+)toj+fy^3fTjdO&?@tw054t)92w8ZiG z@N_b~==Z|mpPs9}O*J?bQCBY%MGq@c1O)(rCdfgQ%V>sX&83>rlp|oq)bc_RBn18J z1*4HME3RNG)DlW(n3n9?G{U>!s`cQ6)dg2pPD2L-n1B`JFo77AhT9>lCdipkijv!J z2Ku8s%qcH!|ITs<4fTC!Gp|C5%Qba^3I^3;bwIJe&(g2#t|dBf)nQ6U*{VA2Jcx)v ziG@ka1}gq5L4we{@Qx{e*}xe3p$E1+JYikaBx> z^Cz7IPqYwVyCDRmwZh!+`k?qX3<59i>qkQkA%u#_kJ3TP=H~WW0ysU1D&>@?Xzq%_ zHgy{0=deoR+$aMhvrHjkut=(WXQu!h5pNW4_JhHN3+Tg40Y{-fg6 zc-*dEkDT_!lykyvQtt&|8=O zxLPWMzAAx*QzmG&dhLX0BX#r<5JVghT|Z1NR2ckmaC+`nqcI@PYfN9XgI%5vyIYp7 ROKqIrb}n!KHMkaD{{tbWz1IK$ diff --git a/MacDown/Localization/de.lproj/MPDocument.strings b/MacDown/Localization/de.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/de.lproj/MPDocument.strings +++ b/MacDown/Localization/de.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPEditorPreferencesViewController.strings index 6017a9abfd48614366caf74b97ab1a7b346cd5b0..12bc6711827bf3c5a1ffaaf5da8a8c302c495c46 100644 GIT binary patch literal 5920 zcmc(j-Etd65QY0XPr&68s!}G@CO9M}hT_7CeEK|M~l_-L}XcS=SD2#3!$}=Ud-5ajxU(yBpq?v?%EB0hb-<~ng8baS>N;g4o^Gb+~@AG{e=gSWuED- z_vZ#ro`=3-XUve;fDuKwKl=Ja5^GtYJ zAdScp&vn9_F9Wz@%g4iGYNiPNzsewGR8d5pV%NuuYC8X{ER6AN2@W*ZnTy7V-)*iw zEoAYnZG+{NJ>a-Y*7UBic-Fd{RDAdC3jLKCtokHD;IQ>HgL52$Ld zBVK2vMiHYG^CC@Hr6y0|;{lo)+ZOiEa;$_b!mKFMIkqWk`HM{3{W>zQo2U#gD?raSnNIM1Zf^Yf~KT@CJbY>ne8 z=WIllS0Rg83@YAU`6I`LR@)7J>7KmPbpxA`V{T~gU`8vbB7O*;$E7l{tV(L#Ujmm` zb1D6Z*@_ghfj3gf3b_=+@ndppy3#@xVMe?M`=Hl)*LSFewwyB78MRnxl6Q zn2WlT4eVCH`iNB_rYm~MXBu(HB8+&A_=<1onyOoCs;Xlzy;H6;$#9hK%PKryc%>v# zkfacG%MQ>`;Z^>h5bvLIs6!TE)P8p5m!2n8P_`XA9)@FIiq?+BQU8{DJZn8{ql_2$ z^voTf;MYYCW5^K2-9ILzWizWFpVQCHZP0$0yO|_yumsX5&tK;I;p*2!5Q8(fDA-ZlCDnk`3?b9}?WT|4E z+?>vukVUv^uJ#Se=ZQ9!Q^G~ME-BBDh-?2EImDVR>$K+QKp*|v18vQoaNMF3ILu)V zS%fkF?&?;(h&sB2H9$%br8_0x-pV`qa)xhhyzxG&U-y1WJCwQdTw0=P@>lbCKe0bq z$z)fC^~F`K?w&5Ti~72AvTzl?s_u=+L+bC#9BUzqFl+0~m%U?n|H@T`Ep>0|l_qMf z8M97S%xfjf_KWH;rKa=q<^bj1fdTE5v}wKoOHDnRy LZrX?0Z|43522qev literal 2986 zcmbVO!BXQ!5WVviQ=AB?UKX;DC8-=NgN=>x8tesjQ+pW6ZE3JHa%M)D^=S{OoN~x1 z$stv_r1A+l<>o)(OVT4`G$?Wv$qk-7{oZu<>z>IY(ACB|*w{Pq5apV&>7%rrA8n+Qc}WGZ1E34?mZ17tzO6%Pz5 zCM1i6#EQ(lcN1uh;Oyw6kXZtb%z{eKl#roei;N+0VZ!<(-@w%)AFM7!Y-1v&e`BJo zUg!*E)}iyn`It*!TW3OMnrRWr&#E#%cHw3p20eSkW^?ZmaAdARtW;2xDzlf~xuhOO z{8pr@LU+&|z#xEbYh2KkfJ1kQD&jGftcIqxV$F!l5br7FqC7KPN-R^gHy>gzpb{!;nfWGFQJX+g_;s@)OaWo zHk{@COQP~Z%PjF#7DS9E?3l!|NXSJ-y&cx&XsxU42WnT1Mps>Rj0e!Xf#KCvp{)cQ zZ4F-=PWN173A>;_YAiLxFhOZ>W$E_GHGC1l?n&o`@P`o}r*jj_)eF2u zZr$&?ygXLuDS^5;x#yQZPbRW1A^%0wZlNhox$V*at!ei|uBkCK8IOe)sOprhEmhBU zm7O#+7pk@D$RlV4&>Rhm+?0S*tB1zn4;8B^RQ>F0WF`e61BJGV%r+j{*<`0&s>mid zrfH{*uH@$JAc6KSc)>xTsRSHN{VYi+9IEUgVu%z|B00U7(To#+!i~_>>@)?If6)+s zt|vRx*~;WuLv8!qAkRH%C<_(6*TX&}0z!XU=q&+9Zx2x|icP|8yqL^=OYR;~M214H zvtWI4dm<4uD8|C1ip|B?M6_Ni!u+TQ{RSNN?FT!MOTZE4DWpwAn?SSUJe+1eQqI)! z4>_f5@@(?&tko@tZMM~*dnuu()z#q3E_mmVoLsJyJOYjq3NWPe(r(+DwXn9qJ+6^W zQfaE)jn^$0_8{`UD`-o=p{3(O!;o$)CWb2;rMi*UQZIk0rV;9kWYc0NO~B*$W4;w>cI3-^rf?$e zs5uog5xw*>MYG#5KTZQXE!>r`X!|e?VXxUOl$C&^tYsgeoHl`-ACh@CP_fuyK$f*^ nPZGC&u+(|@bG9{z*Szl**RP=a4(6lLO5h{l2rMEzdEWg4t_z>3 diff --git a/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/de.lproj/MPExportPanelAccessoryViewController.strings index 332fc2b18a5ae83e6240efab2494ed12f9d6ce5a..932789cf3e22ccb2a6f3184b20be94524a6ad3a8 100644 GIT binary patch literal 544 zcmcIh%L>9U5S(+rqV!m(r6&*KMMbO!1*_ie%Lk!Cn~MItI!Pb&(BetLCSfwWJ3INj zUDz-&hrkI1mx(FE!Uh3mC?UD-$jC^@5qz2OUE<0R#2UU&PDG?ctkD85B9c{~sD|XBA z;AA;fCG1~nJtpr;S*Uk4Nv1m*?DjvWB(*6oiywZZ)Em=@C4F&lz@BbZ4mN)DF^2q5 Ke^CA4@XTK!&{eqr literal 271 zcmb7ctF@rs0bL5RECkq6cwQf)QNMp!6t-s( zlQx@$vu9_|{PUfe+5PqN&<-rJca~VwCLEEy<=nS(yR>7=Y|1gT6pI*}ggbAzKeZlb z!raRK(&kvTxgOb=`CBYvn{hp1cFY=jx`mf9b2IC5H)RytwXZew`E}b#?&||jeaEhi z$1|()%u?ZVyJEhA&O3fj8Q1eC4(!nO7>6vLt!dx?vsN8_V^`WmVaEKxRYjX@+97o&ybxg%dac)>YBY-trl5XUc^@Ocstf0-Xj=gg?K|2;dqa% zkH-wZ36V@V6=}x$H;f*C-;Y>Z^)~QGd(f2UgxZR{isGC=1os~Eu~%%zvo~^$DTi48k9Z@^22(}YU>^1$eLRaha+ptgewLmar z5hi$yiXPrC&^d&}7!?DKNxrAjmtvD~idq$`{)T#Sl=ZS-@1CXGs!yua8P(O*DYx@D z_xx4IslnqLPkkxy2w8-A)bTua--*Zc_%*lQSsuQK3YMbrto! M)H7b4_;0QK2GFdY;Q#;t literal 1301 zcmb7@!H(K66h-&*6;CWja*XZg1ju&%3_v-@?7-&cP?>%@)Jpy*2l!b?*+m@*0o&;$Q?6gr&kAI6+qHgcIx} z8o*R}OSS6asV~U}g?|_w558S)*kaEno5%R!wtv$S-u#{3JO1@($qC5=Vp z*!sY=atbM!_4T_Cg10&MN^q?YAP6G>WJ;rhEVe)^vjxv-jlNq2Sxi_pXYa)4nyV4o zT=o3e2N=cKDu$6g{UMmf$qtYz4F7>UHZBl?E#jEeijbr65HC&hV1(=>r$5fvZp&8R ze%6GI&>|e7f;rhW@jQ2NRSyP3Tz_P@r}0S6$M7skqdD$|NzZ^m>2?BXmgdm>46}$Q^duRwfn8O7>xR4yO@X6fqp0l<~rp MHL)Qk`07OQ4E`XU>Hq)$ diff --git a/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPHtmlPreferencesViewController.strings index 5f4db14052c783d08462c1a46e16657c903ede4c..1b889cdac09a6f7f2a11c73722445cf0b4b32ce2 100644 GIT binary patch literal 5222 zcmc(jPjA~s5XI-5PeBAdv;pWO4VpGBdhnk*mYq0ht;U6m9u!HI6-ks#QT~$;+G{WQ z3^^5Te{WY5EqWzNMcjfAB~r7yZ{EC_S@Q3{9@+zoY}@+QurWtu-}AX|hjzr#wvG)r zCzf$;Vb{j8&;Q?H^~h4&v)F3(jPs6NalK((d&|f(=4;u|F5S2nT)lN;$M!4Zew(fH z6L&B8G-k8D!txz=nygu4)*Ml2HIL(gJ+ymZ3R$d*=l*P+-|dtm0YT#YyvN-C2TPAj zEcIbioO+-CdzOT!VCfKkCU7R*v{vS-j^!0`-9;r*Qdv;+429NIBBln>%dS&-OAXWemrlu;`iQtZ0ewHT9-gNk{T4!5w)IOOqsp5A6v zarg!A`mEC9cSM#KJYO?I#`RSNQ%}j<4zoNVUt&A3W9FLA$dE;tsT|PKxL^$kl-h)@svrlxgZ{ z>ROS@iOBs{eNhF8(5x~=RYLgQ^Y8M?+Cblz@Nvw{F{^E{?!4MV7GYL|`wSFaP-JkE zQW5?DK?GW5e`L2SM+3Bx{eVT`gYJ!-pYn9IezhLIMV3V%Rvgb1GC%$b6)4I*Db74JVCv)fa&v5VkG zht|iwN}21|5UKx^_)OqMN>i-V&8jl6ZI8*jnA$hsJjS2%5mJK3JO_-8QQslH?|Y-bX|Tbqi&+^JKXBmLMq&`)j=w|#8r@DoX}V4X`M`zl9X@S z$3(WzuO1yxEKAub9wht|PkW>+s~GIE1L!j1HR{s1UFMpvXCaF)gY$THXL$1N?eVAr zr{MN{ty-^MI{OJR)+~c5#@lTNBieiT$|2RLHr{2P9D+)6<5u7y;IP$(S+{~D@0s1$m}Z5&Z%@Qd}_jUY_EvJNy)R2McA_= zx@pR){#iv`pg>UN=Q?`VTM~6}=|X;Lhnx2xUk7}Jm9F~Kg5|M2!slyzKX*^K`|S41 zu?<;-8Svdwxt9=$0eP6R&&r?O^t7w@LG795SFQSW#;o_IV3SpwjM7^y?f$MScUhOb z$*gnaeIR79hzE5a?e5;+!OlwW)ATOQ$6E213OwJ^#JD2j$M_~6-wR7I~_e`iOfB$~oy$`RHqz^09at`3DF{EH?lE literal 2619 zcmbuB%W~T`6o&VH3XG?VHZ#YUX6iP{bYV%gCEwD7N|aG23y?e{5rKdNfRyD2>9(6b zgIC$<#d;voCQH#Bw_SMi(>UkDe=gAB3)Yw1TJ|&BzX<|Nb5suFK1#X&h8>w9j9$Uu z)*Og1$at)m7+>)arTy*bvp@45OXU7v--cf>a-)G4>tpoc#o=B<=!&!N&#Zq>5`}92 z&EDSOe`Y$an55?M|6w}*ykWY*f=M2CQH}A|oe7i=PC4Nu`g>e+moZz+=h`@Ca8U?@ zmW{|%qtLNPD@8sDtqxj%KlC$*&*4jPRhd=`2b<^{q>tLzDB}eSQLXQtNZn)X5=|&n zT&Q%{#9rZ?R#jCWS;zPZq?jSgH_$8P_-%{oq)g#u0+*9nMO6z8Dj#V5XQrfxGGyKY zq>y3;K^3!I)F6KN*tkNTbJ5+e(x zj{H5Fz1%C_!O{1i-}S2Owb01EjR-?Dr8XIcR0Ni+zZ%x3xX_d9`)G#GEz1XsEY?zT z!>mXZ`}Ujf7`IH2y^6k|6uF>wYJr}g(V*rq(hs1u&;T85;=&YtrK-@<_ot5yV}nZF zZNKf(UZW~T4s%NU*h2lnI_;IFXBYVbmJ1jZzMK5~*FpoON8#KZnivzI1RA%SvAcZl zQN?JO!sW&g>CNC$u38j12hidtw;kQ0(X^3bfm`sNK$gqU&Zx~9IHC&=`Y zZBTq1G`0mYnR57e0%e(0AhoaqLJ@Mh8~0U6yAYn7oH5NDwr7W*Xjly3bTqG0*Fq!p z0DYg)*=LSV#A(;f4VD6zEaaBvM=OT0aN4j$D@T2MNA3Q%rr?t$OhTCV{A=Nxq81t` zL6jMhxYVrg*MInCH|%lcam9Yw=HO~hZ`QxEXMhPWq+@ehPHmU)_!O>lu;rpctA!?- z<0|GRo+mthwpRmmwC>pj&Q?;g#E>~at8sUH#U}y3mXM!4*i#D)hAPgPkK^|&#bIb> zG__r3bhqo6+Zna1r7Cr8{8=vnF@d2RR%X;f1LU+wQu-Z0Ys1o{Jh|t)2`W<@52=rI z;vYo{;w*ETuF~ooRR$1G0f*y?rxqGKV}EkHa!1OKucha3v&odO|6ozqPP@^n-MsV3 z1j=jp>EdCR)ItN|5^0I*Lx@mReT4*E-=7#$nz75cx n+$Yz>X%wNg+N|0`u)JBpjKgT^x4ECsT4-dQ7M8oaP5b`^c4sct diff --git a/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPMarkdownPreferencesViewController.strings index 8523d97fcf0ea28f11872d7fbede11866d8d4de0..f62a28b40aad6388660f6b51c16334956368b8c7 100644 GIT binary patch literal 3380 zcmcJS-BQy~6ovOSPm$qDnTaqUh~s!sCP7=HDbni>R>%myUenx(xpF7$XZ|GdgnW9%EHCDU!_=JAc8) zDE;*o0-3~WReHoNi z=&Je^u@X33%m_5AY!3zDc%vwv%#aLw1RBh>n+B z I6SngN|Tb~kEHDiV_Rj)L6)t6`NdF$nKo~);ShIE_=ebi6ipNi}i`*@&gB-qdh zP3wT~KqshB#k)|Bc;jG93kzXup|*X@2TqTttCAX7*mo=k=$OE?kHv?h-eX?HaQwuS z40&sZDVDDa3t=%0B^OcdV7k@X6xk1Ugvyr1=BXCvXBY*QVz%X zS_qr(ttX-AIWY6&-zWV;e9MmQ2$p`TK8E$BEXfLdm#N^86X*ifp3i0rVY60$dgNH< z&)pal%Y2)7WCgPn$v4RIbkB cB~EdA7H_~iA72Y$GxauoKh})XeY9f#0Mrfyz5oCK literal 1693 zcmb7^&2ri>6ovOZg@#p|nOhiA5;~bK0EfaPq?DiLXJ-px2^)#ZG67zuZ;@4ZyjW%9 zM#6!qvtV=Zz2CW4N2;8mcIZYC`ijbTqgJex;B69y+ z61lpWz-kPawd9YpO34yFrM2a>INtr<7ne$v0AOg9#_(ZXCbGEESA)bSd=3>mm%;0 z462)qYy^wkC2}PsC7xy@#yOGH4L!6H9Nq6;q#}|RwbUUTlPSVtN{|-{9OMjL-}(@( zVbz;uhKyhtYI;6Vl5nmF`Y=mdenf5E6I$W!1qV7D#ZF|xr$mN~=VSJ5Dq$$#iQi{7 zj9}TAXugb;WSEk|8yM;D1EQ!Du}^c;59b5eUIV`HGOQ6StP@L2eezy#Ggd;6n&0?P z5ReoavoHUcuY$!)iWjb8kscM@>MlA-Z&obUy2a}aZY9TyWgns<6ftdrN z&yN|`2o^VO0-dzU$?zX?dptSN)8I#pVX%g|7iVB2Sm1q^|B;VAU8997)n@5(mA`K8 z=mz)@)_s|wjc|Zg`Y~iaN#fn)v)vz>-1=xs-WRlZsndxiTjt-JpvK|n9pIaBX2S@U zjjq_IOnW)@!W}N%5jb9G!>8B2KEHr^4JOrP1~q~ObwrT%*~jMOi67nj*!9BvMcy`i UIPU}Xa7HzPMb(vh%KaVw3uiL~%>V!Z diff --git a/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/de.lproj/MPTerminalPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/de.lproj/MainMenu.strings b/MacDown/Localization/de.lproj/MainMenu.strings index 965d9e705cf94d1e34694eb1213d835381d9dbb3..8a1f9c138e96fa056e4964d4843755ed738a947e 100644 GIT binary patch literal 26568 zcmchf$#NXY4TkGHPth?4hdmMPkwj4%+2I2z?&98DB;B}^;wm=x=kqi8gFUT7~&?dGXDe;_yJ_r|Ni@P_EXl%K4vG`R@T)=EBl-N{g^Fgoopf7 z%g(avY&N^ncc=R8U-f@i*^&O8=r>VzM&EB`yZU^o-@SR1TgtYxZ~EPiq-V2D5LEn24f9@Ig$ERogQ)4h{SEC&2>ru8Zxj2U(^t3_n z)!~}b^Uj3J{=W{-Yt7-kkeq1VZOPy1qlm|o@bPrC+8|-wdB&g!nlv=2=b=ONGo>+3 z^wE-rcl4XRr_owjJ;sCVLFm3@gQd}shbq> zf-G`JGd<64AJ?)Uy3bmjb~Yn?ZOvp{e^b_ARl-MC9XFK@*QBd0Vd=`o&-MMOeqt}4 zhu`(L(KnKs6}DB$wxzu}?f4=>Pr^soZyu@bc1HLPv>#3$zg|7gy3S7D$b!2w6iwe%FgpU(VUS`L77W>9V9#ogMwpCBr(R}uT_2XF%8qkbLXN$to&DQmKM0Oef zB6>S0x%?RJI7))C} z_CT5}qpV8!C_ibPVI@b|O;Sr7(|Voj*~4mZRH!zB?$9Hgt5d?}N%+_z=kjbQ)sCCg z3@?N<`rUf1jVcaa2-BWcx}Ck&*OLmes)UcMcU1HG>1}d1>_4-sx+pd(4NVEnl5Dpv zbg#sfiBz#1h!oiqC z#%9u50D0K9^lS_ce>)h@{vf%X zfD`SX>lx)-(39}dP6}%`toB2XmRap|Iwgm|$5H_}m;KyJC(HUB$c;nQd)^O{CTn^d za>6t1?1hqzdlEj@Sy=@ml9$5xv0&S2t?W~nS?-U27SDn`@5|OrGUb}E4ww3{x&=9M zk+HK6v4``g{A(xd$df0wQ0LX(XTOB}@-XnjcVZdF4f37fN%-qkX7kK9=kqPis5nRC z{4MQXL&qBDE1Gis)}Ute3&7Tjc4 zsM@OFZL6kG)R!mWW10$B%-39orwr=ZY{Y7QO?CkixGC!tGqAcnIi?+nZo0wxzDqyv zN@zR@AI(hIbr-UW(=hh0Lm_I)L5nrkw~w=|!!@3Lkhf_|JAAeXS=5pz;p2*Yzg%Or zIs8_Qkz2#y`db~fLNb^2P}jK;kBpj)Uc!^`@sLAN?Iw0G>YxakG_iBuDprzkfAB1>&_~?I9+IB~y--NXp(_EUeAL{3HM5Yw~*bO6M zJZ0@yC4BT9{k{3G%i!0^e&|vSr+FK_8ZY|QvYU4Bj(jWm`MqKWRk0Pt#3D*h!bjO} z9_+f5x-3SL81L#L$%Od*N8wu*>uzV?W!2@{pC{p?tcxTzhg2R54ggDPDFcVk;JL_e z$ZDG6%&y`l9_ynzM{WJZLPe*Zgpc-9@FBzk_Bu9<53}lYYK^XGrt^*aayOfnZ=j0@ zD`j7PEm^E5;iH?;-e$~UcVbf%9gGj`YHVuJJE5y}Dn77MK~k0Qk-QWiuuQ0_GPW!J zOr&@#J3%uKVh}|y;z{^OVDXlFkt@&9*5Ht=L2|`2}KDoZ)v@#>mKQA8F^L0 zM^5kF`l5T;zvS1_dK9W4XCdNSb!bgL_t)y4q9GOD8&x{teJk>MMQomgkL~Y4Yxr$4 zIXoy&8dO_0YBknx=t+Bx`R$};{#6LRN@Q;0H99LpA&5>Z^xZH9L{Cs_&?l$2_1;X9r>+oI;rnI1l8#Vud~G%#-jDF3SG!5-lOM z&OF`!*5kgme4af)?l9aQYl`A@h|eCqY<&fJTG5+)c{6y$W$Cos74jr}ti2-+>M5E~ z3|a|4kR5WCVO>$2TGFm~QE{Jn53ov4@s{NcuKBEkec($V)h~D0v^jXC1 zN%***AIV#?USrwT2~2;IU`-?3Y3H`Y)%N6dsUA@Wu{vMVj%E#3v_1!+#<-}T%Gt0d z;jdDh39+%*8ydzdH`)EXu$k9-o&7~j4BUfxuS3;+=y-k!h^f<+&ro<0KGwLS@mTph zazB<5ap#e_qGQg;oJ-r(xy+jDeD$GZsY=qxASb2?JuY>9)?N9?4%2EmuNSby0ikQ^f|W5 znU8n+cf$(5jVJA!^m!M$9TxS@#DvQyEWgR~&=2XA@bUGI`ZA|9$OK|$8rfcdd~=Gq zR9vsLKilfU9#?W4Pr}ES=cVQyj`if67F(g&bbo zRxBBafEH^NLg=SM9L?WD?U^E_}Y@Xh|3|0J&l zpR-f67h-i~%l0IE7{eFVwY>AA?h3p(~>Z*gv#u$bh}lGI-Z1&v98Nyb4aDb zaoG%6?}66RR+XE1SoDycK0`d7Jg(cj`v6_x4fz7Zp%Gc#AI(|Z#B%GA|0+L{&F zoZp>@nT_Rp!>pGftL8SnF{M9xIM;}9kLshXD&(@XXMYiyi6`NsFOQna`ir~!b;Isn zRIH-!d8ruImet=Y4wn&CC45A6yW8fF3g2*QWqef$AK!%b40|+v zCK`E0OV%}9RcTS(7`jT6q0Z9PzK*^vx5%o5kFU3?l+WXNRV7>F>RyYPoYf1dC7eCY zxQ<_(%WuN3mO=);FD;aN^PYr{kvkupeT;0vDmlG%l(ZQEy&*Cn??zC4^?ym+<2Kmq zvOaGs_AZvJ)|2oNFNCN=wTRokcK(?=Yj7%jET7RHlJ|d{o z@{;C9|LRmx3AVAIYH4w&dJ;b7O^r)@vs!R|U$B+^QFAhOd7J%P-_!N^Q&Rj38u?8B zPW7+(X5Er16`Tj#6gQ#oeeR&HO8BUIM+SLn&33d}+=PgnfwM%$vrJF*n!OLvWjFLf zCd3%Zy{sku5Amm0!pB&DtF;yUGV`-qQA(Sh&{|p!(p00l&~Aevtc24y*WyWbo+9tU zdJ;a?`RqT!^qfkz>7(j>z0$!Vx@aYU*yR~4@3N%&a2kyCk`n5Q;X2QO4* zxD%4mP@Cr7S=qyQ5`ylXs3|{coIIc ze!kQ4mY4FJ^pvU9;a|x2c|$>yPQQn068@7KHd-myL_G-~IpcHk2;aFcPZz6Osn79! z)wAKF{dKykTm$BM7BbOEoiBY`iie(rk1US(5)r{N>Vrl!+rdH?LKR_FRkHG}&sA{} zY`9m#N5eUmtH(W&YRC2F%H@ohY?+!M5ul|Vb|0*y`5hJ9Eat52YG5?CveYt*^CW!C zn_??;IgPWm0&k--wx-|UAFO5+-|+DK{$EqyqPH8&8LqBo)!Yxf)V_w>?aPKa6~6Px zIrFIKN%$*4=K{RdZt!?uBQRPrG-^N=J5w?NJQH@n{fAgxYTC!wfy=+sjwhDBdD{8W zH?PXm!S;J4eC)B7L`|4`jNE;|E{w~k#5t#@Q`L->vtHbJ)wP~GbQF=O5S^>052v4( z#o9VW)Sg5g>f$XA&f{2@pJ*{$_F{9WGNa!28}!#_M>Q{O8SaBE-)fhakyRypWWA%l zOgAIXKl5yilb&Q}tYhQ}b=-YT*$I30M)uCxmG#OA9Z$kX%lTc-=CCWV-e|+m&qeFB zIryE;HQ6Qk*H-YcG>2u^LYE(%-MdIr9s)#0YtH|;=r2-}rvmnY$)W^eS4 zY_}%j%+hLjRuLe713^E0$DupFrAR?dZ%o|O>>$RA4XxFx{;yZU$4BPK`&Lu#KGw|c z+VXxZYSM$>wY||Aa8{f*f3?M2z9}*mv3U|cwiq2=`lc;6{p@{egT7(pMl1%eW4-5Z z$}`?nP*x>;l=Ss1^3i*-D&j)eJ!#)HGOuUm=l@6K0|q_+zo9A;9CSl*tF21cz1FL! zQ%}N2+uNz-{J+g3ZKrlpwg;oJIo9Qeo6;JU*LPYK&Vx);P_B~%3~zBc)CB7V( zKJO{E8+JtAO>zBl4(dtxxPJR>{3g#3JK9bCT(UDP>nv2Am!zxeZmLT7sPeZ!y~GWk zh=?qZOsISVwh8GMStT`uxxfe4#GlG16FrGRkjAsKld_1eI0$>aY_P?PRs_kh}{@AJAr)noH*Q1fKi8h6izG&U{VD z!inkhw2EHVlknG|SJPIHH+@@I_~m$+F>2$V!$g<|**rdZPMYV&NaV?RKiHG-u^Y>_ J?AnVq{|BzQTtff= literal 13358 zcmbVS$#Ub!5xvh>Am(IGM7kx4lBjX`z*XEgh@_|+Ko&`eAOK)S6%+0;Bw`J3`{SM4w>X!vaN^IsL;@J+_i zI@9LNRdR^+^mjJ%8x;=UO#1M04}*OlfB5CwPXzc&xb|oMSD*jVnd{9~uCeg>7C-&; z?T3UNZC0^&R)X*L)ra~Ng3>PHlK|n1*QOES!dR-BVa<~a`XiV(VD0yUAqEJ88q8J< zKQ4_Rd306F$CIlCrm3him+@t1XL!3j!n6dHx2j-_0m3-8O;b0_`Np0HUN+*ov0Rz> z&rcBMdL9_>Pz;=iPy&Roqq%E?xwtrskT0%gc?;X!Xue@v_BJt_!LdAXKX3YO|FVcuP%Z=}bwjNm0#wwF`$LI5$DWB>~EHjcRV3mF5{o{HC+} z%8%->&cR}N5KJ*Zm|B7B8QW~)3N2-D`1_)#5BjpLDDdUB7 zd&lPXd3Kuj8wc1HZkZ|AVt}w!!=-56Sp^)jxt(Bon6Kcd!dT;hf?Jsc2-C!17&un8 znU$%$Vzae^u0$C*bIoVo|Nj1;1ao2EhFd(;{%gc60m57i7D{pL2byVkC@I=FvlPeu z{C$D{hnr?OWYu?#HS<@l9W0Z^|5Wb6z<`>`T{=Gj36Sro1nz9LWFBsmJ!q(b?xC9t z(!A-DF@stgY+ZyX2@u+<>oNZrN}bI_)s5!*O4)V}-};*8Cw;=x!H0YaEVUzqjRC^i zz+i_i8IKxoPHEXrsAJ!%hPC+o9nox`Qnp zc8^ed0pqSHSYv>&s@$AiOVLa(yE}=FmtPsx;Yz*?{VIGkMGTYxVLUrt+#<{ImQCAB zs%d3xgZ2!L@f^t~0m7!vFneU5zhyPr*jP1dt~|Ti2K`A=%Qw#rFb0jdh?>fXSGjFONGCAVgOOfVN@b@t%qF+*rcIhJHcB zcnJ`u)50`~k}1mz+xyCpIi@ya=#-MlOT9LLWed7BVR#ZCbbJ$Zpr`1Tev(OEb!G2l zH2GRV>opr@2RQB<(aB1He86`VRAGjtW47~Ul1gv6Y+GBbv6Po&a@D|~#tQIS5iwo@ zCH!2^+{7#ZVg&tcYOI@KuJpiW^ie~N^b0Ok7UVqu*!Cnf8l^LoF{7RhUF9zF1f z@V;(Ggc2ZxT`ZXt46g%5>$QM5^b@V^C^ zD`F~o3|z%TWy4}X8RLgweVbK&RJx+c6LIP$TJs!WPVS6EJs<(Xj_cSDRVk_FB^Qff zPN|^eHP^l{uy!>E+7NDDMS>!MB)7$ne`~uIQ*^%VS4U6PxfV7667qKQcW{3XoxUF3 zwgd>LSenI)L_zd6Nz~qedxYxYMG(aRAvz19xJ4F1mAP936O<%j#|C=?*7_(2V}KA= z493%wY)sr*l)GPVm0?Qbru+5^)h&1vZcyCsOMvikZ|t4+2s<3vh&zU5Y%V(iz3C%N zYT(%8h*AQC^0YX6HCZ?2OxC(**3mO}VD&*CbOm7yP{LDp5VLsiyS_GQAiS%hV8*#M zY~DpXXWn&Svw}e<7BvP4^MrQ=TrX_0D1Qn)#P0LouJ8Rh+c~Sg?eIvXtuOmly~7da z2dF%YXe$Bo1!v79#l!v3tEZErgmFUAH-jZ$qMVSr@0d_hq2-HQPy&QgF3w^uZ??@P zpiXa?x53Im^&^izaMhInq2UX^k|lYSSeV-voxh>}1f6GSyo=6&1PD!y`Dj5|BvF~k z>(EOlJ`8s7uz^xeT$Ka}5qIJqS5j1wRpt&zGuSxXfuG33aC3H+>Wu?-88&Sm*Z5gV zfN~?NwlWpXIx=35rwfcb#2RvH3MDR1ZFZpVz+or6w*&~;)%~Q<1B8aic1mBnsH9&W z^RV?{IueE)>|}-TGJgcE0{13Q#Q2#?fbi8qPmWo47Tqap zj^ShT>7u(js=h(V1M@?eoCFBhvul6;hSKqd#aFkNw23f!-2Qr(8a>97M;O=P=^#3T z5+Jmv=n?L5Mf3=-v*%+yob)f_xeE&iUXQ)#U?o6Ui#(5IKfK1IyhEO5yBJB_HC`#I z_?exISGVxK1YH*nT>^w!ELN}w!ISB1m)qEA%Vb$SUJpUr!F_QgM2!K$SHdAqItQ+j zws_gOp5zPguz-9;+@A#K_E&bUyBEdsMDw6o1phhai2=gXW!R6(Vg~(6?Xu)}t#zT( zgrO_?IualpxHNlbg@^VOqT@YSdFb85L@_{!PUAezm9ex5^9Wu>Mz!oE@w9q?W*uG@ zA~%%4B{A=CRKtq)y4Eyr*nW{qOszF6uwmDJiq;Q=PUps=@pg?)9PIiUGoPmD84q&Y3IGI{}QkFkOgpTmpni zE>1HHYTh-&OnML9&|&lr+oPE7Nq|rkbu)B4X#`2{IP#dxA;O7D%1}`cnt+L+(-Jj> z1SoBkOkfk=RYGe~K7YrdzQtBwCTvvR^U-cHM$8Ht93Egi5DAS0$TyttkyTAQ+L|eC zdxv47tX*_M=T99dS3v6sW(g4HmdSfMnDV26WRAu4mrncAJm$|En3~vH7G@~{Lde%% zY2NW*)_~1Xv?3)yXs%KwOq%dUX-+>MHX(1p^oYarFlUkgA(>#U=ehw7-Ll1t zFI!@)u!8L?bO$06l>ni;wk4*nc#|rv+Fm|Q;kg6LIUoD+lu!bMFYHp`unM0NT;HZj zo3ky)MHuD5o3{mR3=rBY2WnAbnBG=c^~NwApyv_OehCmpkr?70S0sj~q2eI0aU7UX zpVdHz+!hwoZ6v4!2rV5bDn&j;T=7w^heb{HX=*u~DOc=Sz?;rW_agmY9dl3~L3#Kn zz9k08w^Z!)X@hs(4ivNGbhXBP;$-fN_R;G21f@K@9`0jO0Z`Iw+DB!3lhRf<3Nu(P zV3!jOUI`GQ)@dyt+GL3?4GVj-4Clr3WF#|&0~kC&H{Xink^rGQt%uY4EQBM=c6pUB zSK5ZhqZRc<@74{pbU4%>B2Ebq&JngTaTAOA7!z=lj7_;-240~!G4CVcef}e?q9b}P z=l+E&s?`wb)q4yOzSGhx2HH_a^)7L$YqbZ1XPDQu=u{;@*v>ktxJ8!BJXvHkB~&Jc zzlz5*iEr4n9w6sHzA36@36O7~BN~J)aXO!ck<@uL^dVF5X)>+8qoU5ajqwj)xx!5X$!Ff3Zi9HMa6$$YoCA z?Dug01pQZ0Crf}ZiE($hKFbw{HBuL6b%_i8xOsxb3#bR~H@ILDAav(_R-8jz)n)Bt zl8m{pA2^rdel%2=6hJkEdy)X*?_>9dxr=b1kv$bVsdYRFpR6#?S6&XzWv|!OD==Ka zuF;K7K?39}CfGOReF=rPIl{Ro?u0q$_hV185I6nz#BO%a8#1 zjI$tI!a`fTW=glIB!5NoHKl?oKJ&3*mrw_P=z=qc+rIE<5+GlITQG~cSTkB*nsSo% zYjgHrF*kN$x8onfrIrBU{G;Z~pHL}0g-=TAJ;L@L>b~e1`!PUR!`y!zJ)FvRz9rM1 ztv`515eXzfNQ!}n9?@c0c4VwL#M9E0Cmq3Z5BTbK-x5W+1PEoc0et6a zM^ZP-CidylUUhA|Q$ECe&*vi5lmKBYVIG77J9KiL>`%MGQh0>ZqSR7&yBWj793J1r z(+3F<;;<`ybt%lpef%vhKI%;A_3!FyC=S5riDFd(ggIJ&?Zhw2Yx(pH^WY=g9dYFVj`@1bXKZ7wDMS3Fv!XX}H zW)r2ax!TgzoaDRLefJ)oM^IF2f-43HS5fygAG@Df4lU)))?UT(Z~>EB;Zh_(NPhTc zD`|Kbo3VUN9-do;&KtbH-UxwWfN-4+UbD${dUy1lx4g%P8q_9mXW>DGkw^lB`P3W6 pz=!$ikDeDL1;z$H8eRHD9_v+TwxPg#`6u=mAne%cN0%Y5^Z(^Zkk0@B diff --git a/MacDown/Localization/es.lproj/Localizable.strings b/MacDown/Localization/es.lproj/Localizable.strings index adbfe552b75e8ebd5f8a735e39a2f45687a7ec07..4f0ed6698ea64e8c34f2e88125427109720ca6ee 100644 GIT binary patch literal 5664 zcmcIo%Wl&^6uoQyfSrYe1YLlD9WPOuK#JN@H7RV6kej+8B6UKXg5YoY02YWnaL&E8 z?u_jwZVHN=I5YSCp850pu53sm`!biY6mp99g?x|Gnu*Wi0$VZ@Y4V1{WqdaGzlFC=bO5}@j&#_zR z+XTA_I4uA>!LtBlqIe1DPVt}razHOYh0x@lfWArlSoSW2dKyS>a4{{DnoyzCGu7}j zxMq-+Ql!FvBm7dzDOM8IeUA6}xqK)3ej34)GH%u|rZU9m4A^E(vkNUiuMBn7xaHtm z`YeH04CbM{1I?TAEYPqA-U*~A>5kPWv~5*h+R?dCgG^Ua@EyV{W9U1Thw!6u2(9xR zkmT`EK7lg*V{tUa`$Uc)1L+;9M;BNl@6rxUxE@SrCjgo+P>__p+fHH-T?30fP5Lm4*g7>=)Ldw zwcJjS?}hSbgcOi7#U3-DK(0U1=qRzcV_1Y-jv0ISf7@hz{g-JN>#$YvC?kJ$KEzmI zCNMteedYrz_q37~#GGl2^x*wnc$hV!EzcM;<~sv7%i)r8tf|%i6OBhoIK&$xn7PF_ zR!Hk8VYGG;)m&%2bbj$_SY^7zp0k7ZkMn87uA{< z;9#{phtAA#_6JsCW;ZLl*^Irosg`fTPF{(v6EX*BZ`RZW_N{x_Y65Po{&TIn=>@fW zJ>R`lzN|m&8*a_&dg#9%a3~*Z7yH*eJniDMj_Dk`s(*^=n5q9bbC7oI#VUpSYxBMz zXxq%25XCkG0%?}~ZWwKTC%&SK`=`4cJRfw~T48SCe-&hCU)or#Pd~+vN$Zz7y7nCT^V8 zzNm&qjaoMK@Mc`+T;Jy;QT!8qnLX^C>_XO4obMZ~6!1TD%lbNJ)L&|qQ1`3XN6TU6 zCr@pwtK=I%PEcbgHM@R-Ea&WO-P=zN|F>>dr8Yk;tDdXnzDzx3wy|UL%xM*b@#W`Q zn}(L%2G|_PQxVTWJW&$gs}b$zU969qO>WKi3ROIhqeG2*#?Ub&CPnLocB(1wIY>3+ zPRMEp`F9$Z)8o}OFDZqx+g-{!79h3NcIa!Qk5M^!Tl4{0z&g#I+P0EjOu?ld!2X<- zZ61!RtKoBEwp)}oCx{Tox$HrQkyfAj9YwwJwK)?FK+*5d!pXY66V|aqXk(R-v09$G z+GtkCbp879%n{^aH*K;capTxoXNss(aS1xGhut<5h!$4!`aD6s{btf{Zg@w>*^x1M zf^UmY?_+jL!OFo*vdj+iI<6p;(s7T2?%G!yFnWLB;RIZr74|eUcuKqK4bNMhf;yMH S!{IDV%b73B8;p3>d-7j?VT>pM literal 2823 zcmbVO%T8lQ5Z(JLN=PFC3sAP1WHgpxfDsSNhRG6@`?l>C*WFG(Ogt-oW29s;AHXV~ z;6LF@a{6(NZ3diVcOTW&Rdr6Cs>6NiTID9>$8sXcD_=|6KWy#n9?2nx+VAbque7t< zwX%|4+KJL!nZ2F&t=8c_9Vs`hc`hruA4^ScEbE$rSGDqUQjWCoq_p!~*RY9hf4N-! z^dULNw_*j?AByX#l`|#pN%KsN*ejz+T5BvUhsI9wm*}zG{4hcUi!c$3LK4DC80k^W zjE4B~bL-v5bl)kHiKePD6q?gqrxTWBO>D(j%}hFw6Geo=OeRu$np!hc6|Nb~N$Qc( zQrd%*Tj#XhYj>`Xd;QzXtJ{9J-8t^xcF%8m?ep9Ib?@x*BwhdRBMG*P?*iqdU8fL% zo3c>G?Y+8ZR{M!`jz^gw9oA0|-+Zp~MuichlQa$B%v)6j zsfI{Y3)r$Q?8~)0u9P=6)vG*aAYP@#YG|J#{*ik_6Lduk(AbZc__s5>umFIlz$o6D#8aVu;0}?detF>!NzD{m5X6NA7q4fzD>qtp5WGjD#kML2DYX2|ww&Ds zyd88yY=^yM{P}ak^G{d3i`(AK`Efe<(>6kFHuD9GBXh6OAZz5})WCq#rfwFs5_jmp zTIo9)NWlSYYsEfK3Vrj>f>8-)ml5@%tU4@9|^$&c=2Nh z*$`S1tUO3rH9>+uW0ciYQAncP*eEAOJb=69C?--1AP`K|8=mMK(yA=!=LToO_Xzi zAu(^%Bq57#7)kG*9{!@Uo=38JHWr2$%=*I6;2A$AGM<-20HodrFqD`_z< z)7dY|fs*PgrVZC>?;p$EIS&9c z8l-Fl7zyjk%9tIL1T$cLUFolHG|eiLigXkA9CRueL}fFomwQa3v;XSiII6Z@zP3xf z9soosr@&Pc!;%Rv$Lw|9=<*a>zU1b=(WMp}rCJ#hOOq7Ok;F0+m%ZhrsPYb(g%ICpMz`dcNBeJn?Q@#sTs3JEcKwl8A8UG@Yq$3I&gv|<1N diff --git a/MacDown/Localization/es.lproj/MPDocument.strings b/MacDown/Localization/es.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/es.lproj/MPDocument.strings +++ b/MacDown/Localization/es.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPEditorPreferencesViewController.strings index b5acc26ec21d689ee19fee24ac4a19ff5f12fb01..bddff8c84cd6a1ee4117747a2f8d448ff2ee9cb8 100644 GIT binary patch literal 5978 zcmc(j%~Bgz5QTf~C&+T*RHcYhV;kZSlT;Q6Y%DB@Z4sL!m4*HS0{vh~7|c`T?XvbV z3$Lx%;(>w0iJ-fwu$l~sm`EOr7t8VX^yJ( zSL~FhPk6$h5c6kW{P}qVu2becNf^|9k^RA(qm+$7@}$_#Kqk&QjGw?zEAg(ysMylA z{u^<3mzg6l=(khA--`XhY%%M!$8iT1pUm(VvIz6%XvX-`!wz^}Yk z{zsf;o=7dO>h1dklk`IF}Su{sGIo>q;+NTt~&a&29 z-V4zg=WVVIInUxcvU%Cn#I6RfySC18jbG1%h+Wlpu8>8T-P|YV*4c5LJiO#qjCJrZ z_qb6iHp^@H}3fJ%=?OeQO z$?otyR}nq|b5YIm2)k9VZm?&>)Jm`TOd}3igc0wsla3OllMbi`%W^|&pbBhQvTn(+ zl&{z-E3+LgXFWM_+|mk$=dVzn(!JvIryJBfh*|$m%q)FLjB~bob0x;^x== zuhi>#xqX0Uo`LXra(oKXvl*Nri!e@~s|Z7#bvPhy#I^L@4P*1BKM~ahIUe~Yt0OflD z;+j3>xW(@8J8{1Ehb+Q~H^C^r)fZjxRV5-t)Yz&0&2PRZ#Tb>`Auqe|K< zebt*<3Ge48jH`cDJVeR4Jk7h-aY3dG?Lop-7q((BZBb`9$62)$vIsMl^&;+}GuBA` z@3Wt(J5;vhYATPX{q?<8ScR#@QJj11IhLaQ`Z#udHdX$acj^H2{y>_on#&p1ud07l z!5Wvc`#S+eX%X8$)A#k0$Xw>AH!Q0&Y=$pxy;Y za!FMVd&(#HPxzAb2!VurT7oQ1%|G_=Z{{uLlAp#+DYhOZR1rXu%6#v@xK}`zNCScnnlPY zCF7Ll)vJvs=+kF$OJ|lj&8ET-7o`=<6XDR#c!(@axZ$Bg!-S&z z3Tq^{K1`uIfzjT6L9z@~NET3*OUD_PY-U7CDMM}+w|R0R@5D?KI^@8D{wfG0SD}9X zJtI_E-(gCSk3s@l9SN0LW<{*NsA;3$MaH!8r&Kn1L$)0sAorvjC0_{Qd%brP;(y!+*^8s@v;2Eq{H zVYk360~O4Xj>J@u>g((44PV#jlK0AH2ARUSuRi0Bp^BKEl3mEbS~1J7>ZaH|o5A)e z^zgV~QwAz*S{CEXaKkd6M3Mu&g%@8Ga>8IJ2||%sqWr%wL8HBQ;*6V!lj!y8EbTFW zK=!rhY`w?c;|_E#V0?B~Ff9WWrlZBJiBX}=xj0Iv8@gf9s*>D^hEos4XdP>lusG+I$2@DUQw@XFJt6K&tXnSNh$!~I>*;%&u z`+n}`+u)@<@}3T9$C6G+4=fiZzM~(XGxe6xZw^58!1h`NvocU&=9e}lBxcV#nTB2d zPNL=uH4PIH`CZV^8%t|5NofAmO>x!Qh5iKI{q(lrRR$`&CYZkb-RGqtL1+d^`8nT< zG&l0)J~KEK*JMt^TtaWZ%oslq1F1tlDXJUcrWe3v3|pN+!K(~Zc-;@BCb?+m=V%wz ztv@3TeNPkMr;Oejq09VwtUIr%oxf(QM{>#Q@8F;ZH@!qJN&NwR;Wcp?+7zC2pj$W1HHC-wAr2R}TFXCya& FegM*tQ>p*} diff --git a/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPGeneralPreferencesViewController.strings index 86720351776c4bd4733dc27fc771a02618ec8e02..f87779f0dc8d85b2fae5f17dee27cb91b32cd097 100644 GIT binary patch literal 2810 zcmb`J%WfJ$5JhY4uNZl0iC9V$DN&RKeo2;W#|d&svKzw?6Av?phhKl2Z^%B$xz&up z<2JBB2>62-iv;|sFXWv2;y2Ah}km)VKO-Lp1vH{ohpi#ui!kGtvWp1LL~^=&%mP0x90 z1COqcM=3C;ZWC92Hj6s39+_8ds~hxCg|d({SJ*WpX?aAn8KYG-dIg(Du=9XA8ukW1 zr!|gZ7IBXDJr)u21STv03ubOw3~xk=w&Ts^r^#YX2@FErQ|ux4Ig6+&)P?o z-Ej^!orgnqAA>=vRm}|@w>m+I$0_*mMb#1_w?-s-SwK^wtcbhHMV0G zakiUa%v{szds2WfJV&X1m(n5C?MJX0p4Gpk7iFgJ>(^s(S!M3wK{c+EMVegB#hL3| zUFifaez59Wjf|H(s_qV} z)vJO6R(JdLxo@Gb((f#{p6f0=cAQW3i{(s~VA45o>HY4W|8`ApF^f2pr})&Jp{l%a z9|))16hA^Uzh?}cPt~C8Lr2~uE64Z~=TpD+RGMtyO}LZ^b&6Fd!43GNv>uh%uy@=o k>q?7R#QB*c>VraeEcKqT_l3f-R4Ao0RcqmTsZffY{~?sd8UO$Q literal 1407 zcma)6+iu!G5Pi>AjChQ+MQT;4Rn!L{L5h@6T1094HeL^S$+Bzh#a#ZT-_TFUk7W!7 z8;1uZKdjE$bIzPOp6)FSGYJ2ceqkyf-MogEtC&<5QBjF^pXS8m6*=m%}w{bExT#<)29pzWnD|{XoX_@B>on^ zE44MyP&=@z+`3Syy1;eO!f^~otE_>L5jeHTLQ6q1HDdfje16zf3TmLC;J)&u(K2A^ zO-hbrh8HxQ_dm^34AkPLCnM%F(Obldy9OHEJsBeEa#R;sE_U9F!LBeUiCS+#I$~;= zD@`8e92~983j}lv3hne{`B3b};*)%?6xBdO(SR#Dz>?+lUrDp#v~X0c2Xr!1MR~}h z37GPUN4LKsqfrtwzKhDmCLWBBj=<)e_|(c+asUrfV>B{rIjO&n#QH_de*UR+*FZye z&(k70mLBVp7BErdIP9EkWt3Fc`+OMc={MaQaBG<>z*FaP3 zY3yar_N%}jav;^~fAijc)*nb}9?i8DPcplPwRI^-%hPIkYH22tq1Yy~%F`NX$b7aw zl$P=;;6EWA*G7&S6Ngt%`_V`pdEIcI!Vx#&%cPubwj$Yyc_F^^kG9o7L(jgDa!`=- R${LP5m(*&d47x-3-T)yj#ijrN diff --git a/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPHtmlPreferencesViewController.strings index 5eee0e160bcbb6bcd5c01cf41a2faf19739c2d6e..9fec0acbd09facbce4f9fe88c535a75e3e9b25d2 100644 GIT binary patch literal 5438 zcmc(j&2QUA5XI-5zk&#QXamSe8Z>QM^bp(mkYhWkrN)Je9`t32u`J1wEZO;=b0~7_ zq3!SOdPRv@ixiNw5JZuy;qJUQZ)TSK=kNP=&l20QzBO#ZC$XRT-nB!k@#$FC&N&Wj z%CU`I2g^SH|Af^88{12(Sk<0z+_fvNw=A_LclMaCZ9|*8`}VnNx_c+~JNNyuSm%h* z8Q;cY*4J3RW2D8JRb~wy#a8ov+_U?32cKdVW&OFkSmyw*C#*fjr?EqNhuQxRo*w3S z>f@PM^{D@Qp5#x)lOor09Cb@GRp*{7xP6XFq@=u}ri@P+?<_^5!AOtmiCx-=&yc80 zxgKM6!C30fq}=L_PRIOqoJ|YsfxD8LQg^jgz~6VMyoa9K_JZR(R@lF}Bj_wjhunHap}s&(UA$7NuKtmCjH*bJ~ruoE6}nA%6q5;vO1?GYBK zcAHtJd^F=~UVj<|#qBrP=(Fw_=LuCIi_0}LOu4=)VD>SY-es0YcFOUU9W&Qz2FEPo z%+~NEteQI3+Rm>yqe3L*B<7K5)gpd2*XoX|nLie=@C2Pc0)N%M=lBwJUFKMbS;Sdb zUh(tesgnmCSO1GJHS96$R>;R)j!(fh%3+FG#4(9?smrffglZEN*Id2w)n()|Ylbd5 z^r(cMqyDEJm$-~jZnpVX`7vhf)Qzg{Oc;I7zw4`T19i{g;+UB$u(3_EvP1Lean@czKQ@DQ&zsj zV<}aAM!mBrdpq`!oUPaadZ^&t4796SjakImI%0L9*XllV#Mmicb>QI_$m(D5*hgjv z?vNv5yzBJ;wS8sZ;E(bKE)>{9ac~Rl$?jRm>vJl>GMj z?DKJAAMm5eoYGtHO}`%(r~(!#?tIBAAn>YFjqthOXHFq)lv3O#nJcY{F-0}8JR;xb{Hvlyg`4u?>V!rsxW2|=XTjU&#~&KoHNq|8;{ z%hb06?i!%-szY^t4V_9>)yQ*7BVMCCHy}L3&nIZj28`@0|3iL4`BWkeJwiAvWn5yTvidn?D zTK3XsM&`vbOY%MA&38EOdx{@=LN3E!*<3kfM%AhHni-)Lsbxl|s@M-yomV*?Vis{8 z4pH8K4xznKx!fp=Wgp)B%njyO{FRC4h3GD*cx`aC;I?9~QO8LRUCiP(bgDW{r*$7y z?c}7!;F;dAl!@Rb72(LuuS`=1QatCZ8G5bGd>>F<>QgD!N4tjgHB4N%=kPtAF!Irk zS;YBx%i62EWZxtG)4BXn76kogUDMaL%xgt);82v|u8#F)Z#$k6eRU|kiPP@sx^V9{ z=S`hhIzwaHk(?~LO{k+Wi#SW!>RMZGOTNT2SdV%2#FZ&S-BfCoZhT!y(0}|b;4uh= p^euW&C74lLy^aFjm_;1#>YF}!q`D^M{^jyjyO?aBkf|cX{$CoOP|*MY literal 2729 zcmbuB&2HN`5XbL%3L@xXx4`6Mi%qv%>>;+B#A%YYky{s8^gu~tn=wV&BxT2arydr$ z_39Vfp`=8FECa^w!GJLmXMXda59;tG>q>4d`-|=0L=lcNR1VWFO1b}*9hnR0zk%L^ zIS_F);i+C?dc|Xu_V1%_{>&{dko#9Z#P^uEe$N~0WAxzV;a*^9^Rw^ITx;tLH~Vk* z_749u({aTlHBbK!)A6^0=@t`i#%)jod~jz1<&#iOIEh6X+)bFxXESXaGdRzMLCgB2 zsZr=yqLm_QvEdLlC_q^*l$PezJZ{#aR2oP^B!Fj)uuUu$4xeVzd|M zvn798N^a=rSg~JT{K~jxLP?=~Bq=gM&DOv@Kcgwmps$~BYeRth*^*bJ7F++wVl6$N zWa;|R2lH_fofS48g7E2G#pL>jLcU3VjVkXu%n0PUvAVf++FL>;FS9u;=g`Z2kNIU$ z8v?YCXslLTitiM7Gg`Y=x2RGyOyRN+M|xqnl&c0o5V1~^p<0l&CJvi;pDu&t+Fbpu`baKZrOE~SynZbp?C5ySGIisn-R5)s> zkyeg6`#Uzo;KL;hW0-aPW#ikVHUuE=EIFrcmAnj4l`JV%A$990SLJ`-*^Xy?{ZCm% zq|2vh_Yz|>m#wn(aKv-zXdk;tQ$0LBh3gFLVqQVlh5-6DcZ5s1r#Pa^LGP?&4;{VF zE^)e&l8p>W2eh*{$6tIE@Nogz*^_v+A>b(8k$MT;@Cl7d(MP5CO+ng6Zouu7dfHMA z+wP5NX9Qvh7xJPKq&5T~;l1H~`N~kW400Ng-I}bD#_^bXO^^KEb@XLpnbT8Ljowm= z2+}*ii$O(I8v?3lc?uULQcR8Jw|n7Tq`HN#Z4utk_1s{X4TrF}hCeQ!mQZa77;c0b z=c;7^wne$(^fDjQdf{0!-25zs#KH%6SEXDV!f-l^>5IY-i$w42p8PZmuyry{lLW2R eX4M>v<;@DF9Qt?uF7UHl8-n1)acx975B~xzL{xPE diff --git a/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPMarkdownPreferencesViewController.strings index 539fef7b3acb2c35c4059acd0aa700298c1c75d4..7e943bcdf51e2049cba7ea0c51978539cde663af 100644 GIT binary patch literal 3248 zcmcJROH&#_5Pw*g^_z&}Aa>_l)*E1~P zF+9qwMKR2>J=6X5Yv#}IP1z7n4kVU9x_mr&%XeK)r78uvlOCV8BuGTa#JqXK`<}G; z#{8GbA0gG|zr>8uQ0|k|5RFtCWPSvDhq!7bx0X^D zsk_)vml?~Z;wGc&l5kW1z@FwvuZMQ^yR}cFpxvczo>fDho;ZR!A(tZKfe>Fbn0si8 znTKSqWtx}UhjKz*`*^F*cu$@;r*hjR;r2qo=)9##9!w$ZkYkIZ zd(Fv`!1jgn%xBdx=Z#&FRkllFKB3kB)A+e%qM3ILtEO&Rs!L*ZX1xV! z=8oIBYPVe!>5|DC+gYE&eU3#T#AS2VTv4HSQ`|0z)wnep9$BruDI)(?i}dREd+iB& frY<{E9;s11Pj|RQ=`FYp@nmdW5^ly!=RcaiI>hL~ literal 1627 zcmb7^PjcEY6o>bmLc=mMuP~$}bUIxW99kxSO0j8^?qpfm0wFoFoI-BU!*tanaIwlB zHBwwM<1D=S?59spKRx$O(1hcnKp#-|CLEVqOEICGci$t;G^Z7xN~wj^)UYq{ni4$= zD%{^M;UR+aLG|LK*YUucy0%*{Dm6x!qnw$~I-On%-`Dbg*?^BByN4mYwK4}h*@S7_ z*7BL988?q^v^CnyAl<_7N?MZxo++S(#ssUjwwcfh!%wLaM7Mc{3sy9|!8r#phk1W* zy$*QZ!!NO_iV>?9%rVEYYTfgc3PKY^WI|EQCD}CgaB-DFv4e-%%I?7dZx3TG?@Nlz z8szXNVW~ufDuNSpVC@24ii9f8MDs>{N)#+4{1D%*-T_Y^mZszVD|De&Y(sUXWSM4- zju-1WJYE1fi>=ZDPZ?p7y+Zi0)Y7!qJl%z)pfVV(-u-hu0nb$xQ^7GgHZO8#N}mSP z1VJ`vCDj&d%|zPhExO&qDuD3qo%K23`KEQbtl~6R!UTIH#pl|YsIq(6dq)V&cd(92 z>viCWmkPuWzXff5iNh^cdY@yVn!dMEdK%)t?1AI diff --git a/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/es.lproj/MPTerminalPreferencesViewController.strings index dc62739dd4df52fa1239199e0da473b851021e87..98966942ab2edcba7ea4d94725d98ad5e8efbef7 100644 GIT binary patch literal 1874 zcmcJQUr*Ff5XH|kpQ0i0g`{AN#`p&kL5Ua_xJ^*z50NS!37La`1ML^V20cztS6+h{>$v|3nXUImkJL2a_X{NBY$2Ai`Ti+$DZ1su1CG>h7k38BdARONMs5W^SwexgL{ujMggtOMPG; zZ_!mggb1@R!nTXZv^jAK&GmzrG9v0$QgD~N7a)u`AARH$+{K=_Z~uqK@AvNJ#b$y<=PQK8Ww$}@t!{+P`oy=jp0b|pl;NF0?TGh@b za&<`^_g~xZHbZi*+Ig(8kGM*#%>IylQYOh%9`CDam9`1gu%F>-SLKgr%qkyY(~oj< ziAKkI#2zs-(Pq?~9IprU2qD7tc+q3b>n|e0+{N>+>MhCBIxTZq8lyIcZ39!ejLL7TkZl6;n=5!l#%G~Uy5F%W^zF%Xxn-G5h8Fwo# literal 26 hcmdPbQt-=H@X1e3%*m`uO;HFgDay=CFILdf2LNt`2yp-a diff --git a/MacDown/Localization/es.lproj/MainMenu.strings b/MacDown/Localization/es.lproj/MainMenu.strings index 6294f0887814e9e6425e28b2f5c935a73b301c3d..6a9d00433b7dad01e6c1b3f616105b2dacdc0d68 100644 GIT binary patch literal 26502 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 literal 13296 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 IeYwB>1Q+y`WB>pF literal 2885 zcmbVOOKuxS5Z&_>1p@{oEhJ5684t(iDr3L3B zsxW(G$MI>6wgKaUvvECUuPJ*&?j)_~oB{~3Zi9WXwAKWiAbQ2zb ziC|eLgT!L9Jp@IFTu>^fq*KX~S8>5pA*C zCT!{j7?p7dIA;yk*6cS>e23iU%H8D1eiLM~c%xSL3syiQn{jp{8BUc)c0xKivOAr(%h2lZv-&0azXB1*zx_ z|EYaQvb}y)xC0kz1b^qK(Xj3amGAT1A>3D`xI?Yx7q;Rb(Q_b1uvKNpbvP1us%TR>5F4jfnRY4pe zu@*_**2J{0P;UQI6mU@#a624a(>azID{j1U+}fcX^pcDed! z?l~v~g8Jl14o{{a$y!>DmAOePH)2vw3UUuC;k(_7m^Bwr*RtZ4JA$ zjxE|D-}sr{rakq*EhBTqp$2ct{b)rcF+2llQVYHBF(FNu{FTRF*zZh+U9-~;jLnSITmFV zHk3u@-1CH3xS!*yZ5CV`0h4NOh0LjsAWK=Kk z_PPHT+3olqp)yw>+v8PX#wrMhBbTyB<68q+9adG(%6nh?eIk1jvY?w+km~)SSNR#3 zRV&K%I-e)_;o9OgDTT_&Aw|AOC+6%WajKBbFSssY|9pg%ltr4A#Sm}lmz1DsU*@^2 z->O0PtIoKpTgod9>;^BjduU`(AB4|w>C<&vj7uA%-n?;GL>q2|M_d350_^z?rbFqfqDtxcoW3F?2#u-sXQWj~}`#we9U1!CC>Owgb z*=wS-*ZArCjsNpD_*%qLS!Gq%Fa;{9x%|<-f0V0PX5+M{Mx>>xRkE)F!%xY^;o3}D zr1=>1;5zp}J58gcrfy?7S$7j>_zvA>eh1V=-OUs1W$FGdiiEYb*lt)fcYA_Dup9koF<&ok2RzL%(;9X$FLUn(}u zuVuRrZ#ANz-Lejk7tE*=lU+tNw{5@EOaDP+z02QZRC~uR|J|-+snv$FIAu}RpML+o zY1epkjXzQqt?;pUnjYb)37=y1WAP+^`aC_RK02tKA}8%F%hu#-pnb=8@px|0@BKne zSjI}{xy8_j&2v84%DIbsU&TQB|)t+%(Vz=KN!JD#3<6WQv)B&jqVo$AZu*;p*A2m(=P(0zP50G^$tXEVolkoAF z71iaaoAyp$9w`!j!tXGy9!>e6GvVl2ww*IDPE}9rVPNYJzA9w#5*@{`s-!H^oW-+9 z6Ye}$oH6;YrxEH*y+7zPDm20y~=#;gmvztOmtiyhH0^>EF6ryPOry7 z!_{dy+xpa*z&l{s>x|%P5Ir2-;nH^z1WszonIrsRwm#f~PDqoA( z*V#bW)WPY=i8CzrV{9TKkCfw8ELzObSeZRya@E@=mpuYS{oOe^I|ql$;R(zm`^~-| zVKQZrW>TxZ3oMrH?k1^b#mRRHXWB&4Bx;Z15bC#winWd2&62^MW9?23zzR%mjOxKoBF%86x2_ms_Z^Cq4s}VTg%jQ*;DG* wtTTnuDOZ#=WuN|C(OEx)$rYZi>dEakui=bNS)}=NAGXkk*tdA@4nF()ACje`(EtDd literal 3048 zcmbVOO;h7W5WVv&rnoF2)yqN_c1bD+f2@s-O$>H`O==G#X|M)HGiGLFvz+#{ryO!i za@$jCea}D8KjD|8M;4ZlB@xv(On;B@pS)}4+fLIxdR6yo80LWj!whOl$&_hB@Z1y4B92-8G=1__FHS%aV=NiDjX9AIpZ;RV zXhIE%C0P(!JzSs3xMNv__{)+4+3Ir{8)7iqH)YBnyKub^gPwcE6?JbJC{V@}!<0&- zxHOn!rKswz2w7(#opPm1UW3J#uj2KeIQ=AqjZKnz*5euI&{NsmCKFJp% zC<5cp##9FgUp~v)v2zbl)P`A89=mt!02an##K zm+)N(yGNau+#7~8P%{?vsK=$bDXW@qV~X}vMQd$?dQN4|g}5A-JJgX)X!+0>4YShZfkKBm z*aN+g&a+*y7Fz{e`sh#CLL%eHV;UJa|5Ke80CQ{jC`HU zQ*mfQ5h|jV-^L3p)H%W>bFD}~rL#%=I8QeYSxK498N!zPTJ7$gbd=Ki;rpm_%V;{S zmU?CGm%|f?IE=lUjC&q zcgiE8ULON*gK5_?Zh4@<&FyiK%-wZqb+}F8vV-51);L5;;;7q-Sy|hpQHW;Mq%;V7eBIy|gotg(ix oov)hfZ^_m`thpH8U%rO!dzg(zk4%?=0#nQ|?4%?xPdeBC0v?&UzW@LL diff --git a/MacDown/Localization/fr.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/fr.lproj/MPExportPanelAccessoryViewController.strings index a299abc7dc8e931393dcfeccfe2f81cad523199e..fe952d36a9367bd1f4e9fa4378fda9f8aff718f0 100644 GIT binary patch literal 556 zcmcJLOAEp<5QOL4UlDpN)Y6j&@uDKsgMzQS_Mw%~Vw-~gd3DmKLP0MQk~W*!-P!N? za9}}T3W)=9E`c$(i6u6epn&2^kx&s*Bl$AoyF$z@8Ef<&H9jK+f-;)p&WK{w8#QO@ zPdsJ))%gh{Rkan4xG>A7-ovb|=_0}qHWqYZV~;i5I>Ukkga3Vs!J9j?t=0L`x@-|KVFJmHPQSFm543_@|cs3jUBdRR&i{o^eKL& MqWfzCpKkQzFK*UY3jhEB literal 277 zcmb7;KMTSz5J&fXiX&qomQD`Er4=C#3jW(;du>yW1e+_^Z*MC_MO++idH3V-;s|mw zA;1dc?wIw=-sMOnQ(()46W6YwzC;LvV{?bb)(wrv*45)|e{Hc~y`GjywN%?oT@K0k zh+^>p7Ehgg`8otLPW7u`)t-V*|dHJQddSy(*Va>y967ePY!a zdN~&N>?3P}hp+4yc>_Oh`Q7FD>*I<|+p;yDQyMR)eBXH5tM-22o|bqt#-cn8G4|}i z`bhP5!CkUThUbc3$c3mMJnAv1b&zV0j$0Fcnf-Ek$ttaR!HyyF0=XKC}8aoFOQYnozQZ1}LU{&69qF7W%(^aUN4BiJGsqc(jqWaXA9Nu)jcJ)?Qt@O&3 zBfrC*>Hs0f6_|uR*8|%e`E&OO)u--p#Tr#WVCyU<4(%OXxk2wd=l8_E*!KwEltvog zUC(sxNU0mGXX4?tzfYdL?;)3O!YuYa^!LDxkfYGS#JCYx$62!+ujf_jHa-p5P4>jj z`4}BKXGiLvEC2L}5)UcYUOW+(=j5Ju zq#?FKw+v^x29=;wpr(h;M~f!HHCTvied@4bZ#hrKTuW)Bk$Ltgbk@4-hn^)?sGq7H Lx_G9!RdeJY$2i4J literal 1411 zcma)6OK#gR6x`<&58f0Az#3>#pheJy?Z!ZW#C2=9Zo8wXXNwL+D*VWwRj-j z-CQb6QG19H6esTeE|)HFB^~$DXm|=-$DrQqcf^muo(^?xuCBW0Bbjx5mOdstm&P`f zj#AFX_w0B6vs79EHKhZSX2$x1v=*jT^TxrSOd{PrL9lX>_y&J8)olEYeYoA0{1s5+ z@6G2@B!x@={ye{ozW)ocHDp7Jr1RmYSDG?GG8JZOVE~))Ss8&we4-2N{yinc3e7n@eq^5tYBqq48jE6+!cc}77f`Z znw3shKuv44D@eDb+3}S?NKMhT%j$clg$h&}di$6~h1_AYr+Ktx^PGL`pNy-3nwY~y Tlyp%-O5M>D<{(1P3nl*n_k+&5 diff --git a/MacDown/Localization/fr.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPHtmlPreferencesViewController.strings index c76607c3925ab71873a506b6cf37fa7703ace2cf..4df256f8adc56ed8bb36e5a47b95f6cecb2541ff 100644 GIT binary patch literal 5910 zcmc(jTT>fH5QY2MzhcXkswA!ww&RKuCzS^-1r`Pe8#$z$%7Z`x7K8-4aPiO0llc=# zzBA3RXfh_A`id}NPV7cuw@{svj*0YN+ZiBPkFm_(5voab*vmb!LqbrM!6@Pwc5ZBBqqZtnoa)_4D4YiRhYm+TRJEyI4Pb2r^T>Bqp)&0%$XIf29}qs?J7(Wo64*ja(x)kk1M~4k0Ff8@G`Pf zK0Q`u$a$X`&bXF`e`0U_hO2#k+refJ>uxv`qw;XJP=VpMF#Qltw``5$5gs;fMntZq zEEdB29(#e)260SA9&@^;zLZ@a@{nbblMq#wqY!-t-Z7KQn>;dpy*6XMo>>)RmzZ^d$OPuU|o-gRkR|i%0D1aTWYGS<(Ah`I4GCV3rrQ&+(1zFxPnXrYzEkZd>71 zh{bp&u`I_vOEu5W&*h+%KU5&_3U0n2_qu(@@imMZl@Lf-q!DnBnYquZ)t*122JCMK z<*&-BX)j?>4fd{ZTqL{GQdTL8bXM~EIe48lvw3*DP5o$>5o1n6m7T-rHak?tj-%aA zJ6slOA`AbeLsFUy&Z<&Wivz}d;_m%yZ^G{j@YrGI8s3)hJI?l$MH-dGpg#k=OAj(; zYI0Nt+NY$vg$BElC{|^lqeosSUq+5Xz-JjUSI&P&#qY?E^jTKX_Dg)Vu+-HNo@c3} zdDdo=dHbP`bNt+o?JgEgP+cXO8sqlBcpTf5MH<^lzg4v~PgZwzDudfO3U~tYgyvw~F=TRA_?eL1>9l1ZVZ#ee&zf?jXWsyce%#_c#)d1?1q(V{SbX|D3DnDcei+RFM`kC1}|Bhk3Rzk|!2O~vU3(BQ_sv6~-UMgqA7HrhG zRpuJ!WXd9q@(S#W(Z#(%SWSy8*7)5#W~o@IWS4cQ2X7}g@lJM%%h+h2>XDb{G_5k% zu{b0Di*Q_FTOqp%fFAB45&!W(DZb%@|0xzGqzb_~Am!MlM%1MkoHm}*kz zo6{4h`|I!>U-y(nI^(jO~AIBSAjRc2>sdW)R)K)Ob6GGw*KD?MeA z&P-UI;JHN<-m@zrk4JM>nrj< z3vW=?c}gs=Z^|N#!d76ZViQ~AuCK221O-x5-d~8>1JKdC4gFUxu8ZCs=!(`<_d51Z zo@pA)IA8Cow`6;a(z{i4&{vgR>jm##h1@Z*st@}}mgD?MS)`F0_wH}W{*69W?|b#G z*U@&ysAD)mJH;p8f2Q}IJ7lSBe}N~`gmaX3Jm-|fw4C=DorAh|K7V3%)$@q1xz-CD JDDxv$)ZZV2A(LE%#+xEeD48M4BdQ=JQ%X1tO73;iM3(&`J zkB(0NGu3%XB@|2l57qhCK-EaBV}hG~SOa*lmmI`aEX%C`f0Y|%r^LAVTxm-*EF9Nh zNEdb05-drSlqeNf@}x%isx_tQ6}@-8Qnwg53E2Zv4<3{IO2s;3mM?fyzTJy#OMK!pGg5y*IdI$|qBSe`o_#F$FRbD)INM zj(F33q-VcS^|4u&kAX`0CY~giA*5kBB=|`vjs3#DY=rflI~4G<0g@^qm?nl#B>Cxw zp9wSAV8OBDDF~i%9I_hf)g?MOqg}N{je!d4XUoH!6P#h6{IQZR0+LuJE%8&9qDw;^ zr+plil6x+21JZRZWXSS3S1o6(@{y{L*V%$D7qspCi1}R+0~NXtpbgr_Td`OlD%U5F zDQF^L8T1ie8z#i6M$oq_y11g(7w<}f7^o6x%%;I#IZ@f%0t#h_Va^)g;UEJ^nKVTF zSgcd5<@T(y{f6sL)e z1$$|6v4;=;)X8VnYr~j1VaXhqXI(@%Z_t~JntV}$$3O+Vh5B=e3A8sGX0wM2+6Ien z3%Q2bN(eI6s365PzPlCp7fwIqG`rkt7y}iQcCq&P!caZQ=5^W>*&VF?Lq1?;hC^3mCX?jPYGbpKIphERTrI03Yg$gN}(Ld0|cl;5s%eZe(-YUOQpG^FGIHdUveSN*% zQ87^AXt>1T4eC1VtI=a};@AW?4$JDr7MCea41I6!%1g&UrP!^?Nb1mCa)Nnwt3GRx jMv{OrO0VkfSl+JajM46$e*^&BkBX diff --git a/MacDown/Localization/fr.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPMarkdownPreferencesViewController.strings index b95045ccc4157ab445031d48da4433830f01bf7c..4fdeea12e7f0c5ec7d01bbc88118965bb68acf77 100644 GIT binary patch literal 3280 zcmb`J-BQ|65P26$luDMc=qD(e~SO5-H(? zl$v1-F>KE6xBtI?ZOfLFD4_wlh4k7)O_co2`LA!&q~Gm%_s78d&Lb zZbbHtxeK_P&Lu^-xy0Mw+lE@;=(qCi@tA;Ct&yyd-BQ&+pfqhJ5 zwaTw^sVmgvz);t?)=V`n#?>X^rmo^;-^BHn2y4gi`7U8Y2TKA|r_XqzcSBQAMQ8O1 zngV)|?Fwyl*iO;Hsu9ooIXQ4FXJojC#WSvVWPCT37C=(Iw$#Y;eZZM7+m2Kg~HsX1I2Wv0I5kGD>lJob&Gj$IO2d|CR7rHl+)AJT}*4UJc|JFh0KGjX+QALQ7O9x#I! zNnH|d(lWIg@+m%sZ;7F97CLEy+zQmJ>_8Jj@5v$c_iBl0S;Eb9hDPlNwhyTd+Ld*q zvHeMXl^@3uy}){Pc^67*ypN79=ZCQdl?>=4tK-*XKe&go%f93>eO}0Aiq$3IX4S21 zuHEiIrIPxg;SM!z{gl+FOJW^r+w-qdwmzL+ z=dI0Roo(yK`x4)^VXm3!aznLFQ{*m*b;xbD+np|%1o;{M@4J7K`q6C4n=ubmuFlat XwkX|)TW~MN*d^g6o$J(XB8lQ3r&8@` literal 1641 zcma)+(Qeu>6o&743X7XbmCitPv`o`329zx-?HHk3yE`W_i6OC5$8Mo-wCC81?Ig=; zHw7&hQKUcl{rQ~V$GsCWNoi4#kEDC;kB!z+Ojw$BKM>7z%1V7Er4~{%)V>BA7HV%= z%KiNfJgne+P<}Y+bsXVso@<6<5|v4aP1 zU2nq*&NjyAEVC__X-mEl5yP&D=BfG|DOgJQDSp&MD>y`7nzG}+f3?N=TJbH@iIOHx z8bvNQ3wXMK@GPj2R&bDGs#JU4C!-}+*X-v~GEfPO*6;tJo&^Ur=S*OvT4s2NG2R13 z${jB7JfUR(Te6l44VsI%QQ+!!59=xT@9t`<6&&j9uN~);Aig{e|K)n3Oz=4PE(~F@ zgH2#+uoaGit4TUQK6o|x8C80pQ=yv!MEy$;OW0lEP*%5-6&&;nf4h&}UMlqaTK@#90soHA=hg&%*hTrM@0k)a!aR2}S diff --git a/MacDown/Localization/fr.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/fr.lproj/MPTerminalPreferencesViewController.strings index ea198c5fe29d6b1f98a0a35b62225a758d768d4e..1b82ec7cf7f13b0e6c17f85f38f383f9f7871cea 100644 GIT binary patch literal 1900 zcmb`I+iuf96h-%QzhYDgAysmV5D0O7XxfS*N|6Fe#aoC?2}&F{aRT8d`3`;pSm)Rc ziJ8_sM3(LGc%R!om-+qcKzj=6Xr#VoTtUydclAbHy;G)dDs`eEtC3Q0_8#&7DX5bD zlCNwf^-Lex%h5H}lHHLe8t`Sv3HvW<$#ZaDkQ?ylR7WfMdwQw+N_3?UJkPuK2^ch`a&p}XS zdHWG|-HO#gpkn6uT@dq>ECg~q@wZjMj8z|$RY=;x!lfSJcS5aAc@}z)o~p{OGap05 zS?D%=O8K^G&Cp$OV_sFh=Dat3{pohM&)SbWRXjJ<{u%x~CiW}ufJ{BAf0Kb2BF;c% zYx^-AdROW-nH`Xsg#lkI8BwZ#{`l n!Tg;+w|CwJzIDj)38ziMsn_H5+3dU+BA)3@yOs^pWRd*=m@F_- literal 954 zcma)*O-{ow5QXAem%V8I un*IBC41Rq!r3u7}0OQ)?rw0k^8kRojlA#g;hCz7%;ii>V>#3g~IomgClraDR diff --git a/MacDown/Localization/fr.lproj/MainMenu.strings b/MacDown/Localization/fr.lproj/MainMenu.strings index bfe606d3ffdc5a6544ff2dcfa2977548bcfe4313..754714a8c9efe95227f54656324e9a88cc0cd813 100644 GIT binary patch literal 26516 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 literal 13356 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 diff --git a/MacDown/Localization/is.lproj/Localizable.strings b/MacDown/Localization/is.lproj/Localizable.strings index 0a71dc8a95010b8267835fbffdba4dba450b9087..a7ea550a9e2bc35c1733e7e92f5ba1f38e8d02c6 100644 GIT binary patch literal 3772 zcmcgvO;6iE5S=ssptluLCE!rhE3{P+Bz!2)C=TtVQssaX(gZt7oTC2D{sJyNBlXrp z+xKSU?k;f*1X@{1yt}irGjC?zY<~aRlnpV`l(F<>BA0m2TbaaUrQVkMV#%o%x&57#33EZ3OtN>8Qwa-$O4*t-G^JZ(?U8bKwJ7InsAfD^CP(=Ei$>U|t0 z%&ZBXSTn>RBWzynVkVVmhLLrC((5YU_OXjQ5?DHbpVkLv9kC%M&Wmynm?u1uxX`v# z^)c3&qH~TpW@twTH;ztHyO**b>=^Sw!V%A6J;dQ2P0b>td0<^HazO#u?)pp zDX{hU zv(94b_`k|N%lhQc3|z#B$3S(lrH8Y)+Fr(bW*08+f*t6~@z{P-uurJL#V&%LT=6Mb zKaAg+c1ia5i_ei9fu+Klu7lNDa*X*Fn5==wxf5UBio$Zac&vyG5Yr6ZHudz+ zulUtlcG?8qTp?pvchqKkgT2}KOi{kqc^1ubjyDqa0md{$^YPWtLcGZOWUKqsL`}Wo zje!}{M`f{N7>xf{h1|CI?mAgy^Fynq0Z%*d+ID&RO-^t(Bg?Q=wRC|!%noW{N2$J5 zMio`bbHm%H%bT|RP#e3rLohDv(c}hexxI@`Fk)4Q`Sf%i79HsEo)(&x_t@Rms(df2 zM!%;p*7G&o299G?0j&$W7`rJE4-r0vT^rZ;MZd1>JI2Z1!5QpSp#|)H?*Ej# z@6vvDCgx-p-^AT#F5X&sBe2gv1i+^q3utE#wd;5u=_!M{J V585yG9(emD2j2X>f#j5WVv&Mo5t$heo|NZ52cyA0hqo($7W%@wszMbZv78E^_WY~NWJyy zf6`yl*|i~F!8Hj{t8{V)Zg2UK1$1GrdlOP=L%N8cWK1BD?flv9M1 z$x>nkWu1VVL^)bKPItvy>gw7lTZx59CIg^KQf6kmDf@PcTtdhsNzhgKx}vU7qGG~T z)eP@k42g^9gjG+y(`%(tD(tI>?X1Aa$sX=0ElhCcwn=bnH zb}QlTy>~bEM!k-^`M$jI!f@}HS_H{Ty7=8c#X>z^)3D-_!V2dpWU=?PDAP)VR+*_P zb;k$cp(bHHokd3mnVKPw&3}$$3;bj%`^ZO!(_<4Pe=%EQBF$D!bH+4Gki4{Nn|{?< zx0dS28RowPglk3Kp%;Ws)6{6Tl6_T1yF~xYS~2ryGdm-wrhlB|lieSpin%QJ%%{rB z*^Xq{`vEn365fTlGP-l7ME*0Hvl1aF9xiA4lF_5aL-L98X`3?gT!a9P%U`}rBk3N# fzyappC5F4Df0h4!z4tDUn0=!1jWu5TYYY4f{Zw)1 diff --git a/MacDown/Localization/is.lproj/MPDocument.strings b/MacDown/Localization/is.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/is.lproj/MPDocument.strings +++ b/MacDown/Localization/is.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/is.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPEditorPreferencesViewController.strings index 52305339f0254c659d6fff2a4dc7404d07381069..9777d60360ee92035d58e113cf27aaf556f2d843 100644 GIT binary patch literal 3240 zcmcJRT~8B16o$_=zhc9MLCiw@Ktbb$1%YBku#KX|i!EJBr61T23j9&;O#A^RUYq#w zytCb6>y#}Cq}l20?3p>|ea|~*=Fjg%o43GLt!|NZ_yzWqXV$i@XfG|cru8guU3v{h zpYW|~HJ&;nsclGa4(pn;)*2o9Ro-q7=Df19ePYHwGxN4KoO#dAY|BEvEz#~+Vd!Pv z7Hx*vK8uBaVwfGSl}7P>7)1k*Z95{CAA?9{So1Q(IcwSJM4UO+JA|hbR&23y!p9_R z4?(u$Q0>!h*}7E*Gg53m3qQ6^JXb-{1Dm{N3H)&g=(sf|pTu9WdX7h6=3R;7J&*xSn=M0OK{{ z>!LALj#dVfW$X%YxNXm9SNKn7r26t%Oky&Ek%nX8$T4&Re-)Q)F{C@C$?L!cM9z*K0@FU#-oiyEaJ6HN{yIR&p z^+_DpkN8UlzACk#53*g?z5ro=44==!k1z3+g`o)lRWze|Ce4j!Z38v!5z&2O3GFU# zd1`KrdR}BC!oEd}npfbhOiz2`1C}4jYjP)e?M7S9I??5%isLwdaq_GJ&)BIjIX;BbJa@lJ<5d7!mosatN%T+ zqsnzt+Ag67-S*;4Y$sH>6|m(&722}Bw?|{xd=`FeU!BirN>n*=KJEQR{Hi*&nW0lM z$zDt^a5+qBw01yx3($?E%=gPRzDFjv!L4&occC&Bel)W_3qN|DbMhJtavP9o#i}u# z-3R2m<|3DeEOk$NO5I`QIqs-+*u2WE{hUhj0L)wVjJEu$} z3KR>(ll;qjZ;n$vI4V9qyBd=DJ{jA^k=^!|A+**Lw(mw{x5bPI<$`6ae9YEX`vKaD zFHNe2AziXq)_5<6V=|tSVb3plm0587L{3?dX7{W7eR z{)9Xa$zFfZVxALHKTgrNsfS#B+51{7`2+Hp7Hcv4Q5`FNS3=XAbz6>wpU9Bsm!OX$ zb@5X781g$`_cgVPEY$^_G7-G4xfqBe(wma5>y$1k!AQ?8D(W$wpMF%%#@-BsLaEnK zRKSGNNY{(h)KfJJ6K6ysMgnh9TBroW!YI}hatn~%g3`qrXPjL$#9%cVvRTCPHu+4) z5>n>t5OiEK;)OOD9g@zd_)z>~E5R`0(nUn&g2FPp^?i^`Gp^Q+c^ppDqp=G+hj|>5 zsYU(C@WhZ^{s?ff&o2| zi4YuhA_J7!s-XxQ$=Q!u&cS|4&QkI&OiN-V7{uaOy=)s9Zio@qZ?-(_kbz4MKEEnC qm0)syVniG6)3m#%uruZx-uvsx3o`sfQr9hMm0-};6SChApZk9Rn)9{* diff --git a/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/is.lproj/MPExportPanelAccessoryViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/is.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPGeneralPreferencesViewController.strings index 5b5015031a6f49d64c22ee72aae5a93e5c120858..bd4b826edad627b98be997ed2b5e0b070706a445 100644 GIT binary patch literal 1614 zcma)+K~LL25QX2FUtw`XN;z?;P!FYmK&ohHiqdj(96L$t#*v*A!oTH$)ElQBkP3V= z#0Z5Yjx4WNJ8x&_y?Ne;`)zG0(kJDLRq;gnz`Lmvb+o6MraXnlAW|?nkzL|bjd*j` zYJA(V5i5O<6)K6@PD2kJSrQpApDwa|QBOaKB&-~3|2bDrXY6aKty9Jw9q4MYV@uoG zU>-ueBTHS?=5wwicxAj1^;mR7)g!W7T|?baPwCO$)G_dgG2Gx;txTcIH?=s^1QlXV zOBR(^A*5PoERk zO~Wy)>%LnJGgcCme)7#*9nbY1$F+2!UyNOS)sH0|LWr;q->7enk^{VDeUEj^SdqEZ zwa@-~g%j^~q(6KOQKDSsYjqczwOi$aJ=7R-y5+aOVYLD$s29V%jU!q*XV>>71wx3h z0!N%YfRkyzo}1VAz)NpOIKaGM3{!e%T3e>Vx!Av!uwu8y++%jT%!$tUPMMj1R;w}w zbA=w4^s>b~f2B$Y5mx2p|6#t!yesC5Vxg7Y3l^z3?V7VPXI6qRPn&nl;kRJy_PE!b zW6f71zhj*8Hcgay9L|D6y{x7sK RCz}Ep8vR2fyXR_;Jp#Q?1|t9f literal 824 zcma))yKdVs6oz*{#ev2Etfve`&>^>?1p?QNYq;rlEKw3=>QLZCj`B8H40Q99AwaV5 z#Y(wKr3f9oekAdK|KXXQz@mmrj6#h}Bwa^<2p+L#~9tr%be{L&@6vILuXTQkR7Pd+! l5GzOHWm0^_)}L9kUUd`g!9a51UxJg;K_V^ulS~fZ`v-Tf4O{>K diff --git a/MacDown/Localization/is.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPHtmlPreferencesViewController.strings index b9b804989960cd809ca44ac978bc8c7d1f2eb507..d12accca8c074e797b33c2938f503f0d409a0e3b 100644 GIT binary patch literal 1412 zcmcIk%TB^T6g_LcqG3r=(3q%bTp(&d0TUsTXj~LpL4|@)dHk$@V8YtO$GKBlq)vf_ z=BAU(^vv9Q&V77+W{`q`JUXy2q!~EkmqZ0snu8X)TwQovZQ>jvJN$o0)D{LPz(f&Q zt|ypqpT+|kyxHb^HhLJVdnN7~>h2J?*v4Jx=SrRS6xx6FlE_D%HtDm-SA&Rj-uxRW zWRPG?I>e^&Btt)^WNYJvT-r*N8DkSa3EC>PYK(cpn9rzys1#MpWJ+1|m7~3*$9U@I%fxiW}pC137PmPK>s$SM{varkAF!9X%n#hr1Kf+0e z&~tiKJ}vk@*Rd)S?NY%a^^sV8B^O!+)mCAAE)o9!xZLznrGY9R4nK@9YW79N7dz>2Hwfg z!c6tpW?4HX)}u*ImS@oK%*pJLxnr=`L`~^8$#_>ypaHqB&S{-2h3z$KR5ClleI%zk Xgr0L1ABwBQ@}{D2$zCSvAk6VMBy-f? literal 712 zcmb7?(N4lJ6o&74ie{H21&s-c#0vxrRlvj&Nibe??8qkF8Fnqm%lHN+UXysW7jwhO zX4MOC|Mu^9zVy_qq$5QflQZIsIEQ%%sKM)ilunBrs6J&)+I?2Fz~#R1qBVE};ew3s z4)3$h4ai7%>D6oZ5oVfov#_Y82i1C|6#Vv%lXZIN8Rbinya}gOsnoyCHHK$>5rF)f zO9xs)*6MJ6YQdZAh_YkaADA3o1hrjnhx;troO7dfgt`14!u@DXWPm`>gf6JqB2K1) z-ZtoJ^^g;bphV=!I|?F`S2UPxLs0+F9QzQ0Eh-ujed^LSTjtmzC}EQq2t``8Rfm9v zX$aHqUUU>8SZ>S7gsz747lN{BHdwYg TMNs0k%|f`z7SnApYA5#rA=lP- diff --git a/MacDown/Localization/is.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/is.lproj/MPMarkdownPreferencesViewController.strings index eaa47a2e303c8da0f00fbe1d3fd4150a183fdb09..244fc0f538a0af98c030bc2290d3d98e46c8d34f 100644 GIT binary patch literal 1568 zcmb`H+fKqz5JmShUqN^zsTd7}#Q1_3H3}*hZ*PL!ON)Sp@VEW}U!bnj7F0Y!Vw$F< zobH)@*37gY?-`|))RA00YQmA!A!kZuRaMZ7rX0RJ6fHC^PY!rKRgcqUZK=OT>$BF1 z6qjnK&%Y*XXDY6AdqfrFsHe^)%esbCrcFrn(Jvy7Dqv6|WdK-5~YtS{Anr(09TzTjn_)1*6#5C8)YzjM> L@oeMy^}YE7cTeoN literal 788 zcmbV~&2EA~5PtBiwZUjiOfPEFnpWEi_V2df3M&|*v`tE=7>_vDCf?^MuwbL{3Vx2OYjuzX^4w?#aupx_zQ;g zz5M9)EdyL#5}hi_XZ)L?$b~bptbPa8J&R&qK5Xg6$pWGjhL5t=HNem>wt7{{+ zRBX-;p`Nl==?ScF@6jP;t6j)2 z`?&tYTK~U)CM6YQR92*xMtnvm{CV9eP+g%ul;~2gtRg*uvvb7#5vYXogk6|f9qW;^ z9=>9IavG_xHam;#bACFttb%*PuFXwF=b8PEuC%M7hH5fa!PKS}1(lRz?L%z;$t0io z`d=bV8?}X33)pc*ZGFREvOd4ofc2%u0)?w0IVB$mgnFOekphPRHl8tSd{Q{DO Byr}>H literal 620 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 literal 11440 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 AQ~&?~ literal 2751 zcmbVO&2HO95We#%1_FZGKFH{`Zi5K2lQ{5?Aj#+@fUzP+(!%5}v%8cko%|XB+IxHL zEBHi?sI+Co~X)gjr?)-i8&9`%WL<6UNL1E4XQ_vx2Iyz1|2d6w$RUQsI^b2(k z297hHYNLZa?3^UY@e!SBU*>AX87=2*$j>>?sR}yRVMW@Lv4OPlLFGBlM4vxjZN7Rd zp7GAK$5gOy8|S6th2|w0wa_yaG!C(I*5T;Xx}ts)efHW9HccysERl^y4XI-sGP771 zP4VWZTJAK?zDs*NDiJabDX}G_K3OvXt7QU=yfxcA+zb zoUDk=OdDp`l}h^`d&6FTd^Q~2UR~dg2EG2-=yq^%Gwfa5j>g0Ds}GV&UpW;5JEk}9 z=)kjCEApjU>%)_@`J|tH`k#5c9Q_0dwAtv_dQhpXtdLM&E3QlchGE(T43iBrt zG@lIx^e~bDEd4>7Ogp_^TRBz-dm+CMY}lz>5^SEifo^PPGsI`9pe_uIsYnMdgdiWm z8>*|K0qPbfSIVarIW!-(eYI5!N_(6kQJI+M-g+i*>2#qQhv)TB?o8~Y3IS6VXR0|M zIW^C%?E&cD2mK@e59RQuPc5A5rJ;12QA#EdZFDlq zX|B^dj9jkG9Zfh@m1j!gkjwaED&w%X`s39CXO&q&qA+DE4qY1Iow!Q2EW9naJ_Ry!=22hpN!{5Stc!q{Z+>#+td7T}e)A_?+$(M>fe9HG|2lY`V zwGOi$BK5q=BL%yJ)bP~K2ql@KFO|wu6jv%2@C)w>R|>GNh9zXvV=m-v2@8;)#|Dy=>tIN{J|XoN2?qX&<5hZ<-22kV4(3zBQO^QFEY& zj>KkI=dEbE*m(`9k6D8EUFwCP7b^MO>Eq%c^^|BNI@f_Pm>D{$4FnoVeC`lnSX5R= zES^%0dFs6exVzZbnQLif0I7CW#?ulqWS5&l_^qQ}I@kVRw{p|I*dwAtHW{uuGZV`p zdqp#+;?38DepRYq0~vmIE z=m8dy?VV$^y_U55h@dg5%F;S;t3K2iViX%_zAI+DV_uEBwF~Ww9d+SZ{1@6fW>ROWh+oZduN|HYd6rq1_YLfX{|5G5ZvUgz?LAK#SXAxVxYt*< z&a(=ApV7Wyl;ga|1AAomxKCL;yf*&*@w;}zxDDEo^%=X(KS!bMy96$AaTXXJhEaO9w?yJ?YT#=SVe=N5iwhP%Q4e(psX+I9L|&cwLRyQG41kV(7l<*cY#1=Xv7 zNU^ic%pXnRN?D|FZ7`mct5HXI;HaeGdFF7DNKtIp;I0MM&$HVRJ|SORfvpj;LyMW) zoI;qgNF&?@i}HXXQu=)uK6j1oImm|S(_=zWdohk*MUpb3^nS#(k1w7fJcBCFWc1ej zmqq)Uy=As4DEbZU7WS{Fm`PcrnW+Y!701fm4cZI@J^UylIm4$jJeD>*BY32XO`(kO ze;tqK4dLm~Ti9#NdW#-+uPUuOUB1q*=Gn7<2LEl?9-%s|S3YuPvtp`_-42ZI*;Cpz zuCYhV6)B4}uZ2(IOnePMe+*k!eDtgt6d66e+kB~2eF+p=jpN*&l;+Ahv#DIUj-Dzo z`T~7GtYlap-ow&(Qf8r zdTk&rH$!&q<6)MZNbY9Owd;$gB% z-Xegt?@ zKQ-ELa{`g6U`?gw?N4xDGEKNd^NQ!I60Q=I-^EXkjOrG4hvt7X5=!_?w2p_Rs0 z;kcvF?^bCx(8{kJ*Jh}%HrP2FnQsb71ixC-XquTgLTJV(r&S~yMGz`U*BV>3ZIiw=3%2$1uCi*`&@r5BW@LIAxLM*M0CR P(ofz_;qUKjyUG6m3y^sF literal 2929 zcmbVO!BQhP5WVviDo%t{!$KCaB$Wd;Yhz;*zz(oU?LniFX9P2nBWY~br<`)iA-CiU z@((%hpYSDVjR#8^kE=)yTv|-O=k9*5dw-X-GinU^j%;6!#{9{41kd6&&$8`ri4`{E z?r9*5B{|iPTz`Y{@1qCKZ12oHy=gHJXK>q2@nLs=D+uhB-*3DB8dA-uRa%f(kPNd? z%(Jz%|1bDfVXcyN?C0P9eE#)!@=)YcL#!ebp^=PK66UF}+)OFsgr!tdX1OLpVt&bM zEDt|SpfiTy*?Gm%2LhHA)Qk#3Gcwg8SA=0=i-|dju_%;ikEKOekH$I__V= z6@z{!uCRO{z-p^}sa7aB!tuA`o~`s+&#aCuTnTT@9l|bl+swuc|4#I&&*G6K00OI@ENC0?4hXr zXB8J8Xv(vcxH48ZNaMdyI;bdRin>|--;@qMmXvOAwlw~&57)*94P2j{rwEzUJJgeB z&|%OXkE*KpK+vHcmS4N!Y=CWcxYNQa5Rz%`dPiiDM>vTxabBi$jNTKMo@r_&`Qa*u z?g6yeamB|60zQ{T&NW>Kg+B}-40H2AC}QT+VsTJQ8A`{QG74wSVH#y$YQ>gy;>OLh z<+N0xrBR*b{pb>M0ZH^&vGjp}rB@#of3fsm94O_69h1J6*g)h0Eg=@TYsg&0HpP`u zD_fKf;PMnsF5QE(ULObum6<5Xs7_M8SkRZG4P6~JnEx)>ImN1=p*+^DKazcDT|<6; z`+~m;1o%DyYjXaL1Kgs9lZleHKE3?D1ET??t)DAc9|&MO_$6*W9&>a&tm1m%HzI%j zqgLqTXb#tNxJc&}q7MX!xWQgGbR(u!hHIJP`bX2Rfyvel3@)I1f(H`7Th$)Rn zh{`N3k-DwFmPn~rhU+rps3cSoOPyL*H%MIp>g@%HE|~6VMa>5SYGGEoIy(d@8Jnq+ zF$!0#bKKaEaf*IYpMu%x3G~MB?#HhyE-Yqjf7Yv5%tHbv+=+pU?q=tusb_%XZC&z z@p0*puq4xRX=!_mn9`;o*E*64u@xp!rm1{Rteq(K#t(#9D^jp2qZt=PaebrP^(Lj6_Y6XNJyg{XaX=Y6<(ob;#lmU7i= zsf=lMrP+G1PECJY{@{rHf6nCc#=OgZ=#S+5M#}s0Az;o-?mQiP>#sso>;IllT&lJi K*gTBU^gaNaKvARs literal 261 zcmb7|sR9n)T#ovytcnZt0$gmkR@`>@8UGk3U ztL)o$k5$V5iIw!O_}0$pZ-MiU?;-7rry1L}V;i(%7H?|UH=oyPgF)zpGpGH)(`7V77*LnqBeWqV zAujp%$0HF-39$s0wi(`GR<-VC%wco#iH9;$D1BK_}kjZ#h2&N|>k5bJ*^) zl6Vg`^K_NjvBx{G4)N~V5WFwrjakIw)$AdWN-O!wajc$oyS~qbYe+enIy6# zPZ1|JU{q>Wh7TN%)GgIt(KExY1ZhTVS>BCc@(^YoP(;h#;pe2mPs}3D&puv-G2vCz zFC(ckOKPp~tG;B+s-q7%S?NVFbwMZAb8J`B&gz^Wu&OjHS)|mQL zS+8lOEi*I0b<}s}!*Y;p!#JV~I zr2NHEpSpTgUyh0T7qfmeqK;Y2i&_erxL0Yq+Ka+hTwXy|S3$j=ygu_{YS#Iuywo|H z&??|tnRoB}FXkx6<^gu@{KT8EQj?>YMVzB%Ot|N-%x=hpaCTq%uCF`i z+UTk9+r+K!Z6D@RXHcjXb60>`mAvOw>z?0ELtinAICm%btj?r>K>k&~CVay!XZ;oD z$g9T~y{N`jYHN7~QcahlRM{8va6{zM(10Ck*#~ZSO%25?;ylz5={|IW{}KeD=Bg*$ P0)j)hj6EZ-t z^48UA#$Wx2_9XrN_wvJ!>%CZ=#C-q6FK)(H9pS^peRQ!`hCPic3Ira=)(#<7>}j1- z2QuD5%t+VuEUKQ+cuM&_j&856#{V9}p1S-~N-$T}_2?D{6w3$kCx5Q#TA@QXvxn3= zj~9-CQGcu`s+d*U&Q9u?;5rh`mmw3vw-><8PtcttqpQj%X__f?b*wKF@v)W z;LmA)y(TThX)jXU^tu%~gw1;2M9Q4a&4MxsPKNKi%GG=0TqX7hN9$scHkf|tEp0?J z7w2eG=hq4yx<^~qn+=RdNRfXz@80IUkvhaw#wHwT!i@Tb%cDYUbMa-`B-9EWhRR4m SPA=m*smf9D-%=`DhVd5zZmLND diff --git a/MacDown/Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPHtmlPreferencesViewController.strings index 8965d359158bdcd3b61ff761c35f801d11631fdd..e5e37e5ffc8dfb32056aadee913e30bd125de0f9 100644 GIT binary patch literal 4804 zcmc(jTW{M&5QXPCzk&$*&<2o`G-%qi=tFIziJaJJBeyP6^ntc$NwG}Hx;gfbZ~L8H zu4qwfkphes0$02YcV^C>IXlune?PS+me`&REww41#D3&>Y)97NlUdI$8FQO4cCpK_ z9P<1Jte)A#-dM}p_KI=eK6AZe13Tr-KJ#^LWY_M!cU+yicc=Cz@BOv(^MShyj&wQe zdn`Y3=M0~1W(^U=y!kku*i(B%Ofie5@jPDoIV9>Sz9+<_`5*E5KTvvJL1{=_!qn&d z-=m~>N|ZjZ&S%6kDZZN^b`|k#eWc_0;Az<}AKuiiwWq4=v9|KdLc8YA8|OV`9XIpvB~{&HmKS!;_|{IC%fAtDj9J8S>=ZeBg&Hi;%L)`d6FoA* zTRC|a`COVHv^_WXoI-wIgTpI$`2qym_ATQZ*fg);5VMHmaMxp&oFW36?PPetJo3lT|EgqK%g&jT@{)FAaOS}Ao$ zx10&fW*x)!wYiU%b7r3tuUI*D-uktbn%Q&evt@^{r3IH4)a)uRV-|6&ej$d5!(+ls z!pm2c5I86QoI~~V@Rj_Vt5vPfi2TKF)u<|?=h*+HePLg5M{DCNLM&4k5csZYQFO{+ zb0xo~JMrDD5NqSH%C4A295Kc1Yt;7visIDe;MrDYqwA1`7^m8=#x8zIo%|E+f+5Rh ztUKh*90s)=4wnTE>-+y6HrhiK#b&Gyu($%HYd7xmUg!$K9v`!aW98W;Ugcn>%x?Mk zoF7`5jvZ4j3Ivs_*i@?3=BzJZgnF6*YOfuA$l>1zS;s8mS+93C%3Kiz1sAKOF2ZHt z{5<3yDP2)js6S4eSE;ZVHX_HMezM4Us_GIi)D`A6+{n?I4)}EKBVz_e#}$-f7IBo? zh02PnQX1`DzWzf!sT#(3@wy=9YIoEwIckJi)7m(4>rmGXjA4eju|RiQ_MIKj|E@A5 zW)aW*h^*BA&q4fQbJ1_|90i^8-NQ@5RSIr(*7qeSJuW%x^&8%KcJ2peL@ba?B!* z!=BT1v04f}f;l=De|zpMbRlh?tLtdSgl(|VKQ{WerrcG0EUGZo)wBkU6IhUf#_!-D b<}aw!RnEsO;%MCc2PQ{S?|J_MQ(Wg} literal 2401 zcmbuB$!^;)5Qgu03L@yCEx;@-nr`T!wvkv_o5-z;6giBfvCWtwWs#B-KYfR?91*et z1nt3xOw9Q|{3?eUx(dD?7-CJowB95BZ*m!WkrbiOD%c zD9xXPJ9p*=O9c1TtLPqM8w^~qIY$3@yT9WFy7KJ0GZ)&}9Cp9%?Ck$D(qWAxH6;Io zba+=G-G~@+`fNju@WCDnlpCL{uoA0VfSoZ@WSPz_%W+YN91RP|(p;fsu~v#)5?bxG z_&)S!JUQX_#d&R66WFV=S44r_B-adB>cj|eCNM!JVV&L>N{>v`n%nTb!dk8B3O|vL z@HdxYj_a)EQCWCsF&>pu{(i#G#`Bu733!YlDN{oUmk8-Y1`-T2R**%cvJLdCoBc5S z(qi}=yywA3K0GgKh9=-KtPi$Zsr%w#byYSK)0w0XH9z@CenwKq?xKEU_lj$N@Q&;2 zUaj5)JoO%(j5SMyOC(}+bzx>>3zi~5wGv=E8mk-er$LrzDIupcQ^j7tdc(kwt5Q&< z6OJWUsTx!{Asb(h->O~9l2fw|ENq*$#;dAnu0eY!!FV9pdSD`TWH z1*CjzA%ymkFHZRB(OHeq1U!U(j=)r*OQ0E>R>MVuT#6UdgfqRY?4m4bL>FpdjBkPe zI^tzHsWF;>hq2y^E(PZLIrpEPpwSFdY|juJX}%cn??F}zHvvz0M8iubUpPcD&~#@x zH8(C<1cs)FnjRBDeZwYNS?aJAwj6-*l8+;v_1pvEdZ7t;AU7fr^eVZv1`KGeWw}VJ zo#J#D6&R>7>u*#I%V=+drQ(xdoBvs>1~`F2T9(mPZ99gC-}yz#O}VH+n}7#OO&e?K zTjxW96QStxFLrPQW=`cbWK`Ggo%beOjQLOwYl0@=5j^c)m&m!oU`4ixZ5z4=Xn>ZU zCuSj{YU+twT$X+h7-sbxRjYcc40&?PaX6}xnt+EC(6X~);$DIEju9-Q88tdh>2d8C zrmjtLNiSMUJsXdCdBH!OZicuCc-*z!aH+v@N$dPIzqimA$Pm+XQ?$ Ow=rq=xHQxC<^BRuK;>xw diff --git a/MacDown/Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPMarkdownPreferencesViewController.strings index c6637891f57cb4219569056ae1f3783ff048cbf6..ce64c539519084371d6da129c82fd1ce96998f44 100644 GIT binary patch literal 3090 zcmb`J+fvg|6o%I|Pm$r0nFs@dIF1+efObTzw5WJjV@gBQw1$>LpV+4WzqOO}knSF2 zGMVmV(m#9s|2ppHr(M|*N6HdPOK!OwdCzZK&ZQwG8Oe~VFA)eIOvpd)_hp!eiaF2$8QX|leNeK5(+JF+WVJlhbjX6$ZH_Bu~3 zIw){t0JFd5-jZvcBi`!HTU!Oz*>#>oRr6(j}%Y-}H>SGkDF%(1x(9tC9(U{6oJk6`i}M#>XD3>i4jsUU#U|kY|sWuJ%Dy&WN~+uO3+M$bfb(>NbSk2c^`evT)!L zOc(_)QC964wncm5k~pgN7#7+m)>ZQd&@q}XVC%|HzWAO~ZbR6WH`pWTteNfNGrmEW z8W?@Icr!-h0Gq3$+ocmnsQX6$clqiQ{W&rHTUE_)A#Tv(=BiAtX5|FDtPaRV$ zBh$N9tGi$pY2}WkYSbN(_4Dd%2)nwHsZp(3osUH;JTa43JAh{9x|-CC^idS!3s;V* znzswO77=z`W%klJ@8eJHNUfAf&nVTpY|%5dPiOOQ{S4~UD-u61o*S|r&^6VreL1nD z$OsOrBidx5KBBqJ*}~<-@>;HP%54a{ay`LJto7hZF I^;1Rv09ZfLQ2+n{ literal 1545 zcmb7^%W~Q<6o&Uag@$EjPGLw%=w!MGx0Y#|P%drKoh-|?KuE4EQ{ajE9(}P&jv5OG zrtZR<-}9gET-CZj1CFx{y+_Uac|X@$iUH-kd4n|5oLYS>r4~|Cqdf#GO7vuC<@SCF z+XY;A?2n69!xP>V-ewWh7!gJ(`~3^0IA#JjZyJqO4eXcvHM7I}koXPghFpttSv~pnE4Bt`t1nXv;z>4y<-%6QLD`pHhX0Zqfv2EUSQr z*BrzYrtQ50mx2!#k?|rE44Fx#SV>;H-K#qLaI2kgF0HR521pYgzw^;gO`E_pG&i?)?K^tbFJ8#>O{#r zPAbgVY6^!DkgLEkOTlCIu~Jx@b*Q&kw|S9awYf7%K_$?O-u-302p(%7Ij1p3*aX>N z%?RF5VbAatTkcGpmwUBCS))iQW715-l|mPfdx(ZGfBWR%rQpHG&-Uj#LLueFmXK4G zAJZqoj^sT4i4d6XU=`#JUkYdOOrZapbDmO_5yjH#MXx&ozTN}*v~cuN@aVUx+2w!s zc_>M4Cvv{l-Q^W@JFsl0j#dgDtwaQPXMfH-m~cx2-= JZ+&q-e*l>{(ANL} diff --git a/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/it-IT.lproj/MPTerminalPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/it-IT.lproj/MainMenu.strings b/MacDown/Localization/it-IT.lproj/MainMenu.strings index a866a242ee9163a68d8d148ce0c31bdba8fd2dd3..bc279ab6ee04512144226ee81430a1c0ba570545 100644 GIT binary patch literal 25482 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 literal 12763 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 literal 3091 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 asbmLi6u)NsF-e%w>osifFF@JYqxlEe^mHNs literal 3043 zcmbVOT~pge6n*Dc?C?bCYzQ>a&`ck&3C6}yh+QD<J-Qv>q1Xurg93ff*i`2N zZdvE+*|&(XPxNDA%o1aR7$-z8(7%73tk&PFt82Q!A&|vbk-Y@Y7naYbzXqe(bVdVM z0VASH8Oe$abApJGmf?5=c!5(n9wQZqGLS?Wd8oEL9D!YN*xT7{Q*{6rRl5|)?_6#! zko;kB?TI)us_OWX(aZyn{ z)!HKcu%CyKuB2Vf0bJG0`NfOVHJ=*3*Ax^uIfc%j{N$;1H!%r$9;TvQb}a{R*V>*d ze)o%Yy6PwSmb))&Srq{p<=AZl4g(}7fignvL4B*pK;y=}CTJhZz}7(+LIXAx2XIlj zI9oRlmWwMoyJcgM=$n?{h2mPleEp8(7tFIMl3y)8KekL#AbINVd7{sf{4_g~U!nh2 zt5&nY*aPZX4PnjOVE0iQ435Is(2z~o0bGQMF-`P?a*thozihsI>Dyf~lu9ERqw5Y2 zbq~W21lZgiz9lAN0+&>BC>iAvNYXyP{fKq$12m2}76$I7caGVd9Ki2ARs>vb?v}RS zR%`NKC^g%ZB!y$H{oj$?~d6smFnnWr}(!|rS=27L-{xl3V!vNoA z({TV7ozmjI`RuogKbA@UD<`RG^ew(-L8pInIkQiLptSnb3O$-UZ-{=xzG-Y)={H-g zp8xL%Q;VzE5)Wz2@ECDc$6_wwz1{^Qz(k%_gru#yi?!I1cZA_My$k z0bG38@M0mn;cJfC%1}K-o|B}<*65_UVyyug6^)1!)UGPP0^JI;s>(7mAt^jd68F%U z3?<-L3bq6zHa!P$(JN2+>t*12k=37?CyS-$yR@}|h|!KyRgq|7 zlAHV9%X#OX+;i@?EHo%6!9f=uOF@CHqJ}1l2;j4(aLE{uPFyWL%zKQZ%(}0Z}bX2*Cjt&|yUK1L!Nb#M- z$b4+4zO}Y;mAxEfBRe_CTF&gFtR&r9$Wp>RQmp@_;WLjgFYkwEn`!sywnFbZ+GsJ6 TD5cnQ5+m93j*i!I`EvOHyx>?0 literal 296 zcmdPbQgF^mEG|~CRZ#K^b}B6?$u?d*&tQl%}LA6j$bzBvvS7 zWTt220C7oXUOG^je^ORza*3x4NTp$#xvrO!Zdi~ZP(n+e3rRo^Y@8BE)#Ik^kDE6? zZrcC2x%qL^`o~Q>A2;_uZd&rVc_o4epfn;IWCbt_qOap{xd$dbyO)M7Mu frRAsSx~1uchIm5Vg%Ch-*G`b5Kn?*~j_L#e!^Cke diff --git a/MacDown/Localization/ja.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPGeneralPreferencesViewController.strings index 9768ca3b827fafa8f89df2fac70872c9c094b966..81a91cac8283481b5c8a1ed3e8ee6b99b02204aa 100644 GIT binary patch literal 2296 zcmb_eJ8#oa6h3n&eu7oDqR=A{5)Uyn(27c>NfSy+RS7kIkYLx25+|v%6)_+xBov7i ziO0Z#U}a)JsAWbGGXqP2sf-oyo!hjH%&lvr$clY^{axGN;~eMD?@5{IqLn<}{KV`P)1?iHx{VQgdYtQ=O|1V^7#^Et~l%aU7r)NqunTNs;|UsLCy zx+e3|m6|}9$bWKTJi36Ml|g55u`f}9ZpBp5A@r)WAN2}Z$K{W=m-!RFMi=-BowlLP z=965?3?{3{9QOFb)c{l zEwD8eYagtW`3A^}^uV&J`3T2S%zYg~&v&W#^kL2J{zo@YU)i&&NYpL@Q~b!ZTcQN#1lEtH!sjQT=wHbyAT z4I^O-N+P|`U?y^0QnN`Nd8W%LEg3GVTZAD}wgq=%)zho)ma4=QleeRVS7)lYuz)A3 z5A=hIJCxpnigsAisnB z0_szAs}6F*0|P_7Ti^?6_EBOPHJiH`vgvsP=cn-F+QXPE5mIEDpq_!$rPVdwj&`A1n)z&F8G@C|a{e9azk_J>#BF$}!F?nePIm0fY2t+{ zc4)WiiI5`x@1*qv+J1f9-Z;E0Xu;xjROfCPncQdD1HefUmnLwdRE!f$gcMKs{AFkV zZF~JN8tp};?_0x3W>UXQqMWcxC^0;e?OUzX#FZMpG1`qJ5mE@aqnOm!mNL0CI@}rT_o{ diff --git a/MacDown/Localization/ja.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPHtmlPreferencesViewController.strings index 1bd36bac29493ef789d0ff0c0e7df814504c78b9..faf7e7dd3fe773893ed7bcb6efcb09cf9c5742d5 100644 GIT binary patch literal 5252 zcmc(jL2MgU5QgVm3AiH;ONB(K?t^B;Zp11G) zGynWE-n;)ClcVBEuaqPs^BkT$!{@M^lTnVG%t)EhmpbDVb~!9d{QfjnMrv|K5|Wf| z#y(l(x=RW&$;>>@o05tw*m)_gChgpLd69V+x7K-%yG=fst)~uSIm?|aYbJSWYe%lt zf_)s7V{(W+xh&%D=kV4#`Q=kf`rJbt|A%*uhrCn5i|We&>woVZ-OsjnHq0$^$E=$; z9!e9%MWWabCzLl~{?xf&=YDR>_d_79!yOMMHl)f?fm3y^Ygo;3uVBxVr^!uL*7(j@ zn=ID8y;ANJ>{VBU-=2WedDuH81B|n*klLKlVwKCH%RWEY`?hbYxd$eE^Rf9E53QM^ zshG>=wpr!sYjc%5?`Ge8Ic2__cOw)U3qfl4d1ATKCwQzYCbfd z-Xj+ETJ1U&fwLP1od97{o@6{j+#4aBE($Y>*W#RV66?4tJLpJ;7d-FaVUL(^lo6pGe zpC-1#}Gd67Nk_XQVXiwfMn10u7{5|$x0g*ChlHV#^w=`+5dZ>FC0lSgM87rLkggoG~ zaC_h*V!CdApz^6|t(ct(_6;2PozL1m(y~5KPZP@qxRv)+&b2~DDM3z-lm7`Bf-woQ zrHLlAGr(ox#(&K+{w5f|MY9iH5uUd>?-Ah&D76#ST-OYrA=^DUB9F*pe5*Ei-1V{1 zQTd>((5o^ZWlL=nB=%K>jBXK;U3gnXkNsFMoxu4zrPcJs}*i_heu;;y4 zFo?w*_!jKg$Glco)ar3u7H*UukQ1xsmst7Vi87`w-;2am`K`D#C$`mce}qMNt^Hep z+Na%3iBEeRT^4SHUzqo-@@;^0txf&nM6VOf18_Ej#^qt3*7yA}reMXaMW?;{2nY)y zj4lf|M%T&*S?Ag_Rr_$QWU62l;uKUk-||~W)j8#{cJY3M7kqp*3jQe>XUyS+bjS-X z3%3{kY(8AvS>58qH*R*GvuYI8u~p%#GPX(OO2|`a+Sw2qmxUY6EV_G;2=w2KPfcp@ zJ!50%b5`bTf1b{vqEn#B64!(b6WQ?)CYOa9lU#c1(tYVTs5;3zeGB8;TB?;-E9-() zouJ05{sgr{`}PtVv_IZatd~GKXa7?V@}DFeLzjgcZ+9-WykaiWb-%(9_uWhy1f9Kk zI8Ai2%+hyY`d?!yvcp>79hssm!U63h#S3&$+I9(QQoT=s6#$Tf=ZE^e;@Md+< literal 2765 zcmbuBVN)AL7{}l9DRvlNXlJ&79nsqH1&{$kf!YR52d6JKxlMA--d=LImk?ihx1*(F zTeKFdwMD74P^jQcM?0k`A7)L!SN#g^E=TX?E*V>$0bcyW-Sd0?`+uIzzzHx$kn4gE zK>utmhszeG3>#yZkp44Z(3ynU(=fB(oHPr$3Nq{_Hl|Sl6ZezBOX`^mxPg)S*K>u- zxX7{@B}R|Q4^9m9#e{C}=~vGju5KKx?e?GP>l^sbNJAkKv61nAkcKX4B*8ZY|3&aU z!LO#l=I{a=H!(T(ikXaH)yWKE72tZcn(Z*);JRlz*acZ>t3xpZMVnITlxfqG3C4HE zD$tmKm%ZuGwn#Xs->#`T%fGhwmW018g5Lzcr|}krza{(~5v&RRLEwe6e%m z!NKo$gnzBQ|M}rVU-;|7|Nh0^jdVw&9%D8QkN#ylbNC`8W)%ZV_tl~dEhNB)8)bN^ z1kdKHA$TOjz^9RX75Mx9hGY+$2%aAEauG=UXKAROHjm|U?0;dv`2wZ} zb^ygqZ4puSAVOLRfE;VV`UIRBJ{tl=LJXjD>)GMzHD!u_PmQVnr~K))-n#STDs~fS z6zW+8?6?V#{5*mm55q>I6oN!T3`9~KEN`}#o=TQp^?Q!jTm@S=IbdkmhV={_$=1TU zkr1mZ_!m0hE3Y$VMI^Up&A|;5H$efpa?WfDuwgRW0VSIzY+X_j`_{b zm#giy^>mtgx|hKvZWG$+mH*GUBxsJJ=(}YV;98}*+XRvD6*2(>f;71y6_yE51WjHShd5A&ki?N+FxBy u7wkD8BgGi{w^J@F6k&c8|NfF%FUl^XN0p^?GT>Jw;CIXlM diff --git a/MacDown/Localization/ja.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/ja.lproj/MPMarkdownPreferencesViewController.strings index 1b3cda32c3fd2d9a0c8a4eed8c18f7e67f9efb81..e1de9de4ee4310a2457a46e39cdf90e31603bfd5 100644 GIT binary patch literal 3076 zcmb`Jy-!n77>C~(XBVf2#Ke$XIRW`F#z8D70V=d0paUtTeBR#HON%WDF$_k+AK}E} zU>y7d99$p{P8j20;$WgAPOL_K&h1BRdD{|lb8}BmdVlBM^PKnd@1Jhzl8D?DSCX>H z6_MNAof4CT3`s%qTv_o@q|vxMxyAFmtZ}>iSJjW8%JQEVjOmK*fh@{8suWK~C0bJ( zDanjDvL(}u1JZ-0{N^s{mJa5c;`)Ez?X11)%I*)>uI=Coi)IRPOHU|nJ! zA$PdUQ}|?g&&{H6SjO>KhtnuBZsEbp4Yt)3I_1^)_}+)@W%JhjHb>@@`DNalH=%p* z47`@n4Z=i$gBR?jvNY6_k3QtZo4*cMEXFLMFUCie32%p5V>zq8XBK-aAc4uyLpD`tU_lx**%V* znA3B|R+iW=Hc7^d}Bg;)cvOP-zOC zs+up3%`5W9S8~UBt6wX=C`>6VmErU~s4hZTlwRqFuaBs6=)DXPTJMjVLZ>`3ug!P! z4eK46a7k^=v%QMVh!>%p=bTdTO$L=Dznorx@%(-BG@fefT)PUe eO}yC}*GuPO`^`l->+Pp0bh6dG=+3iRP5TGoWbp?8 literal 1693 zcmbW1O-~a+7{~8?icOCsk2FP~hIkMP+VEoSi-Nc9cG_LKovGVdY`L|AQbgiGc?k!S zCSst5cpwUiP5dy^w~yg&UD;tN$?Bn-=C?cf{hw#%nXyr6R+md9>7f)@PRy8;5gN$wP)1Tn21#k1D0z>3ZZQX?GOS0lj@$*JynfPeyzhP8;ngp^cEMSTvu)1yIXmZ! z@!B`PaZ)&g3|+(CWA!*=K%Br!{KARh0wG5GYNvO3 z%4FK{xj^uBw?Fb~qx+-Is|Wueeq>T&)#zdsC$>F$yxJ8qRqNO|DcR8-c|ARY&RqK`L$~XM4PMHrV20dvn>aqkc0( z6x&;RcZgL*fmj*V(xwx_1!4$$x~#MHXTYpKK5`7bx)KH1pp~MGsdv=m!~)R!V+c?870Ngir&j5AHwi_8I*;jqjZ6wY+t==|2*W?-R}NY=lo#E5x?2- z2vN)e!u0N*m&YezA_S>m(eb)K@Y-Wsvu5~&v&NwL_5W{sQcmmMx!wrpV0;PGwBn?2 Rfsmr#IPHDk1gx5QR^jf(M{lMM8=!IT@j#h+m<^L?ceV>|YmU=Z`U?)^J6d(X_7@$v5^WfW;m4VBg97wJ0ByzZ%> zhpOqBVy$bRSwmHDZftOV6;#ZA%&IoFx~3iWn)vFd&u&94RaiM>i~SpkQIk)Z-Kd=SY))MIp!h6;)$EgkA0o(E^~ODZ45S3oUcsbd`owTL>6Xk z-X$&TAjLU^2y{U`jF+-*N zE8lgkz&4A*I=tI@grA|sDBmGOnEN~XWpH)yt$+_zV4c|Fjhln|ec-mMw`@F~J#(3wo%D(eZ!TW*7#e5~wE~;s< z6Jc}mmWxwVSJWlEX6bFN*Yx4|Je7|SBAkzq>IPncBh78wE89bf=}3$$2e#15*)E7Q z_kq2)x2X88y|km(UmrM61$=E<-SYOrw(Z=RYJHWs#Xi!_sU3WS$o#F~$+|9)#Wf!JS?mL literal 26 hcmdPbQt-=H@X1e3%*m`uO;HFgDay=CFILdf2LNt`2yp-a diff --git a/MacDown/Localization/ja.lproj/MainMenu.strings b/MacDown/Localization/ja.lproj/MainMenu.strings index 2568a7f1300c73dd7d58ca7dbbdb4aac36cd1f41..e3a9d14c353888404ad8aeab74fbb33ac13fe0c8 100644 GIT binary patch literal 24970 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 literal 13557 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 diff --git a/MacDown/Localization/ko-KR.lproj/Localizable.strings b/MacDown/Localization/ko-KR.lproj/Localizable.strings index 8a3e9874cda5ce51bd5f203e183be9f5a7c55f12..abe927a7363ea9dffa197b8f170f09c2ddb0ede9 100644 GIT binary patch literal 3044 zcmbVOO-~a+7=90)j0Zh%;!FyW*=&kmb+cDpU5X{I|nJMTQtJnzTMzrShe7e}5*MG8_x zyIO^gp#Avouq~4?TJ+9RrYp`pqL2FkAizDs! zHPkiMP!kqMY^*GlDd9&iIB2T9?WuWuaiOFWc%~rp=&6=-u%fl?IeOptS(T*^;mdc*jp038OM9)5wC1Je3K# zkLR>Jl5zCM(3`+$1{tFm@rsiHUsqmW#m;mK=j)2~YWaJVb$1nc42o93B#*tWf|DW~ z0pa)7&S4Z~9JA?hW=tOZ8Oc<&)1Acaxii`;Ztthwy7-Q~ZoJ)cWPR`1Zj^!X4I@u| z!x~b-2x|h_k=aZT3-nznP`ePYwojudmo&WQVvXqj+Ve|G$oB9cnQf9+mcVW`;AB*% zc1fpYvaKpL_49+@SMQ1Cev*}4W0SEappJX)S;l6`^2oK_>~_5x^+L3wcXPH7k)EgG zmpftp)XE#}*f17Y&o6hr#Q7KW8o}Kbq0BP0VI?hM-@LO?EuKESnHBNR>SWgn m2e)qC!>9*maUBmW)Y{a+@XR7t&HcRP1>RH-4>FC=5B~w}`6sXd literal 425 zcmaKo!AiqG5Qgu0iXkV>!Qfduh*YqoT7o%;ZFho;n_WpZ6pum>K@mNORTO$Cl!{;x z5Aom&HQRTv-2@Z@Ugq?F-^~231Kk88Oi=U@PKiKJOmW-*$F=MhWlAPCY=gbHDfHxS zUd-$*%W@sq7pWqgLwbzMnJLDZI)h%OloW=o0|wUlSbq&`a_vCEu8iXtg<3b!c025P zfxqL0dxw4}^aHPDu+5tI=fVz2PN*CRlP@Qii}SbgYOJ3=8)ymxCYI5^|NV;7>dD99 z{NsCd?dZNCXtZ;LNz4S{6`Ie=_oB>iYmQ<>GOi$E90iFHSOh{=%b`yM^bja2qd;nE W2!yGg8lN6Lm#eC diff --git a/MacDown/Localization/ko-KR.lproj/MPDocument.strings b/MacDown/Localization/ko-KR.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/ko-KR.lproj/MPDocument.strings +++ b/MacDown/Localization/ko-KR.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPEditorPreferencesViewController.strings index 615e9635667bf22918784ee356ed924e4cc81088..cdd6d161b0196817f452b36d3e713568bde68c03 100644 GIT binary patch literal 2544 zcmchZ%}x_h6vzJyS3HA@2{8ss1_nQ3)wr;bN^wxIjj10j+ERy)DIy&y5+6X{z*it? z8WKqqQw%1?urNjw(HC&(1GrNE_f9+Lc*@KyG?Tf#bLZTi^E+R6e*PFn3I;~uqJ%mx z0~dMs<0|qfpo%qk$YP!|7qgU8zb@Zjpp?gTk5AQLm(7(r*9_G7e=AtzyA_=8$X`Pl z3tXvCB8RbHmxT=1Ozs`yc!OHzIy+JrMjz*r#L#d0`-A`5cscXJz~1)P_rBIX?mvui zlJ+d&0qyZPtMw!^sbK(Ce9AD8dZw^?2Q*tx@q)o-a|(p)Zabew2GfEzM}Ilc=I&=a4Jg@kEzPl90J} z+dIu6s7vXLB8nR`mDvNhq%%_Gp~}t0$as~>ui}-#G{+jonUTIHx?GZk%$1`4H|;y0 z;zcTXy=8ROs`|UDFqGR>Oa8I^l^R))i@P+dcHjBro9%zP=*qEocR#0Z~q%<6g8 zN?zC2EaTMB`)tOp%$duqyv+_b!zlW__c~Wsd6$At+lyb)_Ghk25^?Q0=&DaQcRy@x zTCF(M`L8@Q67rBsPnPI^pZEWJNZE7Xp~pMlo*#P~&qK-UK%J{g%m{VrER(vTpPk5R z&vBPJQ?t59kMcy%hw4L;kn7{gzJVjnjb@x2NKRN_b*S^V8p*WEj((0zIntO&;}*__ zm?R0A$^N*v9j|xAJ#z;2nKQ-8P4<sRnuK6rL6L|Nc(+ E1?=*N*Z=?k literal 1220 zcmbu9KX21e6vg*^ilA!XR)#2d8+Ty&sRQ)JiF9HZIpVpBCt^!)qhH{%GmaR-gqoR~g2#(gA0)|^=v z!NDMW(hCkwqAt#6ti+9ZZKHV>W2MdC#=aZ|?>lkHb*9cfQ&i~Mq@JVA5DiR(TMc^ z&*lDjo9fhF?7~JDZaQ7gO9X+p`yUA1!4{@t?JQpbMTez(mpLX81Wfq!dGPTtBTv@7 lEf8tloAZwBH!eZ_E_8LB;}Su@El9zOSK;eH)Ta29`~n31f#(1K diff --git a/MacDown/Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/ko-KR.lproj/MPExportPanelAccessoryViewController.strings index 46f6da11640c86f26326ec9daa236c45c88fa237..fb4c20fffc6fbb9e0cb1d026de7663f7102ee954 100644 GIT binary patch literal 484 zcmezWPoF`HL4m=UA%`K6p%@4i7;J%9iNTK{n8Asml%WI&^BMAhDpG-Ja)2_{K=~4e zOd!qyiow)-0@Wk~MM@b`z@o(rl|Ydaps5u=H5owl=|D0EN`v(00YxCD`7u?d*&tQl%}LA6j$bzBvvS7 zWTt220C7oXUOG^je^ORza*3x4NTp$#xvrO!Zdi~ZP(n+e3rRo^Y@8BE)$27oUT>PJ z@M^=2jZ_z07%-tR&r+1WcIxRYrNW&&A1=v8jW7THh%+Q9d=k36-up{q xVM<-hJu%~gWP%(4FZDSgpD*C-gv>#Ue$8nA@MS5o`L5f&Dx3sv$MWXG_yoV#N1p%y literal 228 zcmdPbQgF^mEG|~CRZ#K^cFM0%vQ{X`EXhd)34|7;B$lKCMf{VpQj<$OT|k1VK6$!n z;ku6Lr9cTSeJ&&cJ+MwCkg7M+TVMBXcr$m)+pZl-)?8frsP>eWl;r0*r{?4!TNj*> zU#?J|UzDPdoL`z(f@W`iYPfEan{H)NIMiN*0Fu40yH~uKw&hL7429R5x4hc10c1A- Dlfz9_ diff --git a/MacDown/Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPHtmlPreferencesViewController.strings index 645e649aed17cc1afadedea786cc0fec77acdd35..58b37dbfaf81102f3828bebb42c66e4c8b3cce05 100644 GIT binary patch literal 886 zcmb`F&q~8U5Ql%~KE={wA+{p;7Z2JZ3RMp&6~s%c5tZ0f-Bcez-$i;>h-bZe&?oWW zN&P}HuB(4LM&z zW%+N}1-VxpFJFtJ^KEr?!s$M$4K;Gr0=pS`taGgEYAPOiR8&<7+ohNqd#{||HU44= z-^uc{bVU58%p#_aW)(qm2B)VL*!sViTnaZ+^ZDsMdvEeY4OkATbxhqXS?pt5D2w<4 zO+)2rlWchO$pF%<3%+aSQn>kQ!}rAK;dbxtf0V04YZ;Mxg&pX_66q4MknZe3Ygl8V x?qZ)4c^36wy}6@ZGUBOCJv}G~Wa}rVOX23cc`>?9=3kB868l&iruU>3{Q@q3ivs`v literal 466 zcmdPbQgF^mEG|~CRZ#K^4oR&jam!52NpVii$x*UaD9J3zNd-wc2M1dL`Tj{+smUdt zE+8RGPh(wAb6pRgQlNyEJ{OXJ9$23eLL(QKK8ig~r6nc#dFYk|XXKYFs zCZ!e?quCf9m8ctLrdw8)2DK3(fMny_X`KqMH+8(7u|whY<}GjLZh5t1gOWA63vl{0 zBqKF972U6iX8F2>F1n7M1yGw20?0PE_Pk!+0n|&hWiF{{iKRIu3I&NJ8R&MV8anFw f=IR!g6+-Pq2q4)B^xW&sI}~1R+WUIp9I({@On{Vd diff --git a/MacDown/Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/ko-KR.lproj/MPMarkdownPreferencesViewController.strings index 5735780df6ecd9e4caccd5c1618ee502c8bc5cb6..c489ebede53682f463e0e75b52efab0dcd7089ee 100644 GIT binary patch literal 842 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 literal 9263 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 diff --git a/MacDown/Localization/nb-NO.lproj/Localizable.strings b/MacDown/Localization/nb-NO.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..c0f6505761522979fa9fa7902b08db31a95ec856 GIT binary patch literal 7208 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 Th)KjbysU$Ft2&J=PSXAZqcMR> literal 0 HcmV?d00001 diff --git a/MacDown/Localization/nb-NO.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/nb-NO.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..379a64e47a0f51601a9205e1262ef1264f9f879a GIT binary patch literal 536 zcmcJMOACTP6ot>aUlA??6IU&wO+{dff?oR`+Cwu?gZlH;H(J^vs7(y>;LLZg$20ev zqlW70Dbi9Yqpl9q(nwQvbymhWDTeT2B5vB;XWBC(v={HetWnO|)f(PYzwGHMP)oLkII*?RMDDYqAxAaNpNQt0JFDzv{Dq~z1if+? zaz5fTf$&)?Z#BO1zl1U}G8v{{atL^V4G9d$!`56gQYw;rf6ELsx0PbFV4X zy*w5O`N7=roik_7jQ#uh+|Der4>q)hW&9$0&v9zER=*jdGt%FFz7jOC zO{w=Nv<;TL*lm0M9jmzfyH+Rv3pksU@(+20^S>kNI&OMk9*6heg{yml_LNzlZfQ78 z&S6je*C{fVru(dP(D6#&QK8)dmK?v-X*Hng|Q*O)0d;9R#a_N~NQ$Ro^KjcRIc38N~n&evHe2mhe-eYY&~kk1s~Hdo~~ zCRbnkLub;i9=l}c9(Xh_H9>dtaqCp8Ia7g;?>zOj#7D>@%!lu@F7qNKBfYZ}d;i2Z zywf)4$Nz7;vNAXOQ1dThjwRGZoi=y1*v-udp9QQuxp&=|e9GK}Ja%!jntkgI+xC77 z_gUmr-iBN4pw83#M3vS%@z`wF&{5*PBW6xX(re2xsNUPnT>?f;?xvekbFTH0u0kGR z?jFcb)oZw(_p?=y z@1J2zClJ?mP{hWrxymFuCsu?oMYwd|UJ;0`z#Jcu8oa_032SexK14jKn@OhfUrwfik(|h~h z<0E@Ad=$$eu}Q$G$1kygeWLBzl((a`kgF2kJ7f8+AB01&w7M> zi%IODFW8=8R^jbuE>%%t7tZ#C%92n1UB_9kN=T6qvU(pp(3oB8(67$FzP8rFc^9jt zLEbOcZf0euFU8~!Jk|IeXQ#K%V?K2j)ri{aEPPHiw;1IaUY6{&oif&9mBu9Es0E8^ zj3IklAd_J>B;SORzOGlV8gH|#+jA`VbAit<$hc>CTecr*Uy&!{oX;_dxX<@B7V*#K z{#426repLXpKA7;tSM1h`?N3dZIJURCK2~Zb}DXOXOUN%D>uFmWlxqJ&2r;J=e+b((+Gdm^`N2Ef|db@)q zDUtbvl?|+!V9$_yU+0-8p6@){4jCau;sOuE#-Di-6LxtL8f`8;H)f-VOZ<3#d}$i< zeLcS3Bqk?}n!0$m(XkrSIubR|Jiv|;{m#L55!0AN9MiA$Za32c+uVWdC0Mp-#g+OW zIiwTp@8gm17f<(j4(zvV))unw@%@Q?Puu5yH-|t>B91_1fe}@4Df$%+Ww~Y#+2$?l z%q%OyXmgI)N5=)a#~>iR1MW3*7coxLp29OFJ0W*Ut_p5)NW>(TA)$FeIW7zu*bvsY zSsiSjjeeiip4PouB}=zwmzLw7Z|xiVjyK{ZKgavIT=}BN=;@kE*_0Mk&LK79SKUIZ zjK+N4#3bTq?V@c=KFEs9a#^ux_mHpGIm;EP4mQhQv5D`a8ZOGLO*ln4rLnaqNbHEa z4!JI!;_(!_dVDE4*6}NvQO zyYIz1c!}S7#Hs9%xSm=2^*U}38O;camG@{F_Z%T{gZHq0b-5Pf9g~Rry2!IxMEmf}fSRef z9c{4EuPe4$4TofW4NaGBrSP#J%Ex5QmGfEqnD_YI&Uqe_hyiLy*>s%bJ*-HG_ zCwhKGbc+pP09=+cgMb&U_mcV+y9d9`Fe!JV&je#a!@ewWeLnqyrQ_jUP7=Ls5j%)dt0 zNkR=~D)Q_G&Tin-IcS&cEtznZ^DHJ2_pCxSrL4a@PWOa%ok(pmgXx@0>k-ZD@=$w} zZ1&fkaz%BmS#4SnRh=hH@%qM{O&qaT%SSaP5%=Anclq-h&#mGMzlK$9iD@%NTkqVV zO8?Dv+AoRYIlVM{Xn!^>Trb{oMkx%mlhO+4Y(C$G*()Xy$H32CI-$IDJE`rj4Rs=_ z)6jsh&+{=hOKXbPtLyj_|K#TfVy$YPz%af?@HQq9_clb_=bz^?S)!WLo-yS9KfwEL AnE(I) literal 0 HcmV?d00001 diff --git a/MacDown/Localization/nb-NO.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/nb-NO.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..c12eed8bbd0b238bfb69e027c60767a3ac4081e9 GIT binary patch literal 3262 zcmcJSTT|0e5P@5D8q6sKUjB>|29WtN!Ubn=iL@s)h9*Ld|>A*Z0x0f6AdNF zquQ5%xOseY>!?ogMK(^BgiUpZPh$4-;nEE9c^<5Qv5u`RG!4nIK2IS}gVgFg&KB8z z0%0gM*0G%NeU{UbusQSf7a7T8#}&ip$xosZ%LQKbVeb=Pt>x}g>I#+DbJSJVs;jvy zwIyLwH}Uc{`bP`#En!K>rM;rdo!DA*W*@SDNT2bYA3A8ca2neXM!XM}WWa%(lI0#g z8?%nc`pdZtuq13>Xlz1u)6S=HNisf2ZAvT(Qj3bri6&ZATkPsvJ)T4}FYAwxj-jn# znJ3@*`s*CCC1Ep9b!$z>=uSLdBww9g+;@BfA{vuTeRMs|7%*Ex=)N$~Jia<%;$(B& zlCT+P^#>XK#Zs#Oy7*7?=9=dSZtdDnlh(*Lt>XtdaHM<8-YlslVUr%Y+|?|O=qRg; z=sS19h|+vrR->AyK5Q|*@MNC~eZ4@qC}9&$HEZ7pT#vePyDg7pM2|>3yLb*NPx?&> z`?S~TG}2R)cELnL{=98)YPg5(lCzS>OnNEjbA*rj_kp@OPzY03Ad=}Y}Q&5HnG|h%-FLkZtd@Sf=XuEtd{3R`5doxpsl)D zb3>ip%`saNHuJ14nm5yo``buA|E%92qjiccn=cR4sLs?K&Qp3aZbO}ottDY|COW78 IgJ|ad0jpH(wg3PC literal 0 HcmV?d00001 diff --git a/MacDown/Localization/nb-NO.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/nb-NO.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..fcfc36b22d6dac72b1a44e22350fe65300581aec GIT binary patch literal 1814 zcmb`I%}(1u6ot>4rx+o1gJeLcRn;H50E$Xg3Q}l;*oD|o8WV@aX-QwQPr*B|D*f(^ z8{%kEvxqF)S)B}w9UP$&uZyJnQm2TUssHBrQqzH^ZyN~ zlKGOaY-;sZ=gjr-HPnRJT!p%P8M0vhU1fO$?mKo}{v2p;YQL!u+ESt$o$)*Zb6i=h zX+tZFV~F*cOjf79o|elBUYD!Er#a5A8#uq$N0dllHsE=x=enNb97Du8AES7vV@3t6 z5|;|`m(R1MZ&f!q`esb_1DFq~g(Gg^-{!MN7RZu4Qn~U6O%Al^$0Z)w8qQE!y(6`u!}hSk(8204aZk#m@u- z^@t(j_4rCYmfxMvq6aHe&(^1@Fj~;1*1N_w_1c|-9#>sk*DI-fncsUd&3GGcTZtj& z9m@56ta;@MUpv#SH=~+odA= aoC^u(Q=4<5zD{C@cwOpojkS3)W`6;%@giRU literal 0 HcmV?d00001 diff --git a/MacDown/Localization/nb-NO.lproj/MainMenu.strings b/MacDown/Localization/nb-NO.lproj/MainMenu.strings new file mode 100644 index 0000000000000000000000000000000000000000..a78afea3d5b91e836c371692a867e7bb536ed9a7 GIT binary patch literal 26714 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 BS$zNi literal 0 HcmV?d00001 diff --git a/MacDown/Localization/nl-NL.lproj/Localizable.strings b/MacDown/Localization/nl-NL.lproj/Localizable.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/Localizable.strings +++ b/MacDown/Localization/nl-NL.lproj/Localizable.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/nl-NL.lproj/MPDocument.strings b/MacDown/Localization/nl-NL.lproj/MPDocument.strings index 8b137891..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPDocument.strings +++ b/MacDown/Localization/nl-NL.lproj/MPDocument.strings @@ -1 +0,0 @@ - diff --git a/MacDown/Localization/nl-NL.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/nl-NL.lproj/MPEditorPreferencesViewController.strings index f6c868e5..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPEditorPreferencesViewController.strings +++ b/MacDown/Localization/nl-NL.lproj/MPEditorPreferencesViewController.strings @@ -1,63 +0,0 @@ - -/* Class = "NSTextFieldCell"; title = "List marker:"; ObjectID = "0Bc-iD-VCh"; */ -"0Bc-iD-VCh.title" = "List marker:"; - -/* Class = "NSButtonCell"; title = "⌘← jumps to first non-whitespace character in line"; ObjectID = "2Yf-FT-MDH"; */ -"2Yf-FT-MDH.title" = "⌘← jumps to first non-whitespace character in line"; - -/* Class = "NSMenuItem"; title = "- (Minus sign)"; ObjectID = "2yJ-j5-PLm"; */ -"2yJ-j5-PLm.title" = "- (Minus sign)"; - -/* Class = "NSBox"; title = "Behavior"; ObjectID = "6JP-Pc-JFd"; */ -"6JP-Pc-JFd.title" = "Behavior"; - -/* Class = "NSButtonCell"; title = "Change…"; ObjectID = "8bz-cc-gLF"; */ -"8bz-cc-gLF.title" = "Change…"; - -/* Class = "NSButtonCell"; title = "Ensure newline at end of file on save"; ObjectID = "9Wp-5V-GeQ"; */ -"9Wp-5V-GeQ.title" = "Ensure newline at end of file on save"; - -/* Class = "NSTextFieldCell"; title = "Text insets:"; ObjectID = "Ee6-Cj-SWW"; */ -"Ee6-Cj-SWW.title" = "Text insets:"; - -/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[0] = "Reveal"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[0]" = "Reveal"; - -/* Class = "NSSegmentedCell"; GHX-3h-1HI.ibShadowedLabels[1] = "Reload"; ObjectID = "GHX-3h-1HI"; */ -"GHX-3h-1HI.ibShadowedLabels[1]" = "Reload"; - -/* Class = "NSTextFieldCell"; title = "Line spacing:"; ObjectID = "InD-Fc-CTS"; */ -"InD-Fc-CTS.title" = "Line spacing:"; - -/* Class = "NSButtonCell"; title = "Auto-increment numbering in ordered lists"; ObjectID = "UPm-G1-Bc6"; */ -"UPm-G1-Bc6.title" = "Auto-increment numbering in ordered lists"; - -/* Class = "NSButtonCell"; title = "Insert spaces instead of tabs"; ObjectID = "XSN-mi-gbk"; */ -"XSN-mi-gbk.title" = "Insert spaces instead of tabs"; - -/* Class = "NSButtonCell"; title = "Limit editor width to"; ObjectID = "bhL-NA-9No"; */ -"bhL-NA-9No.title" = "Limit editor width to"; - -/* Class = "NSMenuItem"; title = "* (Asterisk)"; ObjectID = "bnJ-BQ-mHV"; */ -"bnJ-BQ-mHV.title" = "* (Asterisk)"; - -/* Class = "NSTextFieldCell"; title = "Base font:"; ObjectID = "eXF-SL-hBq"; */ -"eXF-SL-hBq.title" = "Base font:"; - -/* Class = "NSTextFieldCell"; title = "×"; ObjectID = "g5w-Qw-Khw"; */ -"g5w-Qw-Khw.title" = "×"; - -/* Class = "NSButtonCell"; title = "Scroll past end"; ObjectID = "nBR-LK-G9a"; */ -"nBR-LK-G9a.title" = "Scroll past end"; - -/* Class = "NSButtonCell"; title = "Auto-complete matching characters"; ObjectID = "o4K-iG-sGA"; */ -"o4K-iG-sGA.title" = "Auto-complete matching characters"; - -/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "vA9-IT-8Z7"; */ -"vA9-IT-8Z7.title" = "Theme:"; - -/* Class = "NSButtonCell"; title = "Automatically insert line prefix for the current block"; ObjectID = "zGb-kg-2CJ"; */ -"zGb-kg-2CJ.title" = "Automatically insert line prefix for the current block"; - -/* Class = "NSMenuItem"; title = "+ (Plus sign)"; ObjectID = "zX4-JY-wTT"; */ -"zX4-JY-wTT.title" = "+ (Plus sign)"; diff --git a/MacDown/Localization/nl-NL.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/nl-NL.lproj/MPExportPanelAccessoryViewController.strings index 6b790377..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/nl-NL.lproj/MPExportPanelAccessoryViewController.strings @@ -1,6 +0,0 @@ - -/* Class = "NSButtonCell"; title = "Include syntax highlighting"; ObjectID = "1f7-JB-VR1"; */ -"1f7-JB-VR1.title" = "Include syntax highlighting"; - -/* Class = "NSButtonCell"; title = "Include styles"; ObjectID = "fod-Ff-UTI"; */ -"fod-Ff-UTI.title" = "Include styles"; diff --git a/MacDown/Localization/nl-NL.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/nl-NL.lproj/MPGeneralPreferencesViewController.strings index 46298ad4..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPGeneralPreferencesViewController.strings +++ b/MacDown/Localization/nl-NL.lproj/MPGeneralPreferencesViewController.strings @@ -1,27 +0,0 @@ - -/* Class = "NSButtonCell"; title = "Sync preview scrollbar when editor scrolls"; ObjectID = "2Uj-Sx-FjV"; */ -"2Uj-Sx-FjV.title" = "Sync preview scrollbar when editor scrolls"; - -/* Class = "NSBox"; title = "Behavior"; ObjectID = "Nma-PL-ZvX"; */ -"Nma-PL-ZvX.title" = "Behavior"; - -/* Class = "NSButtonCell"; title = "Put editor on the right"; ObjectID = "bUn-PQ-5Ez"; */ -"bUn-PQ-5Ez.title" = "Put editor on the right"; - -/* Class = "NSBox"; title = "Update"; ObjectID = "eLn-fW-Agu"; */ -"eLn-fW-Agu.title" = "Update"; - -/* Class = "NSButtonCell"; title = "Automatically create files for link targets"; ObjectID = "hpF-zP-3cM"; */ -"hpF-zP-3cM.title" = "Automatically create files for link targets"; - -/* Class = "NSButtonCell"; title = "Ensure open document on launch"; ObjectID = "l9N-wk-WRY"; */ -"l9N-wk-WRY.title" = "Ensure open document on launch"; - -/* Class = "NSButtonCell"; title = "Update preview automatically as you type"; ObjectID = "npz-xj-plX"; */ -"npz-xj-plX.title" = "Update preview automatically as you type"; - -/* Class = "NSButtonCell"; title = "Show word count"; ObjectID = "oeW-bF-ybW"; */ -"oeW-bF-ybW.title" = "Show word count"; - -/* Class = "NSButtonCell"; title = "Include pre-releases"; ObjectID = "vbz-fv-8BX"; */ -"vbz-fv-8BX.title" = "Include pre-releases"; diff --git a/MacDown/Localization/nl-NL.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/nl-NL.lproj/MPHtmlPreferencesViewController.strings index adb2c73b..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPHtmlPreferencesViewController.strings +++ b/MacDown/Localization/nl-NL.lproj/MPHtmlPreferencesViewController.strings @@ -1,57 +0,0 @@ - -/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[0] = "Reveal"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[0]" = "Reveal"; - -/* Class = "NSSegmentedCell"; 0rH-I9-Dxr.ibShadowedLabels[1] = "Reload"; ObjectID = "0rH-I9-Dxr"; */ -"0rH-I9-Dxr.ibShadowedLabels[1]" = "Reload"; - -/* Class = "NSTextFieldCell"; title = "Math support requires Internet connection."; ObjectID = "5Ch-dG-juL"; */ -"5Ch-dG-juL.title" = "Math support requires Internet connection."; - -/* Class = "NSButtonCell"; title = "TeX-like math syntax"; ObjectID = "6vg-3f-KWk"; */ -"6vg-3f-KWk.title" = "TeX-like math syntax"; - -/* Class = "NSTextFieldCell"; title = "CSS:"; ObjectID = "9I3-I7-HLu"; */ -"9I3-I7-HLu.title" = "CSS:"; - -/* Class = "NSButtonCell"; title = "Syntax highlighted code block"; ObjectID = "BuQ-02-oQB"; */ -"BuQ-02-oQB.title" = "Syntax highlighted code block"; - -/* Class = "NSButtonCell"; title = "Use dollar sign ($) as inline delimiter"; ObjectID = "GF9-Dm-IoB"; */ -"GF9-Dm-IoB.title" = "Use dollar sign ($) as inline delimiter"; - -/* Class = "NSMenuItem"; title = "Custom"; ObjectID = "Jmq-wq-Dux"; */ -"Jmq-wq-Dux.title" = "Custom"; - -/* Class = "NSButtonCell"; title = "Render newline literally"; ObjectID = "Sty-qG-J6K"; */ -"Sty-qG-J6K.title" = "Render newline literally"; - -/* Class = "NSButtonCell"; title = "Show line numbers"; ObjectID = "WZa-V6-vvf"; */ -"WZa-V6-vvf.title" = "Show line numbers"; - -/* Class = "NSTextFieldCell"; title = "Theme:"; ObjectID = "a6o-qD-AIp"; */ -"a6o-qD-AIp.title" = "Theme:"; - -/* Class = "NSButtonCell"; title = "Scale preview based on editor font size"; ObjectID = "aWw-Wb-pBl"; */ -"aWw-Wb-pBl.title" = "Scale preview based on editor font size"; - -/* Class = "NSTextFieldCell"; title = "Default path:"; ObjectID = "e1A-Mm-svq"; */ -"e1A-Mm-svq.title" = "Default path:"; - -/* Class = "NSButtonCell"; title = "Detect Jekyll front-matter"; ObjectID = "iXi-Pv-mFl"; */ -"iXi-Pv-mFl.title" = "Detect Jekyll front-matter"; - -/* Class = "NSButtonCell"; title = "Task list syntax"; ObjectID = "kBf-iW-HlH"; */ -"kBf-iW-HlH.title" = "Task list syntax"; - -/* Class = "NSButtonCell"; title = "Detect table of contents token"; ObjectID = "nvS-dZ-eHT"; */ -"nvS-dZ-eHT.title" = "Detect table of contents token"; - -/* Class = "NSMenuItem"; title = "None"; ObjectID = "pWW-vM-8JK"; */ -"pWW-vM-8JK.title" = "None"; - -/* Class = "NSMenuItem"; title = "Language name"; ObjectID = "qFd-cs-OtZ"; */ -"qFd-cs-OtZ.title" = "Language name"; - -/* Class = "NSTextFieldCell"; title = "Accessory:"; ObjectID = "wNy-ka-IZm"; */ -"wNy-ka-IZm.title" = "Accessory:"; diff --git a/MacDown/Localization/nl-NL.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/nl-NL.lproj/MPMarkdownPreferencesViewController.strings index 0236c34b..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPMarkdownPreferencesViewController.strings +++ b/MacDown/Localization/nl-NL.lproj/MPMarkdownPreferencesViewController.strings @@ -1,42 +0,0 @@ - -/* Class = "NSButtonCell"; title = "Footnote"; ObjectID = "0yU-vT-72e"; */ -"0yU-vT-72e.title" = "Footnote"; - -/* Class = "NSButtonCell"; title = "Quote"; ObjectID = "2lB-hq-5eX"; */ -"2lB-hq-5eX.title" = "Quote"; - -/* Class = "NSButtonCell"; title = "Highlight"; ObjectID = "8kI-gm-5Lo"; */ -"8kI-gm-5Lo.title" = "Highlight"; - -/* Class = "NSButtonCell"; title = "Intra-word emphasis"; ObjectID = "D7l-nP-P0y"; */ -"D7l-nP-P0y.title" = "Intra-word emphasis"; - -/* Class = "NSButtonCell"; title = "Fenced code block"; ObjectID = "ELg-sx-vIf"; */ -"ELg-sx-vIf.title" = "Fenced code block"; - -/* Class = "NSButtonCell"; title = "Underline"; ObjectID = "Gdr-Ro-ZnW"; */ -"Gdr-Ro-ZnW.title" = "Underline"; - -/* Class = "NSButtonCell"; title = "Strikethrough"; ObjectID = "RjP-zE-c6b"; */ -"RjP-zE-c6b.title" = "Strikethrough"; - -/* Class = "NSButtonCell"; title = "Autolink"; ObjectID = "Roe-rh-8f9"; */ -"Roe-rh-8f9.title" = "Autolink"; - -/* Class = "NSBox"; title = "Block formatting"; ObjectID = "TXy-fD-S4Y"; */ -"TXy-fD-S4Y.title" = "Block formatting"; - -/* Class = "NSBox"; title = "Inline formatting"; ObjectID = "Ycc-Px-jbu"; */ -"Ycc-Px-jbu.title" = "Inline formatting"; - -/* Class = "NSButtonCell"; title = "Smartypants"; ObjectID = "aSK-nR-xMr"; */ -"aSK-nR-xMr.title" = "Smartypants"; - -/* Class = "NSButtonCell"; title = "Superscript"; ObjectID = "k2n-VN-cKT"; */ -"k2n-VN-cKT.title" = "Superscript"; - -/* Class = "NSBox"; title = "Document formatting"; ObjectID = "x36-52-U0p"; */ -"x36-52-U0p.title" = "Document formatting"; - -/* Class = "NSButtonCell"; title = "Table"; ObjectID = "z8g-3M-hbc"; */ -"z8g-3M-hbc.title" = "Table"; diff --git a/MacDown/Localization/nl-NL.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/nl-NL.lproj/MPTerminalPreferencesViewController.strings index ec03cf8c..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/nl-NL.lproj/MPTerminalPreferencesViewController.strings @@ -1,18 +0,0 @@ - -/* Class = "NSTextFieldCell"; title = ""; ObjectID = "0H2-qZ-OjP"; */ -"0H2-qZ-OjP.title" = ""; - -/* Class = "NSTextFieldCell"; title = "Location:"; ObjectID = "EJe-0p-X4m"; */ -"EJe-0p-X4m.title" = "Location:"; - -/* Class = "NSTextFieldCell"; title = "●"; ObjectID = "Me9-q2-eWj"; */ -"Me9-q2-eWj.title" = "●"; - -/* Class = "NSTextFieldCell"; title = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; ObjectID = "W5n-x2-ygz"; */ -"W5n-x2-ygz.title" = "By activating shell support you can use the macdown utility to open MacDown and documents from a shell."; - -/* Class = "NSButtonCell"; title = "Install"; ObjectID = "XiC-FP-TWZ"; */ -"XiC-FP-TWZ.title" = "Install"; - -/* Class = "NSTextFieldCell"; title = "Shell support not installed"; ObjectID = "g7m-Fr-pUo"; */ -"g7m-Fr-pUo.title" = "Shell support not installed"; diff --git a/MacDown/Localization/nl-NL.lproj/MainMenu.strings b/MacDown/Localization/nl-NL.lproj/MainMenu.strings index aaee93f1..e69de29b 100644 --- a/MacDown/Localization/nl-NL.lproj/MainMenu.strings +++ b/MacDown/Localization/nl-NL.lproj/MainMenu.strings @@ -1,351 +0,0 @@ - -/* Class = "NSMenuItem"; title = "Header 2"; ObjectID = "0WP-T5-QxP"; */ -"0WP-T5-QxP.title" = "Header 2"; - -/* Class = "NSMenuItem"; title = "MacDown"; ObjectID = "1Xt-HY-uBw"; */ -"1Xt-HY-uBw.title" = "MacDown"; - -/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ -"1b7-l0-nxx.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Enter Full Screen"; ObjectID = "1gz-YB-DZE"; */ -"1gz-YB-DZE.title" = "Enter Full Screen"; - -/* Class = "NSMenuItem"; title = "Highlight"; ObjectID = "2Os-ij-Aup"; */ -"2Os-ij-Aup.title" = "Highlight"; - -/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ -"2oI-Rn-ZJC.title" = "Transformations"; - -/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ -"3IN-sU-3Bg.title" = "Spelling"; - -/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ -"3rS-ZA-NoH.title" = "Speech"; - -/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ -"4EN-yA-p0u.title" = "Find"; - -/* Class = "NSMenuItem"; title = "Emphasize"; ObjectID = "4UH-k2-fgy"; */ -"4UH-k2-fgy.title" = "Emphasize"; - -/* Class = "NSMenuItem"; title = "Quit MacDown"; ObjectID = "4sb-4s-VLi"; */ -"4sb-4s-VLi.title" = "Quit MacDown"; - -/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ -"5QF-Oa-p0T.title" = "Edit"; - -/* Class = "NSMenuItem"; title = "About MacDown"; ObjectID = "5kV-Vb-QxS"; */ -"5kV-Vb-QxS.title" = "About MacDown"; - -/* Class = "NSMenuItem"; title = "Export"; ObjectID = "5mp-ev-1el"; */ -"5mp-ev-1el.title" = "Export"; - -/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ -"6dh-zS-Vam.title" = "Redo"; - -/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ -"78Y-hA-62v.title" = "Correct Spelling Automatically"; - -/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "8xL-1V-VPX"; */ -"8xL-1V-VPX.title" = "Check for Updates…"; - -/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "98U-cK-P7J"; */ -"98U-cK-P7J.title" = "Underline"; - -/* Class = "NSMenuItem"; title = "Strikethrough"; ObjectID = "9CN-Qi-Fln"; */ -"9CN-Qi-Fln.title" = "Strikethrough"; - -/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ -"9ic-FL-obx.title" = "Substitutions"; - -/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ -"9yt-4B-nSM.title" = "Smart Copy/Paste"; - -/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ -"AYu-sK-qS6.title" = "Main Menu"; - -/* Class = "NSMenuItem"; title = "Header 4"; ObjectID = "B98-b8-che"; */ -"B98-b8-che.title" = "Header 4"; - -/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ -"BOF-NM-1cW.title" = "Preferences…"; - -/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ -"Bw7-FT-i3A.title" = "Save As…"; - -/* Class = "NSMenuItem"; title = "Header 6"; ObjectID = "D4C-PE-qJi"; */ -"D4C-PE-qJi.title" = "Header 6"; - -/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ -"DVo-aG-piG.title" = "Close"; - -/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ -"Dv1-io-Yv7.title" = "Spelling and Grammar"; - -/* Class = "NSMenu"; title = "View"; ObjectID = "EQZ-Zp-VNE"; */ -"EQZ-Zp-VNE.title" = "View"; - -/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ -"F2S-fz-NVQ.title" = "Help"; - -/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ -"FeM-D8-WVr.title" = "Substitutions"; - -/* Class = "NSMenuItem"; title = "Link"; ObjectID = "GIg-Wo-P8m"; */ -"GIg-Wo-P8m.title" = "Link"; - -/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ -"HFQ-gK-NFA.title" = "Text Replacement"; - -/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ -"HFo-cy-zxI.title" = "Show Spelling and Grammar"; - -/* Class = "NSMenu"; title = "Convert To"; ObjectID = "I8Y-e8-XDx"; */ -"I8Y-e8-XDx.title" = "Convert To"; - -/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ -"IAo-SY-fd9.title" = "Open…"; - -/* Class = "NSMenuItem"; title = "Shift Left"; ObjectID = "Jzs-tR-jkL"; */ -"Jzs-tR-jkL.title" = "Shift Left"; - -/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ -"KaW-ft-85H.title" = "Revert to Saved"; - -/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ -"Kd2-mp-pUS.title" = "Show All"; - -/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ -"LE2-aR-0XJ.title" = "Bring All to Front"; - -/* Class = "NSMenu"; title = "Format"; ObjectID = "N43-55-MPb"; */ -"N43-55-MPb.title" = "Format"; - -/* Class = "NSMenuItem"; title = "Header 1"; ObjectID = "NLm-rz-EyT"; */ -"NLm-rz-EyT.title" = "Header 1"; - -/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ -"NMo-om-nkz.title" = "Services"; - -/* Class = "NSMenuItem"; title = "Left 3:1 Right"; ObjectID = "NZX-Ev-sWt"; */ -"NZX-Ev-sWt.title" = "Left 3:1 Right"; - -/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ -"OY7-WF-poV.title" = "Minimize"; - -/* Class = "NSMenuItem"; title = "Hide MacDown"; ObjectID = "Olw-nP-bQN"; */ -"Olw-nP-bQN.title" = "Hide MacDown"; - -/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ -"OwM-mh-QMV.title" = "Find Previous"; - -/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ -"Oyz-dy-DGm.title" = "Stop Speaking"; - -/* Class = "NSMenu"; title = "Plug-ins"; ObjectID = "Ppl-BS-KtG"; */ -"Ppl-BS-KtG.title" = "Plug-ins"; - -/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ -"R4o-n2-Eq4.title" = "Zoom"; - -/* Class = "NSMenuItem"; title = "Strong"; ObjectID = "Rb9-MG-IjX"; */ -"Rb9-MG-IjX.title" = "Strong"; - -/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ -"Ruw-6m-B2m.title" = "Select All"; - -/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ -"S0p-oC-mLd.title" = "Jump to Selection"; - -/* Class = "NSMenu"; title = "Export"; ObjectID = "SJM-Pp-ywb"; */ -"SJM-Pp-ywb.title" = "Export"; - -/* Class = "NSMenuItem"; title = "Hide Preview Pane"; ObjectID = "T74-vt-YUA"; */ -"T74-vt-YUA.title" = "Hide Preview Pane"; - -/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ -"Td7-aD-5lo.title" = "Window"; - -/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ -"UEZ-Bs-lqG.title" = "Capitalize"; - -/* Class = "NSMenuItem"; title = "Left 1:3 Right"; ObjectID = "VW7-VH-9yl"; */ -"VW7-VH-9yl.title" = "Left 1:3 Right"; - -/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ -"Vdr-fp-XzO.title" = "Hide Others"; - -/* Class = "NSMenuItem"; title = "Render Markdown"; ObjectID = "Vh1-jg-bbV"; */ -"Vh1-jg-bbV.title" = "Render Markdown"; - -/* Class = "NSMenuItem"; title = "Image"; ObjectID = "VkR-aw-5AU"; */ -"VkR-aw-5AU.title" = "Image"; - -/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ -"W48-6f-4Dl.title" = "Edit"; - -/* Class = "NSMenuItem"; title = "New"; ObjectID = "Was-JA-tGl"; */ -"Was-JA-tGl.title" = "New"; - -/* Class = "NSMenuItem"; title = "PDF…"; ObjectID = "XFN-MJ-RrW"; */ -"XFN-MJ-RrW.title" = "PDF…"; - -/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ -"Xz5-n4-O0W.title" = "Find…"; - -/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ -"YEy-JH-Tfz.title" = "Find and Replace…"; - -/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ -"Ynk-f8-cLZ.title" = "Start Speaking"; - -/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ -"aTl-1u-JFS.title" = "Print…"; - -/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ -"aUF-d1-5bR.title" = "Window"; - -/* Class = "NSMenuItem"; title = "Plug-ins"; ObjectID = "bMu-UN-Yfx"; */ -"bMu-UN-Yfx.title" = "Plug-ins"; - -/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ -"bib-Uj-vzu.title" = "File"; - -/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ -"buJ-ug-pKt.title" = "Use Selection for Find"; - -/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ -"c8a-y6-VQd.title" = "Transformations"; - -/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ -"d9M-CD-aMd.title" = "Make Lower Case"; - -/* Class = "NSMenuItem"; title = "HTML…"; ObjectID = "dGm-Yl-i3Z"; */ -"dGm-Yl-i3Z.title" = "HTML…"; - -/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ -"dMs-cI-mzQ.title" = "File"; - -/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ -"dRJ-4n-Yzg.title" = "Undo"; - -/* Class = "NSMenuItem"; title = "Convert To"; ObjectID = "e8h-vX-NQb"; */ -"e8h-vX-NQb.title" = "Convert To"; - -/* Class = "NSMenuItem"; title = "Show toolbar"; ObjectID = "fKI-yk-0lv"; */ -"fKI-yk-0lv.title" = "Show toolbar"; - -/* Class = "NSMenuItem"; title = "Shift Right"; ObjectID = "g9Y-GM-gdh"; */ -"g9Y-GM-gdh.title" = "Shift Right"; - -/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ -"gVA-U4-sdL.title" = "Paste"; - -/* Class = "NSMenuItem"; title = "Left 1:1 Right"; ObjectID = "hOV-YQ-vzy"; */ -"hOV-YQ-vzy.title" = "Left 1:1 Right"; - -/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ -"hQb-2v-fYv.title" = "Smart Quotes"; - -/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ -"hz2-CU-CR7.title" = "Check Document Now"; - -/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ -"hz9-B4-Xy5.title" = "Services"; - -/* Class = "NSMenuItem"; title = "Comment"; ObjectID = "i8c-gf-w29"; */ -"i8c-gf-w29.title" = "Comment"; - -/* Class = "NSMenuItem"; title = "Inline Code"; ObjectID = "iRQ-Q6-N4K"; */ -"iRQ-Q6-N4K.title" = "Inline Code"; - -/* Class = "NSMenuItem"; title = "Unordered List"; ObjectID = "jn0-Kb-yH6"; */ -"jn0-Kb-yH6.title" = "Unordered List"; - -/* Class = "NSMenuItem"; title = "Ordered List"; ObjectID = "jn0-Kb-yH7"; */ -"jn0-Kb-yH7.title" = "Ordered List"; - -/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ -"jxT-CU-nIS.title" = "Format"; - -/* Class = "NSMenuItem"; title = "Header 3"; ObjectID = "kSO-QG-dHa"; */ -"kSO-QG-dHa.title" = "Header 3"; - -/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ -"mK6-2p-4JG.title" = "Check Grammar With Spelling"; - -/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ -"oas-Oc-fiZ.title" = "Open Recent"; - -/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ -"pa3-QI-u2k.title" = "Delete"; - -/* Class = "NSMenuItem"; title = "Save…"; ObjectID = "pxx-59-PXV"; */ -"pxx-59-PXV.title" = "Save…"; - -/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ -"q09-fT-Sye.title" = "Find Next"; - -/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ -"qIS-W8-SiK.title" = "Page Setup…"; - -/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ -"rbD-Rh-wIN.title" = "Check Spelling While Typing"; - -/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ -"rgM-f4-ycn.title" = "Smart Dashes"; - -/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ -"tRr-pd-1PS.title" = "Data Detectors"; - -/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ -"tXI-mr-wws.title" = "Open Recent"; - -/* Class = "NSMenuItem"; title = "Copy HTML"; ObjectID = "ts7-v5-Htm"; */ -"ts7-v5-Htm.title" = "Copy HTML"; - -/* Class = "NSMenuItem"; title = "Blockquote"; ObjectID = "twd-Mb-qNx"; */ -"twd-Mb-qNx.title" = "Blockquote"; - -/* Class = "NSMenu"; title = "MacDown"; ObjectID = "uQy-DD-JDr"; */ -"uQy-DD-JDr.title" = "MacDown"; - -/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ -"uRl-iY-unG.title" = "Cut"; - -/* Class = "NSMenuItem"; title = "MacDown Help"; ObjectID = "ugx-EN-xKu"; */ -"ugx-EN-xKu.title" = "MacDown Help"; - -/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ -"vNY-rz-j42.title" = "Clear Menu"; - -/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ -"vmV-6d-7jI.title" = "Make Upper Case"; - -/* Class = "NSMenuItem"; title = "Hide Editor Pane"; ObjectID = "wHk-AQ-iOQ"; */ -"wHk-AQ-iOQ.title" = "Hide Editor Pane"; - -/* Class = "NSMenuItem"; title = "Header 5"; ObjectID = "wlq-BA-PKH"; */ -"wlq-BA-PKH.title" = "Header 5"; - -/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ -"wpr-3q-Mcd.title" = "Help"; - -/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ -"x3v-GG-iWU.title" = "Copy"; - -/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "xN5-GU-ASF"; */ -"xN5-GU-ASF.title" = "Paragraph"; - -/* Class = "NSMenuItem"; title = "View"; ObjectID = "xSb-2f-W1r"; */ -"xSb-2f-W1r.title" = "View"; - -/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ -"xrE-MZ-jX0.title" = "Speech"; - -/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ -"z6F-FW-3nz.title" = "Show Substitutions"; - -/* Class = "NSMenuItem"; title = "New Paragraph"; ObjectID = "zHE-JL-8eu"; */ -"zHE-JL-8eu.title" = "New Paragraph"; diff --git a/MacDown/Localization/pt-BR.lproj/Localizable.strings b/MacDown/Localization/pt-BR.lproj/Localizable.strings index 9eb5b4c9bba6887ec2c5cc5864ff7267febae22f..76c3a1d6a540d48e9362843ebed278bb1ef87774 100644 GIT binary patch literal 4088 zcmc&%+fExX5S?fKpl=pZCE%f`uh3RSB-|7z%B6j&R4vI8qJ|AkHlXsiRUc3*^%vTn zGsd!=Y?hEvRjWNx<#U~Y(KfS3Aa@DRtB5s%YyXKKYj+IYq)!+VB4U>w?@r}vUF>4IXTWU!0n*^-Zt z`CQ%xHnudLPA>y}+Nu*}jUgk!mzCYan0oV@qc526!A5>>A%0fway}uVMtBnFPn(=C zc0tMHnPFtTo#ZI9?L-k~@cqlSC}F5ls|feazNs&q;Rtzd0q zy<(IYwKjekSE7z1X0WYsVGOH?HR;S@U*BSC=&Q%qh*|lthkb3vy1Wn7`S5rdZoqt8#F#N)zwg!{X#p(R_jL;`~_5kNfI#`kvL=dy;fV3;o!{ z{#`uQ1I#!Vg)n9|KUu>#YjeP5-vMaMRf8N0SF^sdeI=_b%BjAR9@5wFxi}XK)rM{Pzci}Tg%kkKL=lmT@ z@ZJsStX;9+*0fI>RKl>{t|JCc?vWg!CdM^l4>hzd$Dr3yH*1Kn-|ywb4vXRS7=9Yc zXCPvLUY`Z>r)NUk7VXAbd!tyg(q`3~;Q6LpQ!H! z7RPh55EN&?A{onlh(XrcdGhucoaATy_GQEsdOn|A=h53jq}*Bl8{)G z-nKi%_77^h{XSTHp^g;_12! zQ^h@ET8j5i1)7bbJ*K+_yRg4;`kMi5VP_?B&+%(dGyX(pPc}q0V@=ehK%@6WjBsk{ z*LH$R*uWZ|vzxeMzy3+t$$ A1^@s6 literal 2871 zcmbtWOKu}K5Z&t(1p@=vMj#{GOcIPBdu$K<5%fuxMyZ>U2)9UuWXn-jzD9s#G00+& z0CNi6#3#vPv0Ikpj~ryzpJMS<)vH%^bVwbi{glE)O%(+l3Pp!UjlKP2HR7@e2Yd7b z?d^9scgw%*!QT5u^KX`Dcbi6K>UoCU#vfP zzy8l}{jBo+U!lAXVDrZ6iWk#9Ro?SBv7*i9;r{oKQoNPiEAWGsf78r*zx+B^#ddDj zQrmHAgiM%B(Tq*SyOhwATnFnUY1QKnTCC&y80#O&H?pP4iBUNYlU4m&Rgq1EircLT zj&q9>sLoWIiG3T!Q)QInLO`C%Q^MG{<1qjz2_Z!W`jn&t3LYtY1`<&Ui#iBAh3Nq# zSCNGs2DJ)GM$0dNSyiXEW|lldVQN2sSaeaZr86r=hl5gbLI3%$EpDJN)`yklH*E>B5;Fk(pkzaN(j7d86~_z9lJr*1n{XC){7q> zTRev|ZETDJcVYZ^Xh6k>Iu!8eMHkUDF-0PrHt9)CJ>6-88m7UX1opAwUMid3m;abd zvwz|tshI2q>3CN~t-^Sf!`0iSlt-|KZUS%{zMC(^Zu+9Uhohi zjP0e`A}~faH=GH3s09VRnWp1Vf-3EAx;T!votJMc zU@rp@`fQ_kB*>HE_m#t#tR~;;B}u}-RN2@{*4hYJnFyj|<*TdfIg+QHQ^eXZ_E9~G zvpH?0m;i_yU4tD8AfVuJDh-VM&BbF6`qy864P{Yh^i7M?&)41K7nZge7d&?yH>T=Q GTI643yw5KH diff --git a/MacDown/Localization/pt-BR.lproj/MPDocument.strings b/MacDown/Localization/pt-BR.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/pt-BR.lproj/MPDocument.strings +++ b/MacDown/Localization/pt-BR.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPEditorPreferencesViewController.strings index fe88393c6cacc8cc5282ca6ff2d4b1cabd7f9a07..d266a06338e43162256d4056b96384d50cc7ca25 100644 GIT binary patch literal 5926 zcmc(j-BKGz5QY2NPms%vQ$P!z&wpFdiC$S&+KD2GywLNRt zmGy1aT0FJw06G1(`Tu*Q`i%GKH3n~OGSXu#u@mO&+A;ri?YmU|N2}QpBXuO!?fKxX zuWX623hzFreZwk;=^Kyii9O&sCh>S={fC3Ow!*q~+5`RIh1Ds~ArvDRSx3@z(HyE>!dOMU$( zy<4p8dUqIc#wRg2XFs!Ag`L`?-Gav#IR;}AaRwdD1-i6YUph*!Bp^EDxdqAwZ8waF z=~2DK^?R7mZ^!-&GCg`nVU7&-O&ITlG3`tz;1|ZCec58J4)d=Eo=#Gfw=J>4`ZF-0 zxzEF%^muO4`=XG`54Hh|NA?ZvE87IGv!7YxoZXg)bLm>_1}&=CU}lYCP!`ckwJAcq zgzVKstV_%$`?+8p+5FwMG7q{}0hxSm1DiR>;fqPc@h!8SY+kGO(ZF%Z`pfL)G(M)7 zP=&K5SU*qhM)-_4a}Bn7h$>BXa5aZ8CJ{%t$ga6Z%FZ8$&wXQC0ap(z?Sf5S(;!N? zSEyfQ{e-a&`y?-XN2|!nm?}4^V8>+lmt{-toR#;b@0h+=`3+qI{IzWUUjv&gMaQ@)P2c z=L5zM(IB(k#3ses8giTPw{45G3;epZC!C~yTE!&dEDm)NA7Vx9>A4x~L4BQL+W%3F z8)-}`;-_r1R1Po$9-ZAfeRPT+7e>k&d#*^igdJ7T=mmD=o;hUVwnUtXmVvr`Q&~Z79<0lp4iz$_w|vGC$0Xv2JyTIUllN!)EdGV$v}B%= z;V7S@En#26E3Z`a=og}H*gg?dcxCs8?DzW|>X<|v^=i7N)~}_SIP3Sn$A6?+PV(d? zk?;~kuS5G1WS2QyF^M=XU#keiF1$Afr=)y(JfmL2hxXCvYjmmDEWLG3oEA*&GU7Sy zC376G6IDi)jrZ(V^5fs&(=+!SMs*e_lHPqz##S4*=9olTeMWO~WjcN0iXxj<_*gv6 z=6Gsjjbim<@g#kQJZa}VpH?Q&EX~&RF+k^z@(i80UWKUNEQ|!}NU26!4Vl$4)y8hh zT^8|U5^;}NN!Pvs=P++n930Of%0-81a>-q^SM{Pw)+-#ZSv|+P+ZH-Rza1FZw3oDN zod4Av12Ks>13N*7D!l7F*Xe&|f5D2^TFUV>>gWIPTqxr|)3C8frlIpj`Lbv8$}F{> zSMhzuRkO-IlJG1q9#*Qo0`EDsr-7>$Y*j$FMxNmuXEqa)h%+`xSI?eq*P`N5sJeW- z_SA`|8-Y$h=(-n0qyNUH7?Yi8Z+$&w!@46-+*Xd|jOtfA-VJ(5UU|N9Xjx?uyFXFO zodipqrPV#ke2(3iM4a9ATN*pB@<-QPdROfxt?R3)<>;Ra2|6#ya#-;4jPea{rH9~cLg_QDRRb{FSWzY3clSx9+L;0)nhx&l8 zNqOcqF|P)<$FN(mIdZ;@9K$h*ats&wplZiaRO;tX*!(SDhD);Y>~mVrC5!f_Y`ys< uGtUsY+RQDxD0??|O?Lbg4mY^()LrTxpK)7_NyM3S9b$KLy7?Tvnfn)^?u%Cd literal 2981 zcmbVO!BQhP5WVviDo%uyU?B^;B$b10u(2@&umfyTd(g}@GlCh(NE(~vlv7SQnQ6!2ALN zlG`7yX?IMI_YWP(I^dCXP*cXq1oII|CW;rpl_ast59F={A|C&eM8gdu7XR_HB!XGk zjJ^D-V-RKEK!L!Ea#FH(%tfh*=BfB91$euIQ+gWHK{s)Db-=^x$YLUuVTfg915{)0IvEowJpJ-_0Qo+8 zpm9voVb?*{0S~g3V?&wR*w}b2-ht4i!uG(-&H!PCfJlhE#-YJEmV#(D4M$_|azb}5 zXb;XDmpb5a>0$qc;R*+D>ROHeV&19+k}!2w@+tnsxnTK}VUfdbEEShMz`506bSSO^ z*rlBtI=Z}cU@qC9tr4WQbMUO}-r*JfCZk)2{S6+CGL+^Fk|B#A z*FV4cXcc=7Q()Eve6iQp9G^PSlxHq|sSURAWkLQ6r!B`Rm&}go|K_yyvEpNJ$F2XIm?^?+a@5}AXKQo}aSLX6ToFfk zF+KNiUBL>LFoX=pz4;sZIOfV!RRnE^-TWRwl*NsI2C*aPd#b-*K3WvYspqb^I_ zBdAN4*sg()&vCOEREv&He3&p7|`|^Ee1ar^_ML;R10HM_Zvu%hNyAhx1%3P@D0I3rqh~XEl+7Gi9q_>HwXm4YQ#Xp0 z%yV4o_;SFF5TJ?nIUOF+-X3o6s;zavLpzr_OL4Z?zVYsj5Q7JgaO_~Fi z2{jdGR=F z+S;T2F@68jJ4dGucyz{4y#94(xzD{N&p%a55Z$3#-V+7a{2pgf5tHEyuf$J5*Nbu) zTR-qOz(X&hw<+E33>>dI;PI-g2aO`MGyBT3P;%kO&#ym=h4yDky9dKbYm)8PWbHIx e@~nHfdP@f%=xjWGCb*86e|m{Q4zFI@YTn}M`TgR1N7(Bvx$iof;O^j5@zS#J2`v5 zwbYQSfs6vBELT0Yr>Pd|D_6!k>x5&A$8gf+JX6dzXqA7ACq&5=6>6$0N=DZUo&)|p zPxE}+`V&goZKjQmRE7A*8rD7A+NmR76O#B^Yp(XQqM?=?zCSsdZ|S_c*DGJF1T|q^ zK%THjTV=MX%FNqhlEak$5z1g>8Kz%2?6`pl0wZ|%T4@QTl3c~%ljAoIcDlU{!;CVA G{pSapj8okJ literal 267 zcmb7;KMTSz5J&fXiX&qomQD`Er4^wL3jW(`dTmpV1ez<@Z*L-^A}$WMy!-KZX#yqH z-opyy?pRFB&X!0db6~@SkylpJ)FAlTa(#o|bUlS*W4kchUkB7&t>ZFlmug$6%OMMo zBo!ZE@zBYa&x|l)O&TGZO*Es-g-HJi;+fEYHMFi#n^v7q)wAIZel(zGLoPUkxC1## BQQ!ao diff --git a/MacDown/Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPGeneralPreferencesViewController.strings index 5681f58a56cf4867a75af59b34c2a2dfbd31b412..ca2425282a73143361fbc1619152db25b00e7388 100644 GIT binary patch literal 2742 zcmb`JU2hUW6o$`rf5oPkO|Xf^L}R?5*qSD7t&)m*2MY)mc9GA*-}R#LPpHp3v#YR7 zx0n#J!+e~XbIyC-b7p@3I<_N=tY!mi+Js+ZulWw`%IbDvGn?{DEkUA#%z%|wtWT}a zH()N8uiFx-nDNNQ%+HbN*n;td*)eBmcMC0J<`&jtHKEtBwmU0z^XsycOxHVheM2rr z+Mb5to_%!j#%ir4%c1QNz%_hicq;J#5{JgQV_5e%w6@zORucAJAq=*S|dDF*} z9%CQLhtO?-ZUU~?_MY~+oq~zqk)s=u2%}pAg#lljp}LJp;xH8x#2s;~xg$C$(SL}O zH*itWnsR2jw;j81-gd2lw^b0D6}$~eguShzZ=DzWk8{<dM*nHg(SiV)zI2^x+7ZE zm`z`XSe!5`zRE&nRG*AXogX7NryTU-+#mVac6-!L95M+q@@t=2c8YDveBmq`M*J(o zlAMA4hK4|BV9ALK0yNFVU`gq^wgW3I$oP{-zK*s%)wjb0_I5@;)oqIa*^h%(Be)FSQEV z^tRKjF`<3zCYXbT*ww|(ioM{KSY%g7B8<#Gi+qieML#)JC?s}Io3lp<=KS~rM0C9q literal 1380 zcma)+-EP`I5QXn~iV>HQwvk#@Y8CY&p-B}fp|pt7_HMl%@RDW6*&p-sI=zVc9K2Y^ zV6bt05eW(D*q-_J%$dEsfPsUy}u@aR0gd@a<$F#%po6_`we@E_)5(&AxhnUtU|TY4w(CO5o~p zj!Q@-6xv5=Sl_+u{t!GzX;T6^_AK9Y{i|N@^85_6Zo=PSCJRmc;u+d-DaGhP{4Rc0 zXtmHl8_+T*7vvIcppI6Zc8y{v^o&)E;;P8OicHu^owb>ahZ2868OLD;~_=< z`JnBqM|Nv{bO@AlqEk|_EDt<9BcoMW%R=*UC{|Bm`u$f$Tni22FN|b^X6OW6h|I@W zmI^vGAmCwYtCg-p-Z9ipzYnuLEoE&?X}|Qap$K7AnqAOMr zTi|!z&3NqTOJ*!ZAj|XdeBZot&pY?S^UvQ8?SUn>VSQ`agim7M^1W|+w$G<)$2Q=Y z*_2}kyDpY}e*XrmM>e)CYgp5saon^E?$<1}cg*bZyp9d+Jj~nS?p>HWv0s??>wKLb z8J+QM&7b-j%lC}5S+mJgb40P#9LEEDX!pPrv#5*b{(PNXP)}HU45o4L^d3+DKX`gv z;;9cZvFcv`_dE$t!IO5b9XJ|ubzGaR1FSFL_XSFkn#!u0GCpOzyRaiIMta;&?94`d zhV0Cgd#!xRSQ@UR-sZJd$DF&trj2zL?xd(R+^tn`_ytPuq3MpjTm)jRIROt{i{MKG-aL| zBTkm1`D5O-Q$OQ>A3P@k&w!Qlow(!)Q|>P+xO_@{AM=zacEs_O9rCQ@xQ$uFx!eay zzN+|fJYCMegCz}mluA-YQgADR#g@2pZ?tk1N2@DzBV^03E0}o3o;`tsrhUnA3r(Gs zn21@#nOI!$?)^DH{bIFiRX(-sDeN|g!cC6P@oiM{DP|G(NxW-Eea$MbR#EbPP=@D} zQOFfD^wFg{B~%+#K2^6QM1>--!>@`Fsplw+D%(g`zwzts`L~6_&*9>bCpTbY9UU&~ zJ!TPSjxCg&5KSqgXJJ%$lsh~-vWz5kYbr6^LJUiP|9 zl&r>oku4H%D8KbWUeS4a&Azf-himPLYF&GtDQ>ED!tetuKeEp`4!K@0aUHXWbFF$N zrrQC5J1#J4tbm^n}{n{ zm9(bVbBtHqxmUR_iiSb3KjZ9{g&*Es>xs&lNmxS>-m0a$Rbp3)6L0FC65HnL#4cG+ z=#OAiox~KTycXACIHjvdneja;)VvowYgvmii#WrJ=$t<>temO;8y`6LVMSw$$m`^{ zUFK)RSu=P)xJLMKm$ZS6{x4{^+>4u(wT;Co9-oKfCiC*%Deo#{7ID89S9NtMi`VgM zmAyZJzX|*8`jVGYZ;{Jy_xFUzQO}oB3)S!R`TC69-tBt9!u&vrTlVs_R6Lh z5mHq^k1n_Oyg9jZjusW@)mC*uQ9Z=_yoXm@C{C20q!snkS%qFQ;$t7?I`)=h7xoTH z{KYKd{4Js^;-o;5cL9HbN)=31u#TGQM#&yND<9vkm=Q{mR%XMYee`>H~rE6@DOw|z3i?fbls^(8EvhX2>w{D&y-bIc;n z#Uiqz&g!i|ml~kAIEp#X1ddo$vW!`5X2FL#sz1PbwRafL*>}a1-m&R_#bss3cFsFE zadZM&^&xMsb)4|V&fj;%EaDt#bzeL0*zUeZ(>p)C@5|LFU8sHzLM0yK_wAZE#6x-d n6KYTfn2|k~<0EDf_jmanp1&_~EYffBk4Y6n>L_$k)Q5ioh15%L literal 2716 zcmbtWO>Y}F5WV|X5JnGe0Q#dr-KIegmQ`DF{Ly%oDsYj*Xm_M##3dz?yOQ#6iXL+6 z$>=Z8AM21>c^9h{V6+Dt#*_Kpo5z`FhXhnIQityJYa#~|MhYOAH)U!Sa1_{sr+d#$)W~LFfDu2ezpnow30#T^ zdVXB4|I+kF#^70(#G1i&a_6)vZ~EE(06%gmrpU5T$4WU^HjJJX6aIS4-wmgw(F&*; zjf6iMcraW4=|l|7icCl_3^XI1T}yjIy@;Zp8!q1TU-SNtymynAE-IkrVsr3irAMJy zmWoL#>4(OELQIg2q>g>5^%n2s@A=91T)*#>>J?B^f1ufjkr9V2(+HQQ1EuzOynaf= zMDIq?emfs5v1#cuv|^&zx8Honz%rqvP+mt;z|?3Bvsafi!x``Et=S5wnf>5|6kmv0 zd$%CHy=495wY&`VlV*9g6`@^V7-o!wQ`ohCiz@Fs%*e@eYhC2lX^+%{yw2u)G3VXf zcbVT66;SiGIZE!57f1DgDnY{(EZh?*j+*ZaHsXNcf)7W0*6}ZmZ;}eA8Tr)`x!*3V5H<(j%$r2K3?!72W)3n? zsShcL`DrS}cPrQ%Ru{*ROGg{nrOnLn^qk*j+!piFY6aA+cIi=Y>n9^LktBw$?ZpXp z(b4L!YTBYj&65UhU8#G-KNL> zRdn>l#xkd;s2bg+iijtV9D9S(Uj@|sZ74%ffy8&t`frtpn7Xyu{B7&+j$Y=5@@zQd z#V!Bodb@lopr(9>D$QwczC`2()FcP`9-ts=s?9GG9$S9z9?Lo_psuDfnhGENhN(q( m?_iwAF^~Cav%-al942QA___x-bk;=l^lsDm(pZ?BCE)xJ1@zyEb!YU@#vP` z#hbkjOry{Lme~{YzXi>O{IES2*sm_nGMg&oQ5rdygqy66UwkwNnLo?q zYG9u)F|oQL6MXVAA-mHYD`NA>`F*HDsk4sdHSbSmrAxxiR;<5F%01(X;q&A(k%-Cs z3f>&Re8$}&QJqI!rT+RxeaL!fl{ZQ4l5kUh!JdxkZCfwtntg5T3hi!QqZ$$IIF~$8 zE6dL6U3?H)Ua3CRx+5 zY%@zwTv{8a*?UFPs>zw+3eFDaDv!zaSdOP?T@r3uJ-y}H^OHv2tMi_D-~63LTt!cS zHwVNig!5mx$Fe3H5U*3O9;e6^YI`z!T@nxH*1mMx)-w2YUZ=UNz5d}bKgOZ}>O-4L z=hW?JirppgaQ465Sv_0kiADQ`X4Jfib4~r~1YYA5rswDrxF@6Rl5mrzI(4r4wukck E0c)`PF#rGn literal 1672 zcmb7^&vMf+5XSF$3QvxmS(-^n8>Yj7Bn@PmwjoZSiRoJ+#-sv2-V7|@&1or6&qK_~j zw;E^!3pkD?D!vt8d0W(*IE<+J$y$HI?F_;M26I)Z>dy!kZb=ZuY69)rnlUL5eB#1) zNRmb)`84|uV_58A!dguk$>1vj+a_}y|7B;+AQ zOxBMKxtG9}u)h)-ZUhVd$lvay+&m>B!y-=WUz2U0!Mkg~mn)4lf{o;!Af;dad%_cr z^Mo+@^o;i>r!eTlx|eFE5iDkXzrL>9l%R3WE9BAo$=(k`IJttz!y0V_3$2`lqH>=< E0hg2iSO5S3 diff --git a/MacDown/Localization/pt-BR.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/pt-BR.lproj/MPTerminalPreferencesViewController.strings index a5f3683a9c1a8fb4954f392ba7b55516f6ab70d0..8fc6c2fe7b81a6a882d74b6caea64fc30e2ef5a0 100644 GIT binary patch literal 1864 zcmb`I-EPxB5QWcmpTerdO@&*8K!{(7wp0{RiWE>P?o47zk!z=}6G&f@XFyyacnIK| zv7MyWhHw!@vDdq2W@pZv+5Pi-M_Y=tr%Z`1`9*rne^am2(;KDwqDlukW0YwK&fXd8 z4?$JTSA3;2t4DgzT#m0&Q)V+28t`Svg83(nXmClkTdPG#+d>Z$k zn{_)iOv#n+Sb6mdG?DuHk>mGgc=I~MpLrPI{oHXCyF~hcnhIu21B(jSUZKXm?&3A( z6tq)mN{&~ZdV~<+dOY>`>$A{UD~Y7mqjk=5mEHt5VSS)qj0`y>vr^yq8pBP^k#&3P zaXwptDnZyjU4BPyVSFT<#)fL`yUbdZx~vw?t7TJSKhaPBw#Y0hV|w0aHOs4%xa-+i vmGhPN%psVzU)$Sg*@<#OW_wicfV(8-PU~~GT<@t6B3#48eT{GPV|o1r!e%QK literal 942 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 EANRXHD*ylh literal 13303 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 diff --git a/MacDown/Localization/sk-SK.lproj/Localizable.strings b/MacDown/Localization/sk-SK.lproj/Localizable.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPDocument.strings b/MacDown/Localization/sk-SK.lproj/MPDocument.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/sk-SK.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/sk-SK.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/sk-SK.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/sk-SK.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/sk-SK.lproj/MPMarkdownPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/sk-SK.lproj/MPTerminalPreferencesViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk-SK.lproj/MainMenu.strings b/MacDown/Localization/sk-SK.lproj/MainMenu.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/sk.lproj/Localizable.strings b/MacDown/Localization/sk.lproj/Localizable.strings index dc62739dd4df52fa1239199e0da473b851021e87..b9fbea5da37d172c47dfbda936c0030407025711 100644 GIT binary patch literal 4036 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 J#TX{@?LT?{o&Ep- diff --git a/MacDown/Localization/sk.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/sk.lproj/MPExportPanelAccessoryViewController.strings index c39919f9903f1157e7b1db5e7b392fdf2f508302..04d0354f48696a4063bec8b840147e044f8c1111 100644 GIT binary patch literal 536 zcmcJMJ8J?#6h@D&zhbczHe!_`q)9@+6cNm$NVm~7D#He{qnP~kKptm&VId@q3^O}( z=ezfQbN1)ELz|3C0tK}rB7#s63ojVOztlTu?d*&tQl%}LA6j$bzBvvS7 zWTt220C7oXUOG^je^ORza*3x4NTp$#xvrO!Zdi~ZP(n+e3rRo^Y@8BERa9a|QQqNQ zN0%y8l^xz&lvtIQnwJSPK2^z@i%XvrSCv%eq!yz&BrQKh*DXyqG{h6?5QG3$ha6p4 La(Hh}CCF|7W9eDT diff --git a/MacDown/Localization/sk.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPGeneralPreferencesViewController.strings index 0a6141e0dc9e2bd987bdb6e3792b87ef34ecb639..aeb2819988334412240f4bbd1a056ead4a4379ba 100644 GIT binary patch literal 2056 zcmb`I&u-H|5XL9hN__{b$4aFVh!X-Sg;qi;r6?*zz1gWlLd-g{outWucg+Lv0vv$f z%sQ2mZvGr9%l3MAc4xkCz8U}fdn(5g$$QBpmXa%yx7ct1!w5)1TO`1Q|Ytn7^QM=XXQ5Ev@L62pV{>T zyDlC-$_MuN2w%z#^C!gl!1IFf*LugXoXP>?kj0Be>_?AhEu-&Sq>hN@L_8tdw55o0 zP>lI@@>_=N8uMJpuhtOM9`S&;N9p&ea@^0VqCvTSLFlwpl&Am15R zJJ?KM)4}7leBt?8&SAjkddX(UBFyIbN>0b})3i_$gEFg(I+*pm#jyH^v91=(Ixwl< z-8|*weUln*$k{!oRdC>KHmN9;OT*ohTX47G%KML~3$LP(MHqJ*RaEScQF>EB`{CKY z*4mc$99|XSfXYyhnQ2jLEv=D9(qmPtRO`BjGPL$IHfJiXuq!~Ea>}l1>%-^;49!u< ziM+z+r!{?qEH?3^SexLJtd5g6gD18;QletTWYg7X;dkbexmtAvk=!?#J{t z<(zS9pYybTDPP;wb7eWus=0)fJ9d3rVZ;tT}%Ep4`D}ZvVZh=|{bHjW-8x+trlAsdk~nDs9I5c1=woi!ft%_)M&h=BlOo RFLv0{TGzVDSf4y9>_1~`O~wEK literal 550 zcmZvZziz@X5Qq0X#VI3_i&Uu->Hw5Vl@LvZXsd1}T#1RXBl~RrybVLgzCedA5${z) zg9s?=XWe~2|E}GFzU0=zJ;bAN&kU jep1Xhh42>_!J%TGZ>&2H^T&&vLCxOH$#GfT;~@G2b$PNh diff --git a/MacDown/Localization/sk.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/sk.lproj/MPHtmlPreferencesViewController.strings index cf751377201d633ef470e0645925fd3e2b93ef5b..ccbd9dcc9d2fbb40aa2d0e49c1181535ed43b57c 100644 GIT binary patch literal 3682 zcmc(i%TL=t5XL9hO8p-!)I*CD9zQxnn{Vx(KjvjtJXw{R_;SYK$!mTyQj}eeK#rx(7)hJ4 zj9q|bjsIU^wID57m#pMvi7_V^%;zMO5-U%5URfG)Zq{uwE19)t@{x6)27caix698T zJar4p3U`k1ndhl-L@sYOj#-(Pd&K0j7&o4ofuAkn*63>>2{P*89>@R4(_$h|HS(!h zwW$Ano;03eo{GeBKXXHs{4w*iM^!Jdf2)}#zezr|x!>k~FsMa=XSb<_2Qxd;UL zHuDx%r`!w8mGU;YL9vvu2JTE|U}XOF6C<^xH?;De7bNKv>_YOHxEopMCDwD>HKo;RcRtnTKiz0R5h}Gg)8(bFd+-w`&DuZ43 zU9F?;f{|Pk&k9%fhQ{;G{3r&`^2H@s{Dz#dMFR%5oe9cDv|DkS|wehsvUw} zbvj_>=$&W{rMGVeny)+_lU#CH{3%}z>UEW|o|QwIIc1AQa&7o@JN_#EJbq;p_nVCJ zNp~z&T-`rHW@VmW6)UYb3*e2g%^T$PKJvSLxr&X}u0fVYXJ-S8Q}S|d#vJP|5^Qo= zxU;iwDye=W6la{SnM7;WOm3TWNSCbjQgCe&Lj_#xW(VEj942tNEZn$Uo~Ko*A~jN8 zkFHWv4mh$PFEGB44SAP9+XXD(7*yIQeeAOw3j#&+ys8SDJR8^F?zBN{vai z=y1@Vv39#G+*nn+Z^&6qGoDdh(9Y`;$@KMFzohgl$}`Gqby#(%Zoa2lcplB)1CT1> reco!6#a(tjyCTNzvT)-*B$ATRf*w5`prrc#uX)h7+o7V~-noAPZ~r#k literal 1043 zcmbu8zjD(+5XO5y#g2ypGIO>A15C(JV0)5i#^et&6_aA^+p*3%-6^M&u>B5s2nvc6 zRMc^!_`Ns@1!;uSKyl4?+Wmg_?W%tOBZ)}@@1c9{`?QEiS>hv-vU>~zbH=t z{~7AAf|45f|3DpHmr&>UaGU?IxDRVeD|;eHK4xWwl~lasBiaCxG>)~gVCW_lh7#~x ztVWTAxmL<0CA8|b2w#r^#!uNYom8>aLa*#zGF@u!IwM4A$sG}{AzSaZ$kQc(s9bcG z-$86dte2z&Ij452PvVb!|6L30$a}@Sx9n_^R$#Tz0Q+6o_8F$uYE|vipN#yqvbcgk zECT6{+c=jCCzwe+4_ofT^ok8$GJQ3y+-srXUUm$vn7ceSS$=PDqe$iVMavMv{3qAh z-zn^;`}aQgu0EwNZpVCPwf!~h>kf3G->5Emv#0H$dO`O(R-nJCa$VITn#}T?<~74_OY!+1zq3PIWjyxq z`=A>|P!!eSNuB$rLX-aq|59FrQz9%9q+4%R)1bde~PV7%5JuFL38$4D)OO}gcy z{(x5(t2}9TvD{#dt^PgpP}C%1g;~f0-f{q$rzobu<2ZN)`yiCVJrO)gcYoIJmD?9mXO6xze*N_oI z1>R*UIbc6opz25SYAN1JU1z0^d9c#__mV0xcCnqdm-MtoB?M6aI&4-M3H8EfsXiVx>8p?#d=e&GmV)|Gy-Sig#00>oc)|tTvlBu z)sT}clPXbjj=a{L9>ERCv~^PAPj$|2s2yd*f%fz?uc)h`DsvxV`&Z{$c~+lV<2fUn zFeYwQFsO3YW|emJKo9dGpyLbtGZath9nd*-I!C;Y0Y{=ukVFbBY|t1>X?1#?ibA+^yIuVoj_RY*W3mljy_s-@JS8TdSS8gxdig zJZqO2>js|7PWTXhCyHL{G#ukf&S$T7-79Z{`MKBCN(T7aa(CJx_E2*BM~M&NS7Lpa LZz!%3|(ZIrBqS`L0!9s4jZ zFhI}D_h&LiR%H~cD3lCBBuxh^^UsKk_#-lk|NHMR$xlfwnMzKRR&vFomi&vqACu*z znJgvyNhi5U7Lse;o$={E`M>Mrh`&=l39|FNZzX#?U-H?To?Ii@O^*4jjr2k?{UrTs zvX!hP^<+I6=Xo``<6r*DKPA5;Kk(j?_<3O5AD^zZ?8d!dMw+=F`3J6122~!KS+3Rr zjsO2V6t6+|8}mP9wsqw1c%)HS5_u>dnLlearYn@4f00&Zn3ePq>p)?K#vy@##q9} zxPwLh)w9lyu#L1U{mRBZvdN6J>)N35GI^fmEn_#GrY3k^Mtk!aES7|gWsMPEjWquv zuTsuCzQb26Gy8jVQ3v_2y&Ya7+ISytN!S>clb7(0tISAotVWb8?=9Y8WxF8KYdzUa zK5>ooUa}-?TpRd3?cY~pvN3BORe6sI=6nv`QPGYw!%c@%m=&p;8MKy!jkaN~bX5pv znA-&yFTpr`ca7saFF>=;F0UuAc|DCV#S%8A!BG{*S|j?3qP;eSuaL($VeP!%uO%DI ze$RRTeQfaWwc%)gXI(xyoL-MB$>$7OOTtFm?Ahxzt9;I?1;jOGbHcjc@G5`(z<%{H z;papT&9EvxHyP)WF-};QYgR`yxp9$V_&R(b=E)ze^4&UY==6yf1b<{n*z2&usPNsf z6JD>mj`r1`6{Eai$6j$=c_>}~2%N={{sVGthfg{e$I5b2OTtDeudDSHufMMp-4rvs zbZe;0K#Ww8QS4N_`;bo*zps%BET`=(>$EqIT9Owze@lLMEbfboI`7E`x*2P?By9Zg z98MTt%=N;pN|$$j$JYiv@tH`K7Qexo_{_?$&wdY4-Wq&h4K~nzJNd}-3OUMRW(_O} zdkt2=xaZ7~o)e=`2r!1!fR71>+5Qt_@g(>xtbCfX}?bfaf6 z_ptkdjw}fqTe?!=M=pyhPgmmNs>2M|&@NKqZyPQ*>Jp!Qw%zCAmV}L>N%k%-c{!4; z6=`J!6pG@?--@H$E|w{a+i($m8)lS^a+ZXRXUF9hH+b@3bMknql~fz^n(V4Bno?{l zW^JlLsJ1kV&(oT`J*CpEQsuuX} z@fgabR$2KpN=w2<8P6kdP+hU?J}a`*wD$;pF3)>RlO;}pY=vC7o_r-{WphPK!p4{O z9)9GiP|4$qPuIv46t{fEaEec_3Vq8S9&!nEQ&ijPd}Arnp(SBs)I3h9yqvL4;#B`; zd>;c^?z3t&xz1ca6|#=KWR9^_0~PnsPTa}Zs3l?Jn`bxo$E-?w|<*5e!kWjQEPtum@6wD zoU;1E5zUf^s-Anmt`j0fx-=q7!bYTw?2Ny*yFytXk~jY*Oy@auhFNgS>rXpgyal4L zF9ScZBy2=4S7&HqM@Ou>>~4*BI!`F74jvNEbPhD<@EziRLbX01vm|U}($y6!+<`Nz zzT3r8f=7`?%4)BOm8b^YA%YLL!Z|#@81@#k5-0f`J4#!jC1E3LurBg^48d@W{e+(V-h9p3;p-9h=ojjLs%CHFM-?X?dbwIZ zpS2|Hwb)Gl81pf{#vJ@SUTU8XR`Yc>-NrX~ek%{9bH1XQ(HF430rM2LujjRh-B=Pf z^89MPs#iLZ@6XM55sbRuy?w?}vx(*}(VJ@3I>YdCd5lhoK7e-8?e@>;dOTzKmP8(A z)fv8x?e;9DDi17{BYvuSSy6;J!t<&|e~9(h(fAwCrFXI=VdD|M38OytVsKeZdDM@o?KB7Kfd_H371Pga^c$thOu(8(Rb0 zP&VONcJ;MqofPQm{!?-5y)v0BlM7+%^vmfzjVn2ftHr|-wa#A~{jsaD_tJHA1BK)=& z$@4ItfT;n3RadpyL!-WW)Mu`igpDy>5%wdO-J5=&^}Si}Wnr(Y9yEL}F2ly&f@GXW zom_b(s?t~zHj*%E)gC6To7aViK4DpPc8aPrGep7l-Zw(#zl^`hO4x|fy742I)lE^v z8;w0LqZ{!T@kDhgpMcJ5wvQ^7uu(PH!!N;}gZHmtQKMyo%T(i4C7i*_suHmEWVd~E zv4o9oFcS>(cy1<`x4#1GR6R<4U1joxb9{uNUc+S#2l(*p34|qKV@xy98ulQT_{i$% zon~E?m8ySNJk;uH%<`#-n1law5p;WGotE@s^&gyJL|Eb!+9a`|(&GVaIsa2>Vc;Ir}Cc7-0 z7zF#XBy42;dkbpG->3xB7dXbws?<;FT;q^y%8zJ&>E4tg?R|AQyH0CVQ){x@KW2Q0 zC6R~GpR4%1)7{a+T;x+!x9G5b)$3Flm^kNfO|Fqeh@Ey^UN=LJ%)1OqOTtDePpLk) zQ~E}}k?VP!8o#PIuXvz-^Wq4w#yn)9OD@k_Ao^yz?kx!$*E;s{YE1cgl~@MPBI3@A zE#i#tEYykpJ@#5A?p=afT|jG&&)j0cS@vd0*r@%3)5R&@!!XUYufSM*c5%tR7sESnXBYP{uujIlEeU%?7Wl4Wv%0|L zP4q9{v#1p~QJv1wdVxBPrpnRXANr=gMZJA6j$Fo`GDY?EeRWO174ttakxL~ zrD`~f%vm)h-P!CbbbZwRz6-5sKC^8Sk90@TIrUbt`A=|e|BZmzlCUxRQ@Max=+!sy z7duO5W~1oV&md+#g#T84~xCTcJyLl8eMOBf0zUdjWasYyd4luf=|D!@HNWEED0OuCOhsABI5VyCr($FWWU<)MV*1V=RrA| zzgPMWj-S0V!;-M^W@q48fx1jOShdg4%i3_Br%8`7d~e=RAMo`Lal%DBPPRwTk|={s z~VCbVG)uwbg7QvZJyQ7H<#IcH*nspgpFjAHSw9(5mCT*23Cou9|yJ1#ZfPx zd_|rY-6Sf=uN+{n>fd;v*6dd#cu`Bj#+QwK>VVY#_gu9~qziaMpH~mp-X^xM^Wqj> zQ`L|OVtW={EMcS53hE?P-3+7cs3JSm&hqzQ=>Bf?rs!8&%H4y}WhK-P_Z~ggiHFC; ziZnt?!bbRgy{5X|^~*uRy2Lx(OFdkhUHFrBp+BWNhO@niu*MR3SnpkKAq({<p9ig%$Y*gAWz9vw0MO@X$qK?chtXEuR5x=6&lsN-QEMX&22dHvA ztzA{|tsf79W^{H?HY>Wt>Q2BlK`dANYw()3K1;$zmyHbRtY~m{qh&=!o;BSCFkWDp zx9IOHSSOu6S72n>-`=q#Y{cm<06%hddM(2*Z{6Og<8g#(2`-qeOjr^&niZ_`jK9(D zJSoyn$oPi)i#rhLgny2Q>~JfJ;g*DrBhK@x+;1!Rvf0Aw{%2(LYa~nf4b@98L6qKC zmV}LGaKx&tOEnYuRDZAA1w67yKg%uypF=P57ESP_@!Ww|okD{WHXhwu!Z~)u{Hpw~ zZ{2}h_v(f>XA~V4K+~G9Ne|)u!g0?FzCaY}~s4Qzs}d+h5S{27T^bhY#>Y{bI^2wyc=e ziF9pA~RoBo@ZGOIUt#L!`D=eAGKKt(d#T?iU%VS0q*5Yj*Wq81+ zob@j)t2T}!)|&D12zb;=y^}w#pGW58LC!RI;W~{XQOd<-84})uSo-IVTVN z+2~J8owu4fopn>LIy+;o=^Lu~*B4w`^5apQ89UXtaE4q`GcYBICg9xS6pVgj__x{j b|Nce1<^P2tj{fm~f*6$i`tJLuRfazSU95GP literal 1153 zcmbVMQEnPB5dG&ABcw=eq=x@Sm9io z8OS;7M49(kQ1s`!HUw+~-{9-jw5pdy zyxMqhgy$78IW!S7F{Z4S95ysZwkU*yuooqbK$+??2h`t}_rphija(h0!w8g_hvs~Ms z;11Ns$2aUly)r@qed?$q>t)7+H2*na45{Yy5XVe(Ozx6lVh?_(da zTTza4BgvGAGL{m-T$0*&2N^Ov5GWFwrR=+kQMu>18!9^4$C6FG^4p;O*Z<<@U3&SC OAB1&ky_)h_PvsAbR(b{i diff --git a/MacDown/Localization/sv.lproj/MPDocument.strings b/MacDown/Localization/sv.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/sv.lproj/MPDocument.strings +++ b/MacDown/Localization/sv.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPEditorPreferencesViewController.strings index 05ccacdf904adb772c8b4553ba45aa3e49204df0..1a610cfd279f0c766a2e9d4a2160ffdc60219b44 100644 GIT binary patch literal 2446 zcmc(hTW=CU6vzM1{S>4RT5GnoUR#Y1LW4rEVoMq?@c~#uQ7#S3rS|jrQS@u5zcUMq z-3}}dBxbY2?Cd!+|I3_N{`}t8u5v1qKXItCsp2tE3UV9-}XKH&TbY z%g8)7ptnPG$3@#55&bq#_hvco)X-Nlnq-!AoMb-Kca;_J?g?#Gm1LD&?Q4r{U&P)& z7`BtSVidguMZESFv#jEn*FaZGndQNJfie?j9cY-r<|$mNjz^QWtfInM#+;2W!q3K5 zHr366kk+)%<}xN{1kyf^w(zLClv%;?>f=&NcXF|_%Un9dy=xdXxdJjOFpD$hynGRU zUOyb4A)3akZjw_4m(2eWd!mJE)-%^~n$iz>x}a}ktNAvFtHAU`uV|0>ooCGX`Xc;% z&Brzve!@F~b&h_F&6FR4%RGo!XF@IXb=TEkV-^)Uyq(0!EVb6HSgZLR*hQ!jqlok^ zvsxSAvue%jJ#9~Kbe`G=z6ifAF#%^Y&8j)X&nejY}9Sxw@Ww{5PYJ;aMnTZiZY|WrNw5Bul9p9$&GGil}S*AibAvf9>p) z=@V;Txl7h+y63i@XQ)sj>zMsmbf;)RHFo1o6?_r?>N#~x1KNqJpkK@#&Jb*#agD06 z?|&mOUimOGZ>v|V-4qW~Al zO*jcs#;t{L7qERAz3=JimqtS}&8d{+J?Sr2$0*jm!lM6tG4X z1cDiBFs)!=JXDB+VFzWcR4JyI=QeDbQIX=W+n)~YAijYlfi#>ov{tZa+dIK3y4&p@ zYK3WmLLqC2ALeK9GK2Bl-{bKrqpaK@3u%nG{QCUdG<1SBQWMTDx82s{XoW7HUDc;t z(!bCDFM-BQpuD7}?f(umKHmijDPxqBdOqBiBD_*Fj`@8{4-*%1fka-?gp2g86Tufp zFiT(>t(s0+!Md9h%7E5VZGQ-+9bB^4ISwH&xFX27Dl4+#Ol3rs4nEF8SWMt>VHV81 zw}OTDFs-)Vg`}j?b}3f+AQI|p@kEkXOH98mGm37muID!-gNanyLVj}}Un~OfK0z@* zy$|ysSYfmQZ4F%Hqn8k6SfJZ}JvjtFf`cz_8e%J0#0U%8(R$bEo{_;af8=kuIopTe UGi;)$fwh7K(+-!~VfVHC27};eW&i*H diff --git a/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings +++ b/MacDown/Localization/sv.lproj/MPExportPanelAccessoryViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPGeneralPreferencesViewController.strings index f1cbb2bcf7e93478f47bcf2c55a78d92466e73d6..00c382d40493f43270b0fe9135e90021b6562830 100644 GIT binary patch literal 2090 zcmb`I-EPxB5QXQuPhs^2sgkLLgakrd@KdBp2uh>2a7k>3gt&I(%}>(@Hs>Brl)ZsqGUtA1ja z;PKSnv!+J)%q|#@!Fj{?1MSPziX%I=1KJ^rr!DM<|MsfUk3G%;JPv;qSR)(Q9jzhl z0;JBz&5Z`&%UyA<}=x4TX|J3 zl?x#qfpkc}&hbOM_u;)D?lb$s_qm8o!s);~#x3bxdnG#Jr zq|^%(nv%~cKDS4j*+(Dgz^;h&4G3nPNJAFkNagjvUukQ%NOnJgCt!6Tl;R@J+l0UJ zo6=4gmm&+I)||$5;%BrH*xk-UZZD|^F{gIS_sY)gTZe~`MVNtctHegyTzZDLGgn}93uiaJQcc+D zYlpdzMVPrw1wB@sgn2z4M+T*U!hXZ9GN4#As?$G5A=Tb>*+XBYzX=xnE1%!QvnVxg z=dT2j&R(DT9>aK_UcI8J@ga*af0sn)U_`9Qvofo*AVk`8pDH``=PHNYln5G~#rV=K vn&DeF%wsp)oOq?40hx*I1^01RJt2#5^g=Yoca11~x5X<3IG9q6Xsh8b7TQz9 literal 1050 zcma)*&5GMF6ovPBic2k|4*L06cO>e<-bJfRtxF@g$3ZH7C$?U(uUTkQJE51lG{>`+ zkA#el@PS;g2-?Jv37v*5l81PC#RH}JfI)qJVpYLbFTY!cPUtZl{uo0%x)mq4QVMXM z+t}lEV>sRa^00XDdds~`xl%Q72el61Ycp(!%%1Hw%&1>2T_^PDE)D(nqTn3l3J-Mn zYe58Xg_Y&#%tq^6mJFoqG5O-v3nD diff --git a/MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPHtmlPreferencesViewController.strings index 5518c78d82730a608a032d4156f1c81be18f25cf..8c2d503c2f478c9feb761821611c27237cc9d039 100644 GIT binary patch literal 3574 zcmc(iT~8B16o$_=zhXm7RFVaW5k=z#9|5X-Bo@JFyeREbO3PBVAE3Wi{sNck^Ujpk zts~nesM&OOXM5(%dEa^GoY^1W7i`WVTeFr`tiu)AYksq~Yh|v)>UKt(T9>wlU4mtc z|6gJC#4_8m*h;ocyKYzX=dEE!j6A_#&Cc!8joYSoXF6XQM)=XuB5KEKM)>mHV; zys0v039q*ig=X_{%-Mp?5L3uv(s*Wv^BjPnLp+fk^W?G4;QxOxwK&F93r5AO$Nle_ zQamH3w5l~OadnPP6jc#Z`>gC0E4u-=($cu5y1ei5J{hjZ4*t97DPmQ6*5*1#XI=Uk zRu{Z$xF>11G*D{BJ#jWwtW(#Mo*J$96 zI=ubLzh1L{%B>Z2eF+zbc#fHEm3i|j4_Sm6*&qvKu2M?H9rlkZPfDv@u85irmk^AQ zWV}37LGzK@BZ$1FZRpSO!Nme?Z7 zifspVDAGP^%QG6X2s2t{W}g$pM9ulT0db!!TmK8ndr!PlolZJB7im_nq&lk**&};k zkGcC5)Vlf{?#HP9H9##jYW40`-X=BEpR>eMi5XYNcnVpBd0HV7aU$L2qmNxIRXCH5 zMhH60cSe5_3`N?SW^eC1?wZUju2eb2@1!-U2}i0%4fd;Ya*JPHTOo@uXF3z;RN5Ry zBDLltDMG&ESnaWTT5*43ig+GB^X$5;RFsR_pc1Y=dndLR_J*pPM;EdPqbsr6$|0%q za9=odLX_VgcX^NKRlr?@>;kQ8_f}yzwmlg7IEE}_5k^*aHQ}0d^K(yza2k#3Ye!!? zUZXmB3TF?T`sT^NaQDtW1YHH32UJ_FW*^Pw*D+)fMmzd?Q8lOy;t=CLzi4HD0$LX+ AkN^Mx literal 1794 zcmbu9-A>yu6vyv*3JXozhGaf8jg3vapsh+XT9B5GPE1^!)~Bh7W2d$g%AN;affwkD z?W6<}rA0#9?LYDP|IX*$4r?oLj(ua>XJLp@g4&~Kqf*;n*}m=Z;D~n?c2|zW83=QO zq7P$K?)Uyx@#Y8S2*t1G<7=Gwpi_v|Gy1Tzw^b81#n~?2Tu29ODk;>~*4{ru9h6YY zfcPJ%gR2!(AA|sAl69ydE__#_da9I{USW~P0Q`)(EKQB|%;G$g799(ys8*wA6QecN zNgBP|;QQE~adE=0vwm5$O4waRUlCDwOu);SJHLDoEVj$L9PP6KC+FCtsggQcr*385 z8(lW{8F`4mxRNn43QX*`+QXs&cbG@~!<3(n;u5YBHpAU&STG8zK?`K$unzNL3EN@# zrQv@ReBi++-s@+jeIi!wg%Rz@g#u4nGdk(z6n3oQXEc#6mrm1$Fc$+| zzmUR|z${Ku4(8>$}OL4?4;qqAh@=X*TZ)K5_iqUzTQ- QP%{ftyS%5%l&l>80z7gms{jB1 diff --git a/MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/sv.lproj/MPMarkdownPreferencesViewController.strings index c2b70f4f1fc501ccd89bec429e417b97340bc616..f139c40522a487611e32872167ed69cd276afef5 100644 GIT binary patch literal 2298 zcmcJR+fKqz5JmU1UqO5{sT%Kz@da-&#v9=E4G;yvRtp&MF+$J1j{-j~T9MQJql% zw|ksj7S9s3$U{=sGxt^WS0g-@!sgkIYFj4iv}uZZ#O08kdwOE!vuY3W%pxn(2Zu2E zDsX?*5$~s+vJ^I1cKm62c22IhI1u7VgY`J?_ECqh6>!?q4R2hI5LybGFp1r!wjp(H zvY*T1{vX`z;-cehbG|~NJPmp#rz|&{oHQTG3(mL4TZf##w40W~W-W3y?D*4kvl!K} zK^<$X>Tm|cy=T?WJBzfy+&P8uO}i248j~nZYAI~eePX-0_DH2Cb2Z@P^rL^DoO${* zz>6jm?T%F#ol-Y^*F05x*p-Q6gFp)iQ8{D6W3))Hsk&MiFYTW z?Lz6Q+L?&@Rm)m~ca?tj_$67S6VvWm3Y*&H)1;^3eEyUD0OEKmP2%=7eNu(^lz#H) z@CtdSxh;jwJ)Fy5nScL3p~UY_g&K^T%5U1>lzaGm#J$ct)e%xlVUzY_CjVbt|9%4Z CgIh`f literal 1148 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 diff --git a/MacDown/Localization/tr.lproj/Localizable.strings b/MacDown/Localization/tr.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..b7f5a842af5b5001165f887721bc084b7b9d3914 GIT binary patch literal 2808 zcmb`JT~8BH5Qe9>`~$B%Au$0iB!xRrBT}S55yF=-F(E50wV}4nc9Fmj^{04c)aO0R z=A3q+)`o1h-JLUM=ACyw_Wb$1Y)j_s&{FHz(7y4U*;i}v)bh_A-n;&J$(C)-=54`h zykA;k*Q{i=h|Jk*ZmpdmPqCEPtyL>s{(D|yoxO8dkhhxmHDI^2TGm8%T7vmlfSxy zf8p#Sajd0WeQxJj9C|j|$Q{w=9B#6sXV09XxbRkGK^m9XQ7mir8I2eAHo{uN>JT0h z^!jLB+j%A9H}#oF@K&wdde3Wco$rnDixK(jqpAG%@aarZ^?e*oWXi=C&$ZUup5qqs z)Lya@@Yij_j<`4N#I|@kwsWeeVW(c&;O&@|BikVl+ffWc7}ukEwVJA8xpeKvAcWA)5Kfe8T_63ifP~1 z%u~d*?Kuz^;wpG5?T$$PDN)+L! zPpwRfb9H8)tB?BBO6>E5>S}Z4Gh6*!R9sx2dG}v~N2{9lp;zk2GzlDi9q&GbUsZQt zyjWM|I@|Dl(u059j;>eD3dbab<1;n%&~zB{P7E`-jPeJl3nckhZCa!|>sR25;q+xY{4`HYBziA7yS$k*dnYc07$A z-Wxohpr10?J4|5h)y$54pMrDr1Tss7l&u5=d$7`llWJw$xB4@jz{06PCz8CzJFMp? zr8s_l{gpR;C)MGyqyA6XrC2mC!Xyy3z+E%S$_9EvaNUh@@^mMRkG`gB|9!4#!C1$0 L5Y7}qR%Gxm0Bf^a literal 0 HcmV?d00001 diff --git a/MacDown/Localization/tr.lproj/MPDocument.strings b/MacDown/Localization/tr.lproj/MPDocument.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/tr.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/tr.lproj/MPEditorPreferencesViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..3ae8a19b61631119b172131f939694c6b1fd9063 GIT binary patch literal 3938 zcmc(i+invv5QZnWJOOuIKtdc8Ae;~4qG!^E0!=Oo2vteDv`f}I^R{M9o3jHO^7O5TM2t+A zkw=UVE#cSY+erTGg)iqKd&i7@d+*lKyvW`nnbIH9?zxq!c4WJ5e$4mx?7QXG+2U&( zS@nl}Ntux_Ct@G{$JyS`tiwLBld9VS<6h&N_LAMIwqz~dPZ@cV&A4LM?F{XZ#I@hB zod30!M>9Z|q17s>ZPVIA3u)A)6`@1lHY;85s^>LN&`C0T8IHXShgi}|;y86Wok5>J zG5-{NJ=U(f74|b6r&+JE@+Gi}p99DGfc6f(%h{ZKwm#VkJiW6!yq{YGyLsE5uytA@ z%$C<;5!~8c9Bo#FG)DU*)1(OT9DIJv#W}}X;`osD`Wc6j(IIrTn>>cer}kEVhf0w?H1Q`*_`F5N+{Pnb82*xXnTmdAMSm zsmM~YQEJ!R^S9A8SbLwJPJfIQ)RO%oVn9NF2zo`6eug6tc?Y=$nAdEU_XGY%Ge+JT zk_aPT%=9>RdWiQPy67w?juG`DJh@hp#Zz}`A3FVt?A~InkDys%1x3s4!l*fiUk#8| zoK%z@n%^nkw`1F2{VLH}eC!gVKTP;QNFvNci`_fUvnTie`$)eQSa^pxbOfRo?!5}K zqX}Fgi7+m|R}qFLyzk(hvcK}pq_vjG9~)?N3tg&KqgUsQBrw+GOB?w2t!;OKhe%u?h6@d)u^BxqU(d#r-mto(A(Q6`C@g@^{}=$?_+i#E71_R|V|t9=Y~- zH9W{r=Hiq^O<~p8{{j*bKOE)JmdI75@GyahgoN% JS|$I^^Ao{#PLBWp literal 0 HcmV?d00001 diff --git a/MacDown/Localization/tr.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/tr.lproj/MPExportPanelAccessoryViewController.strings new file mode 100644 index 00000000..e69de29b diff --git a/MacDown/Localization/tr.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/tr.lproj/MPGeneralPreferencesViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..960e4cc9ec71a9914e98ee5498180fd4b6671030 GIT binary patch literal 1652 zcmb`H-A=+l5QV3=z66bzCTcM8%6K7)#%L5n{JkL*t01*CZ4t{0`vzPY^_wkdgNrq4 zn%(Zt+1;5lXXfp7RhGn+Z3(0;37;#Qv_(0RrqpC0DPJTZ2p>$q&IbFb^k@NVQ+!i0 zP#xwE60`mY!j~cQgw>ck^t8t-F>6EVvKun;<=Wg8ne`$znY?w(sXK5TUfh=*&g2%Z z$tmm0*!e`i%lK?^Vo6qIfw2v-Qm}pTj&iPROXunK734 zWMurm$Fhu>%bv1PJgZzS@ckFZ4HJ)9&NMn25oOfH{+`@2PD|MHU@wHXhMdr^OC5jm z*iPBAA)4&@kY+^ zaSL7sGd|i7b|3fTg}XYusXESI{+k~)Zt3EOW{Rr+dtZ*^9<0Xekp7BO7c;)t5O!a7 z%&Redh`w8nzFh9h&uc+3LSO4a+o(7){-`E8*rA+e=tXOgswM)Xn$C!IS(HOCBRF|7 z)!>1fW|^@e?95zZ!N}x$U!EDy%k>D`K0WAz)B2{htxW}RQQB|R@^glpC?_)2b;v)) zViz8jwXihvBN)|u@Ti%~FzhkQwKvUt8^X@l0e1z&P^(~`_Zf;xXsRsbVN66dQ$I8R E9m{|RfdBvi literal 0 HcmV?d00001 diff --git a/MacDown/Localization/tr.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/tr.lproj/MPHtmlPreferencesViewController.strings new file mode 100644 index 0000000000000000000000000000000000000000..47e0c3dd0f9fc15a0de930f5f856e55dc6d61820 GIT binary patch literal 3042 zcmc(h(QXn^5Qc}_zC<^@Yyy=uR;%$sAp#X@v`w)ZFBaIAMFhGmwDm!K1>e9cqkeNv zmlim5m!#2b_AFXAfJmAuqspRp`g%nK4qiN-1GgDQCW>!dH@-b@fqU(-S7<=qczgdy!&1F$A{%!2H zY}x1oYDrOqFy$HMtj;!bp)=|h)|)x4Os&6SZp`gbk*dr9AL=PGx5bjC)K_4Lxs;3f zN?zt$GxP!6eG_d!d^UEQfol_yPY&-_;~uqrj+b3IV|*h`qMol=mxY_dB%&#NDC#7l zc~-|%?>D#&8AD5tD+@b9C=U69x031bxnO&0LGEZq3-?)dO{j?ua@ z8Auu?U-nQ?o|-E&z69H70h7zZjY)Y|UD-V!9#t9tXZW9>W9=0qerp#=!x%^rWO->2 zU7n6J1?{|UT^4SPCq}Ph#%t==R z(^kI6`Np0OTo!IbuAS46WzEr{>AvB%ZIBRXXhG*c9qm#1<-@0{14%fgLDnfSq( z%6==dWGO2aJ=G29?-QQ-Rq~kmC@T%!1>gM+xZ0>S4+pV)TtMftaHA`OtIy7QGAib> zpj$_SdXCjItj8W9=q$zw81*z85&!+FY=X=O;|V=evpJ<3&F9f&;YNCdCp`s3M02;B OM7$et>&amG`ADDth&{R2lvUH9^c;uT}k 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 E1tVoue*gdg literal 0 HcmV?d00001 diff --git a/MacDown/Localization/zh-Hans.lproj/Localizable.strings b/MacDown/Localization/zh-Hans.lproj/Localizable.strings index 69314388ef47141c825aa59e976e8eb097d07bbd..1f2ae59ffe5e9b916d7239d83e170d233a32ebae 100644 GIT binary patch literal 6284 zcmcIo&ud&o93SaH6A7h)N)_=TC`l~FrUxOdr8P;Dlg^Ag4dkpo@Il#^DO!5pOxByquN zKX`t)xnlc3?Yg7~PUFc!Zt@jS?!-({9Q5cBT0h*elTJ4LUkl&)N-u70(0_=r1m7p^ zBJ|-2@?DZvAH^I!Hzz%l>v`#sKIY5fEv#q`d&NnS!rLh_q8p>M7>0lL<2Q|1<9xTA z8xRR`PVP*|wG766*x6%PlePu!0sB6X6{QoUituokr z+q`y$v`??w-4|^r?S+39?%j^!pOW_Lg=Nk_`;4f#G;Bys=bzjwAA3S$e3*P{-log^ z%A840q34X?m%c?$RxuakS<{cY;cuL0Zqd|USh>A6e%{944Ue5d9?c?NCd6VDXB@er zkeX7*@V;9%o%%)bscQbx*`0Z_0(~&Xm|vBCnD1OUj`6&ldppHE=Z@#S>AXkUhjwC> z(Yg@HLm%3@=*7;gw2;cohhzIv6w;*g&GOUZ>+3tyYTq-hc0;CH$vCu*?3vaPgI0r+ zR{e65tEhsscJw4(sPv^kTHEuJ zJ3n1x#D2c`Fm2n^<{}(fIyc1QLwURIRot9>w0`&IZk(u|hrZ2@ESw#K8mBctIdqP; zCI5YJ?(F_?TW&(;5!LMS_|HfWQ*rkkQAkbg!57~qZ909hSkODf!>=JU-p%tpU$g9_J@hDM zC)8qi|7md=-HKiJPocX>p`s4s_Z;eKw;|JEjLp6?0lO>!JG=e3wl`rk_xpxUTn^*r zDPgh(ylTJ3x%uhWBR0;xRgyE1vJ6f}A?X}=(iEaArgr)PMW0|CvKBHsnQZ1`8#qrAB+Fb$2&K{j>_)G+nq>Z07R zS{wZXOBcUiEw0qV<|){W{Lp&jEN@u7z4%MsroqhlWOa!2=o{2-oNAPNzv-f?M#n-~ z+2&*_PG>JWFjJ5b#)&ucuP@$5=? zokdl21@$bANQA#n929{9!72zjK&^4@49M-c}8$ooD6hO zM)%3svQLqBmme+K+}F=7`Is;O=neQENZt!V&FWHhfo4Ma}A)a(zQdzu>u! zHE9gL+&4$aQW?%SkekYEQ}>9!TJdHW&!Tj(N}`3)J!1{b{1PKBTR?3_d*<6LfCi!juCt-7OkETb=9rSvSiGFY zy=A<7E9Cr_p7iK%&CSs7x?hj;g6_78AN|(Qce!Ljc~3t2$;+!Lr!I}aUMD*T%|~>> ygZDIw%(jgV3k8A01xn^3a0jHP?*mOHvxs0LDRt9oU8?KZifj{M9L1x-hVL6?+Z_b} diff --git a/MacDown/Localization/zh-Hans.lproj/MPDocument.strings b/MacDown/Localization/zh-Hans.lproj/MPDocument.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/zh-Hans.lproj/MPDocument.strings +++ b/MacDown/Localization/zh-Hans.lproj/MPDocument.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPEditorPreferencesViewController.strings index b5ceb00f24ab1f747b7e4d7e41a64bfdd11d54d0..28198a8c9fb6bf4366853b05cf85873112f41e74 100644 GIT binary patch literal 5174 zcmc&&&u`mg7=AgSO>hOo1v8`(x_PB#gr$SS(yd*(#A)oZq(o$D64%L^CM8MJ;%O?A zh8hV~Sr279O+6sABmV$rP6&z15K>ROATAtMZ8ygA`iq;z{Zc#9&=kc#KEI#8?|I(e ze)jJujgUfijd=T1<%hzs)_L??#zQ(af~!D zrqD9pSEnUBtJ6eRK1q4Hj*$W+Vs!Cf)`t|un2Nab_SSoM-c_*wRbX3jnBsW~En?sGF6yfD zCY9EJfVnX-z5*r+4o3xyGAn$~&+3?6#>xsfTpzH5K}p!!ZH2E_-;ANyvE; zXdZ7pzIED)w{N#j-ym&7%iXo@o2_*A3OOFCOYqJF; zHE2@E4YKesP|P|A*v@C5!J-F;OhS$$-k#8cXlEGPW{+EdJ}jU*sT_^v9K6^Dih|>_ z7IZS@!6K88W7%Jfm|{JDZ3Oq!OF+_qrPYB(!L*tRVO2fNV*ydFnry-y6Fd>tWGZ9MfB{SJ4W_5ipxoMuVj#>FaydBIBhtV`g z=w6d*kK`sn*lZdh^vVI!BevC2+IY!PLw!Oa-On2^n zgVz^P_$A|Fk7ZA7`l2%_gZRX_*jh`_$d|1We8eSFSBq*()s zlykfSG;1C#G6^{rv6f%dHNdq6yXR=he&ekGr{NJ9?C2xxMWr#^#pn!tD-XUoqZFZ~ zHD_KNcX?b@pua5Yxi6tZQEBQJ!?K^Pj|$2miB&gLvEYG=N;d_6q|DefPpoVsKZHL~IH z4w;19JL2vAoxQCf_=d^726k45Cb@%B9BiUj61B+Dx~(E|=|C5!D>zOg<1Tp6$t2|H z{;WRG|1rMZ`lYjJ7D_w0zwW$fq!&_S1+W8El^&S_Dmo30Nh^Snh zazDwDk!upc2cNkzt;6Gaoa3(O5!qh+xcMBN#ohW9rkb|lNij+{mia@%b!g4k@nlxI5v#gri5n>Fd}h zst&h#ysd^&mxn?9ij5eN2WLxQO{H;EyE7i8pn^{3uY?b zPUy4|#5aQWET@1s1aGbYGh0s3uO>EXva>)rgYQNBEou(Gek+kl$gzq&?CQ^VE&l;` CtvtN| literal 1604 zcmbtUO-~b16y5VHUb;fe15t@0aY4b-VnMJI1PzO6=e6^2`UX3%jJjfBtQrUy6Iw`7 zL4t~fm|&m+)rJ3r%vV?b1>ZCSGft-q<8E>$_nvdlx%YK-fB}hD6mS!SMib#Yr7{^n zk`(F#6jKS=_~}CF^!YNF$!BL3KxL4|IfViu6R3)qB4w6OA&?UJ9G{{n2QUE=CWv*o zlbk^*8XL5mT%Jn92nR<7qwGgVSDOduY%qm9RMz3XRoFMm6>DR`Tzh6#Dq3}3tM1g- z-{_A}`1)65@OkNy>vu({>bh(H!FKJ@BUJmN^n#AgE6xQzlP4KG3(mH+%Ols=6Ij zlFSSLqpEwlp{ib3G*-Uquijg=TC*??J*E+iq%*tDZy|1{X>U9xnHxSCF)|1vDLB9- z9CKX2lOIc{Ui@Yqt~av=uTmUmF>ag#*lX+p9_sq) zvi{=0JXx`Ryf$}=`qBrZJg;wk)c0!o(Y97S`hBw2tSacHIzW5B!j2s)5B(RFB*QQ~ z4ztmTGb!hQM+$3Tl->njR7>;2yn;YlCe-gdnvB3i9E#yb4yOxvIP1qHYj2A^9a`;8 z;G`{ye-(XxXL?jPuEN`*>JYkshtMwbKNl@II1y!$f3Ug!UKr!x_50Tx9vATNXw~ET mW+`x_pztn&_A#l&d-!znDjc4ID#tm5F5n?#9oXfZrS}I=At6uz diff --git a/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPExportPanelAccessoryViewController.strings index dc62739dd4df52fa1239199e0da473b851021e87..87312655fb6848f4af98d0cd94211c2aad2c10ba 100644 GIT binary patch literal 476 zcmezWPoF`HL4m=UA%`K6p%@4i7;J%9iNTK{n8Asml%WI&^BMAhDpG-Ja)2_{K=~4e zOd!qyiow)-0@Wk~MM@b`z@o(rl|Ydaps5u=H5owl=|D0EN`v(00YxCD`7 literal 26 hcmdPbQt-=H@X1e3%*m`uO;HFgDay=CFILdf2LNt`2yp-a diff --git a/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPGeneralPreferencesViewController.strings index c22135f133054f75019548b2729e47dc43d5ce39..21504b0b82e59a1f2cd006239fa23823415bb1f5 100644 GIT binary patch literal 2228 zcmb_e&ui0A9RFTK9G<;+2|EsJK^f>oVbculr(LZ9yWx+CIv+h z+|`5FqyK_8FCM%K;=!AU7o`Ue)6e&f5pXu%xJ)-N=WvA=Xbt^2taA(JCA9AhXUtHZ zrqEU)&X28q`ros<`|qE;?0hv&uZr3yzppdPDIAkhXGJQRWXrm;maK&a{#7cY9Ua5l z0&gFTSLim*v$RN^1aB2W&HK#G^JmQ4-+5a6X}l?A;~hZpqjInY{~fp-fzu)8DE|Z% zBoCKN@R$epW`c(bq2}?+eJir9J$s_(rDp+cN;XyGZ$oA{hF6?uF=VNc3+H$*@a}Pu zbWXU3KA&o6MZkq%C(t@B(-o+<1T{KvH%Axoo?8h`R0y>u-yZk%v-9hl$w&d%BZ#vTeDd7rd$(!-TjY7Vee*mt~}!V7lq$@kN^Mx literal 531 zcmdPbQgF^mEG|~CRZ#K^b}B6?$u?2Uq4LD-;x^mSv`vD-%xiB^D`^XQbvSq^4w+MLNL47x zOwTAmb4yZao^C*(uBmGk)GY`BB)2@@GwsE`i4eCu-@ER~uD+-Jo1g4kj>Rqc6+naF zVH8@Bl30?8W@oBTo^D#Wu48&B)J}u|lAX_HZ+SLt0~Q;wMuulza!zSVDkwg5i&Aq^ y6N^*PgS{-NN;j=c*TN|RYAr$l$=atqtsK)kg8 diff --git a/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPHtmlPreferencesViewController.strings index b3d0822ecb2b61387acf2829744eec24c71ac840..891f087a1d19ba0dbe6465753cca2d30a8d464a3 100644 GIT binary patch literal 5112 zcmc&&-)mcC7=9=CYa-rx;niV`xeZR+Ii0SrqTp_2e}Z`BjhDhMWC-4fF!e(4LTG*7?=;DB_O|C72+HAnIp^g4emu|n zyzl#+v%fb?XGx<8DpHDSI5c__=Lrf^42Ma}R6=V}9c>17CM=8i{}QZ5s7hBzryyNK z8=y7Z4^f`d=$XTK87fmt^$X!Ht@_qz5&hoj&NGLnO`NIjs1aDM;E91bgBZ25B55{z z9cO8nj$=)dh1d0*=+1LFJG#!}9>?*2uyfAAP7y3Jmp0b_o*iCKkDVWG-80|YF{54> zio=U*@Zuyi!Mbtkr;g`!JU6@C&jM*3+R>oI232sBp{Y9VtFT(dv%I=uodyq7S;eoZ zYz$ai>W;OOS9e1$yuAiZ=b+vUO`%=E455P_9aTvdLu!0`?LBTPW_EGdJZ8{mH*QAT zKfV88=dSU@h!>{DF>f6QufIRW9_NTzeH&{n0%1XMS9*lCb&OEQ{hABz3y8X9jB=i` zXlE#iv22BPa7z|4?u~afvR9=MbMSEc$D$Y1{`E1TveKvvwu{ild7ui?>u9gQqYVc( z$wJ2V=!|X|!9Sijv}dXe>xL;s7oZLuF%UpI25c1vCdop^bSb>M`_jG_5Bbq$3>llV zI7f3uMQIZXHBkXHWOS}BTtPIYaZO!w^mBY`&>$m4o^@VF^+Lz7E-S2M>nx9#qs>0VPAau*-X;`Fy zY!aO4=w|?DKR(Gq#@9cuMq{PtuJ0uVjV?yL%%efod1RNI%2E7VSN_(3qYPxMkTm`) z2DqxJf6VYfIR|P}}GsfAj z3M>}>(N#X+%J0rb9#ub&9&bSz+;0+N_3J~jklFY)H&b%1>eZ{ie)3(cVtQeMbBYCp z2i3|;2kUrzuQCCf8f?l~uf5j8d_4_|Rp4r=Hh_Me9ZY9GB3a1je!FpJF&OrO!;eSf zO49}Sk2TDwSogiGcQn2Nw97lKJZcv2Ns2h_9vys=g^cf?@KSgJ;HMdgawQkllCot$&*D#3f~BJ$4Bh-0u`2i8^f zUOSDq2d57u3mNf)M0V$|=3OIggtok>F^;wSd+#5EXAJb>FHrnOu(khueo?I2~3PF0pD>fHj$rf TpLY;S7BWKqrWM-i)%Je@xzIQ- literal 759 zcmb7?%TB^T6o&Ua#e^lvfW!oY#0An2YVZMSh*9X7@!M!}Ay1Yz1|kMon5pTe1J#j(2}Jje}vzd^rew!)aI zIMe@01W~OaDk*@Jikt^c_Ze5$30{feYPIMXUEnbqjqX?T-Ml$7E?Z+vm=i$;|BNK2 z;xdPme91Aoz+?P;Yg@OC?~m&-bQ}~(g)&qkO!QkJn#A)m)~jX5>H?3|YB$Wsruq8R z>mH4Ck6tndtbagg4tDn_MMX_j7?ufRp!v2ftx0&PisiI@q4ssTz|)0sw{N_h4$JkL N&(`5X@8ZDO{SV@+`Q88k diff --git a/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPMarkdownPreferencesViewController.strings index 431fe323be4eb5a33d583220cebabe0f32260b99..663bf47126ffc5540ee8c174916dc25a3b90b671 100644 GIT binary patch literal 3008 zcmb`JzfTik7{?#uU{VJX6Bnn3$&j275Jbhn3Mc_9{YAy4DMz7&<65sRwhSf=L=qj1 zgS&~7|AK#kySs~Vc1Az%+tS$fDJ6Kh+}k(3?|b)to}cfZlW`f7s5}x+@>1oB$^-6E ziAzdiQkNQ6S$q@)G#*dx^SmY{Zjb*?^^2&={O8-T(AGVZ4cS5E@?=ToJL(B(N=6*n zmo(!YnMBii^O%fFgt?};_0M-lJMX%2_|r3MBV1w8Bp^35r@I=&F^LUg5ESJl<23r` zJsg@s=eVA`Sr41z34YpUcV7FqHpDNpvWuS_*6dlH6|B(h7fqq_eE;|*9yU*kedQ&< zGfk;5^O;qLFy)ElWoUd!GB)HX>${mWh0Zki`(Z}klI05EbL15s2xOCJFTh^GmnKh3 zL#gMZaBdI&~)X?d?(GUheX{u>H9Rl}~jjSV9-pP3BRmhR56`8e4lF zlz$7dLaaJiqrtdO>~8h=R#WJdzt={JBe@^(OO0$cY|adnhAgm|=rcQ;>oMv8q9j&u zu?dt|0(b>q z(*-1Mk?pCQo~vu>lMj^8(&s`F&;x5$0;zhrdd8Do>y)gyxb%szD>N@9wJ0YuFBQ!$ z_mm>tpnTn^yl|*p2mvI!p6uv;+A-<*uKmPX7hF=5nVnjaQIubro`Gg%P*#9$m8)*D VSrXJrgaDG2PdgU8oVf&QB><+@Ym5K@ diff --git a/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/zh-Hans.lproj/MPTerminalPreferencesViewController.strings index dc62739dd4df52fa1239199e0da473b851021e87..b380125e1a92f663677db04b294f46a0f05d2c3d 100644 GIT binary patch literal 1646 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 literal 1097 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 Dh+}8M diff --git a/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPExportPanelAccessoryViewController.strings index 4da6fb962b5b36762348b1f20171d908957c7d28..3d5985d61a521f47fd3554f471aa463d811181ad 100644 GIT binary patch literal 476 zcmcJLJqp4=5QSf3W8)P<>>@FwvJe{;Ar=u#v=vQ^8kSgO19}CIVBrzGjo@k27xRNf z#7c(QUEaQ#-EW=`0~!u?d*&tQl%}LA6j$bzBvvS7 zWTt220C7oXUOG^je^ORza*3x4NTp$#xvrO!Zdi~ZP(n+e3rRo^Y@8BE)zhBVrxRAc zST*n2=BY1N&v>$Hosu;dmp&;jDXGj!Ek?6EEk8xqEloEx#1m>cLIA_^XDb#z-O~@U F762#hSK|Nx diff --git a/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPGeneralPreferencesViewController.strings index aa9feb64571aba3bc53b25a0a0701404b9338db6..e33065c54084e4fb8d7630d44762130084e2bb0d 100644 GIT binary patch literal 2232 zcmb_eJ#W)c6uk=qRSaF(tg;oENFbyDVrZaMD}|88O;bLk(%8>9iEF2h^WlgHF;PIG z9YD&&Z|IE5&** z;I}{pGAKuF3UT=40U>~KF>@R9A=U765u4x*ihwe4-=qNX4iJL6xNjjE;2FHSinj!a zb;-f3hmjylKFgQ!X>4o!t_N6E2hPMB*XSPBjCOd9%82XOXAkEUj5o(C7AZq>7^@Ih zr}n<^?^$04nFD7tFi%Q3`{IUZ%nv`m4$NQgnC%>nS*cW%ipE*9zN{&0qCtlmJ;OLW zgMStLJuolQI?gv}nffvQDukN<`6nXa$j987x~+iuKUIy@@Nk+QQgGd{^Fwa*pHNZ`weZaC)*oT)K&Fq@!mvaIR2^ z9>%m#A=FxIm$|~T?$g7!AGXV{#Lq%H9g>`$12YF~xZ`ooli3uckGN{{VDkv8wqk5l z2sNAh{-Pblv{n%Q>YbsgbaiRE2|P&4(1 zx1!49p4b~)cr$B`YqBO?y*VmiFjUB2sPVt R#+8lv;qy*@e>Iq}{R=k`c<%rJ literal 1245 zcma)*UvJV-7{>4U6enCRIg)5hG>aEwj%3M1lpyL|TMo4Ba8A>n^6$zmS(q6{E(AlC z=ul_K%r?|b$;Q5or!C*Y7Rp*0F1UUA=lQ+Q^S-eau#N>?2aiBBnT{KbQL>IOj;;cx zFpOM1T_X}uHB?qm1?ZASF%|_4RAfW|$|;O$o~k=vJr#>cVw;cM5ASA*FkOX-;tS`& zN-Po(?o9q3b>Fi7_U+L*@Al1izxYAh?C$bb(>y&MAGPf7H;!mu52LG*NNgUJR)dUj zBnxGQY9WGTNr0&>_`3YkBk+X)f!%9byH^W57RHe>*lcV{0Fx2Wl!DAc&SHkZ)H8U0 zqwYETLcp018n@$HH)m#N#NYqsI~NOB=I70*If0>&C)y$~pM`4$!}IiofTwwQVRi-! z92QQyW-wY3m?8-n*MOuU#}?!jjC7E9ipL7s229Wjh=tpi)dZ}k;63SyN8<|t8oP1g zmfjigFQ3el4`y%Q31R%^t99A34$sVfcUjO4q8l0lRCTs8MbKodur}6Ll&$3k0o^G#4m`hX8L5&)K)zom4 zM6JVW5vq8$x4sbIvqwX|ckCRD7viMY>DesHmzHS-RH&8%5;aJ8i7CoLF#&60){Ds( z0vO}ox%KUepMEskL+kRV-QQoxVPC)g8Il{C0xyA4#Fd2mk;8 diff --git a/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPHtmlPreferencesViewController.strings index bd56570773635a0a0c1209d6c784b025559a502c..33bbdf11ef238e677bbffc9903731df9db9c34d7 100644 GIT binary patch literal 2862 zcmc(h&rcIU6vtmUVho-=t#~6@3KCHuCJK#GEF}sNB2iM>g%|AI#opD5!_4ySt zp?lJ32euK^F$7gi?l4Z0(`p-=$->O$pLqT7VtD3IpQHP0C#IwfqYj%Yh%!Eat<=V3 zvM@7^CE|^6MCZ}vtQ=|2f-8%@GFqkT?!uX-ZdH}0wQ867t;jsk-D!PI`S1kh0lCFk z5F%Nc4|Rs^!vw8iHpf=6v7p%unME`w=zDfr-lni9L$RU9 zDC>fr6m%Gqg_-5&PFFolrovJr@L&CJoJ~-oE6zhuBOkWhl_~n<@obnZ%mg>e|I&Z; zHdUa$s@zv~H5K@#-qX$|D)Vogh9yM~ZJ8mD&)bMh7G|RTy40`E4Q_?uI$s~jkev;x wM*YL7ELmEadHw!a!Sk~j=V3}h_l%CIa#y1g{S|@kOcrKF^(Gj9<2eE2AKa?KHvj+t literal 1530 zcmbu8Ur*Cu6vprQ6mND(^1>z&MdAf)K?)lLyEud4;@x^!3;naTZwKB@V?v@VU?Pbj zhB!55!NB65$b!T#BU{@mzk+YKN}IMzh+gdGSn+R|#`@j+etHL; z?n$S6vDbUm?(KbZ-qh`nPpt1>?6bC0e{Y=~{;EHXx}7yC)l@IgE30{Uh-GOLkka@3 zSfyk;WNNZj#uMv!v9Rfx@`ZpYr+I`}Gc+(~A0PF;9z;zHU0Isv?}WHh+yv%s;rXoT zaeX1cWre>l4x^;_aryp$NR-N=%zo^`SsDVMqO6tN@q*VoYp&qr4XmxqdVF69@U7Mh zmW1{0qT8rJD*-(o}Wfdo20t{pWmYFkK_R6we!6hSva%)%P~w(c=~A;28GPrJFxf{qS2G~c`k3WO6T zlNzpO@C;Y+h`taYUUq&s&E43LhvG7@PE47i3cKns6;d-er(mO2^{BoOpgM2&?bZo< zQr({~W7%<8E@>)+wpu9^a4m;#FD!aAUkK2wXU*s`;|N)zmQ7M-84@Los?G_xWZ-4G W>Y;ogfMOSFx9Z*fhSmD)GXDVUyZ?3o diff --git a/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPMarkdownPreferencesViewController.strings index bd79fad6f85a6a28e9ba7041aefff042a8d4b516..ac14de7d2bfd28c875bc8dfec7374e28a01fe310 100644 GIT binary patch literal 640 zcmb`Exe5X?6h&`6e_$t;1EXMJBQ`FG2rA>+*hH`nz#En zt+@MU|IKNxBp!}h{GLNqS&a`T6Jd6;Dv{a$or2J0j#r=w`4Y=9*>5kG4%RT*st|gm T=;^KE(JK>S_OjjK;nl4RfTm*j literal 333 zcmdPbQgF^mEG|~CRZ#K^b}B6?$u?hvucE7Ug8-r2+;0ld@8i zOFUgb;_fL$xJl!xq-DK|& TsD%gtBnzMH=z6wdCdh*T*-UCT diff --git a/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings b/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings index dc62739d..e69de29b 100644 --- a/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings +++ b/MacDown/Localization/zh-Hant.lproj/MPTerminalPreferencesViewController.strings @@ -1 +0,0 @@ -/* No Localized Strings */ \ No newline at end of file diff --git a/MacDown/Localization/zh-Hant.lproj/MainMenu.strings b/MacDown/Localization/zh-Hant.lproj/MainMenu.strings index db50374c8cf9bc82259803b90ef5528ffa53089c..07936fef50ae372a8c1ed45b30f4f7f9fd0bf93a 100644 GIT binary patch literal 17608 zcmcIsOKh826}~J+h?JphC_-Z47HNtqc{)v+P74g0=AE>D#c`apRVzDooH&l{q5NISMHbpFWf8V`x>-ztXef^hPS#eV5 zIRE*4Uf((A{{8QNPO1|sriN8b71VV+V(JZi9aBk_RS8vAb+xG`)dqfA#jD@M?>5vj zzG`^I%1+?tf-2#89k2C&Dwk44RmE!yke*Z{Po-Z|d6iaiHKPXcoKZXYm-)*l)JfHc zpCyS`pSkX_r+@1!)r$}975nhsUeI(xF$P?9pfJDhr2Q$NdL4S#pk*BLJ9xBfFGuOOo@bfDEMW1Zw*ScG;A5xRRHVxT0@J+$<+pQ-_ z$OwQ3rbYXsrA^Q~&IV1Rdx1Eu58s1n07JiSb zS#=SAqusA02^rBJ?!SE?UENofI1f!5Kp7R|pjrVkq9an~?Q8&}Bq3w`_~3)`i^Mnz z?V3Qj4wS|Yo$~o0@<$VR%4!SGr|`WNLKT*fQJuZ_kBrY~8bvjtFS-z9knQ6t1%EZs zG!sG)mXHyAa^vJZp9rS$d6r;@?g-96W(m6Q>AW@z9F}WXMj%PZ2yX5FIO`L^Ff=2F zSwTiH^(Llr@R*XWI%UNBE3xkA&cYWjYTq)^lU8#9`$!Tpx<}PNRsOd4xa<>Q79O?^ zKU)FL4WM1u*`eaBL+4OCnZ+}BZyX+2dzvM!)g%cS*NN%U{omd2i7E$e3?r>UzdEpW zx6(Ov7Iuxp(iiZY2FIHUSV@wQ(Hva$izTh?Q-^h2zE%LMu0j7($nS9=7z^cSNkT^P z<>_YjRmF!-yX3Vsm=m@g7Ae3U%xfi}iKAC2g0&eNTK|$HWGwgZJlOMzqP^oe?Lac5 z=sR&B;4>MX^+tlZFS4LnywJ_%-TVo$*e&4A=79quopF=knN0r=9Yk%lY|95ty)FR&4jRoC1fnVYp!9|uAZ(0w#H0-8nuiz z*+Z3X&ufx|jKFtKXJ&1jj*>N05HXx5mhgQX)tB8TXNv2Nm>EHqCo^RwBf>4@@pgog zgpBZC#r)-8Wp9^1tg*xM89kirH+skbBgoLiQNU-wDZ(8qi#lkTri)y?@7t=Bz9==wpy|%DQ9Nm2i@~i0B}P zV~sTLuoY60kTrk*?iUuLXzt2WoM6^bPr4%*M}8vv&THREqv8iAH;wmNq?7xPQ1Gv?l49(3X z2^q<^mi+EJIYVbZ$z2Aw?+rZL9@BPIop4$fyiuTny^}M7bQu^xEc??vAdM{WZx&6 z_Rey^fo28Tr+_A-xmO7`Dg-j0Bq5_Qou#>=ug-D^zGs=Tv5xh_G5m&mcUOE}1Sg}t z3g`;r$b@s~4UC0t{*xqRgtXN^cc0u;mA+&t()kH<#a8yQxu^F$kwkqR0D?h0;^@)R z$mi`iBncUZ?>y1&bEh0Wmqg`ax4f>o=O`G%ObAI>LPlbI&Ro%#&qd=uoPUx#G&Cmi z*1Zs#u!M{zD*x%^RhIX};Pae$k^{Noq=5)w-=Bg!InZ)wh9ODFILLuipLe}FsH_i=% zRtihVsIH`oE51)rjQ|VxB<{|&3CyfV89gW5M2)o_yREB|gp7nc_$Z!cKCy5$jkc3Z z!*ZP04#9@(k2XScCrLs^;Cm-$S+=WlZK8YFf%b#C2j}^YV3bG_GKS~h;kf$nR!&R8 zw|1PhXbn7#GlfOn8D$YGHd|QVk|bnQ%w>nX=Q7TBD$vSo7B`Teo6af2n(pnG(YTAx zB41nx#J(gUqx#Il;)55nF};MmMlRDmk4=M(lJ(Rzw;sh#>U02$Bq3w@cKP^xl<0SP z+q1jg-g>%e*pK|+3~)0a^gqRK{Y{dP(QvQpyQiCie(X1G@AE7|v(4^qtt{e+Ck-2V zi?|B@ZM%1iPm+-FJ$dKJ%{PlX`%!n-opN^X=Owe~+{kd4mATv94s}41gp9)XdC3+p zZLv1)56I%U;j#Iv6EBzn*Wm`7Ke0C zUW28AJ5fnO#&vw&@2Q9cP_*t&plA28apbuvGF5Z`#SXYn@XiZKLPiwSAnFFPQ?6_O zyWKOyCORL}!|~k86mp*3+FQ?)BznQ)Gp2^|DZ3^=o0t-rb1U3_ZK7HQeNB>(kyNJ- zMcP5SxZETn+c53!)|f>O>e?(;5$I4V*V*{&UzBq8I9ng`5v!d-T6_lD%bXV~YQK^MofI3w_}cFiRT zS##g_hOi5DodM6oYMh5o!I$EQp>aX~u!OAt&F#{S)0#!EHr%4hril{ZwWe>}sjhA$?!wz)k-E8A{(692LJS<7b z2*{gxHD5MJBL|H+r!;er;k`u(L_Y7dCwrBCT}Sdb_ZZ|^l7x&P>KQv%OxU@mYf3u@#?P&7UHAAY z*dXjvVF?)n?;Y^(Q5H$-JSsPboR5?1mz_~F4=*Ddo#<@kYF4v=8Cvj+wOdAdOHIv#<0Xj`ukw=QO}6DkSe6u9UgD=P0|n^-VX8=I zAOj=>I+GrjhUxAM1p2#7MY8=Z=E|0IFV_k!_v;^|pU=H#SFV1?_(iT-W&X-sj`SM>FRZvCVQ0I8Az*m?tq{VXA_`EtFFyxVJ98z9LG~?(WzPoyf5U%u|y=?q1 z{rFM$;EwU|rAt=_P$VWKNCgTpnwtc11f*uuL|}nL+~3#UZ94;KTY{2`ObOLQkzw-{ zo|kCiY73TUAg~g&h_*lwyPNN|n=iGS$DOB#+JATT;{)w%$K4M|RXC|ylq+RU6=bPO z;m728NJ_90_M3Pt5P0qANA2B?_V%aF=PiBbi8C0zz`j9N;raX;#Tu`$u;PQLJZG}7 zK(IO|PrJ`PI3wu8b+|!KFbW$!P)2Gd1PcU2AL0fRH9=(}Ts|N-=*#m|bKt2$W>K(U zwm`tTPY%0#+xQhueo0#vEC?!feBML|VjQw8Wx}vPz}mkZch26rJ3e1du3coBx0HcQ z4h0))(QJXBbsz5QduKzM)>P!mfN^C7_&SX8qJ^^s0@pb^)oy)sXIzpm$kYi=6xN`{ zLWVQ4jgdgGKtQ^GyP@5C<__XtGsh);$sm@Sa7kGrl(X8!k3pqc3@$W1|h&G-d|RahWEX8uPHyNR=S zg)j0IUdlUN-ApV5(Fly@vlh@62%vU-M|=6XbNpI+^Z3e@EAF@~SLYd@gS*T$CLxpp zVccgiZGmL&ywYC(fP6(idElC99_s{ktO1W7;z3vsTS*KH1kpTJ^st*_^^0> zeyHtyukYQ`KkW8{(fK!^*Vt7qBk&E17fh_ciUOIaRnDJtz6l8XO6|yqKr>sPY1rqY>&Fl~HBJh%>s$Ti~)#RAI_%^&wawk-aj| zx%J`v^n3l^2ilGIDB`-$Z?>Pjac3{PCN~(LXcRQEi(M#;0jh0E+A6GAAn6Bh+eaT! z!`J=$u{+#M#fSvNGt3TEWQi`Zi@`DAk}$GlKO;G7b5YTdAC>~i2Cz0*UhY%!bWM(Vi_te2yUb-kS&m){$zk2c9X(b zzET%ZS)fr78RRlZrIv-V1roJ?SKEH%4iph2p)9oMbQxQoglq^DIb(vb@D*s&=*;h2 zkWA=UpA!l^?$*BY%b3^zDGs?r)Z*C!!RtQ$x$|%bzrxK)8eKYr3T<7GYxHr(8WAY3 zK_X&XX$u4uOZQ%gKvXWraZ{f-9lGpl&g?(SpJT1ZJ%ShXoRQeP4fl z_^p8iz19waxL8{SVPL|FDtr8M_BY zqbg-0JEDN>hw`G4&J7c>KyW+1eJ~Q&)+YJ^?YB3y{kzWQqIcLA7jzm(*l+~m3T!m2 z+=T@aH^e~Fi@jbL@C_!;4fN5eNe|RjSWa7=9~KB=KLESW?{{8(*6wcpv2|G#eKOsq zqzaS31;8sBBa(5LSRh!aM`@otbVkrl>E{$d<;1}}mJY7KOclg+%m1-Jpo|T}+n?N_ z=F8kFoh>t^BybJz`qHLBSRg6;d+n`T&Xlh_VsQG-dZu8a2%dm7pkjdl3^RR42b#w$ zSB0<-)LENh3j_mo{o3JE)Ty3-`qkMK`flQZ&|u@W6pBJ549QB?JTWW~F!ZSFuFJ^t z4xE-3BoD+!Y>q7uoc=;)C{(ZOPx6Y$<@rJEa&QB}bC4=pbs7r;*z?m@C|R9!H)b8b`d&`@j;$UL}G6}18Vu9eg+Vav)8R1GivnV&vlH1P>%>0Gv2>1iQMJzBDNN{hr z?CzZBQjx{M7%0q^VOd056D#DfKyZv_T}Oa}*AyaE$j?K$WzF7LASgq54XVw^706bu zkPL%Ig5}n#=_6PmAj2#v<6Kpx17J1dgR}>#g+-Hs1%lFfe}jLi>|K|t(WshGERfLN>hMoFk6%_c7^7&Q_mlCVRwtqEg*nw4fw4ekJB0}CL^GnCFRj<)0e@8+1&HKeJ!-W>SRi=X*>3y61tVE_uu!#5ioqYpYE_AA_3< zR*#1T0%pBnn2mX_=SeGybI(&RXJDcLlh@|Wlf(kS9cJL|Z4Qht!st7r!{VSZR{~!G zgqYQqV1WSk7YF?T^}@vg?ULrc)u`WO05rsPnDIe;!P=l>fgqZnjL^ewyv5-L8%hPn z*CCR(x<@P!m|V*aCqWX6EdD#9(W=DoP(Ur#~QRO@ttng>lK6v#~%R zyZz4@_wTg7{0n_)b9attL4w@9!mU;~WsSPE)?5(6i!jAo!Hoq1YpzP({L;Dq*cu From 4cd12ce50ae29195e262ed92bfa4f748ff26dde2 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 May 2018 15:53:32 +0800 Subject: [PATCH 372/439] Upgrade pip --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4698997d..c93267bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ env: install: - bundle install - travis_wait bundle exec pod install +- pip install --upgrade pip - pip install --user transifex-client before_script: - set -o pipefail From 963dc1f95c350f8d1dd3757f941f76325cd30e06 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 May 2018 16:01:01 +0800 Subject: [PATCH 373/439] Get a fresh pip copy https://pip.readthedocs.io/en/stable/installing/ --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c93267bc..b81cb141 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,9 @@ env: install: - bundle install - travis_wait bundle exec pod install -- pip install --upgrade pip -- pip install --user transifex-client +- curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py +- python get-pip.py --user +- python -m pip install --user transifex-client before_script: - set -o pipefail script: From 2b3eec645079fdbe5643d52401ae952203882fbd Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 May 2018 16:10:54 +0800 Subject: [PATCH 374/439] Use the user pip --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b81cb141..9de39966 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ install: - travis_wait bundle exec pod install - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python get-pip.py --user -- python -m pip install --user transifex-client +- ~/Library/Python/2.7/bin/pip install --user transifex-client before_script: - set -o pipefail script: From 7ff5553541b964c46df7040b29c740ec46607fdf Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 May 2018 16:15:03 +0800 Subject: [PATCH 375/439] No --user --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9de39966..14e7c93c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,8 @@ install: - bundle install - travis_wait bundle exec pod install - curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py -- python get-pip.py --user -- ~/Library/Python/2.7/bin/pip install --user transifex-client +- python get-pip.py +- python -m pip install transifex-client before_script: - set -o pipefail script: From bc1a9c1ae28e426ba10db57f5515ad5961b5494c Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 2 May 2018 16:25:07 +0800 Subject: [PATCH 376/439] Upgrade Xcode --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 14e7c93c..5cd37470 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -osx_image: xcode9.2 +osx_image: xcode9.3 language: objective-c cache: - bundler @@ -10,9 +10,7 @@ env: install: - bundle install - travis_wait bundle exec pod install -- curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py -- python get-pip.py -- python -m pip install transifex-client +- python -m pip install --user transifex-client before_script: - set -o pipefail script: From 9f9d8a66a1e5ae54174ee8ec3cfd1dc8a52bad6c Mon Sep 17 00:00:00 2001 From: shuchenliu Date: Wed, 2 May 2018 18:36:50 -0700 Subject: [PATCH 377/439] Add auto-complete support for Guillemets --- MacDown/Code/Extension/NSTextView+Autocomplete.m | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/MacDown/Code/Extension/NSTextView+Autocomplete.m b/MacDown/Code/Extension/NSTextView+Autocomplete.m index b904f83c..b27df5ad 100644 --- a/MacDown/Code/Extension/NSTextView+Autocomplete.m +++ b/MacDown/Code/Extension/NSTextView+Autocomplete.m @@ -15,6 +15,14 @@ static const unichar kMPRightSingleQuotation = L'\u2019'; static const unichar kMPLeftDoubleQuotation = L'\u201c'; static const unichar kMPRightDoubleQuotation = L'\u201d'; +static const unichar kMPLeftAngleSingleQuotation = L'\u2039'; +static const unichar kMPRightAngleSingleQuotation = L'\u203a'; +static const unichar kMPLeftAngleDoubleQuotation = L'\u00ab'; +static const unichar kMPRightAngleDoubleQuotation = L'\u00bb'; +static const unichar kMPLeftAngleSingleBracket = L'\u3008'; +static const unichar kMPRightAngleSingleBracket = L'\u3009'; +static const unichar kMPLeftAngleDoubleBracket = L'\u300a'; +static const unichar kMPRightAngleDoubleBracket = L'\u300b'; static const unichar kMPMatchingCharactersMap[][2] = { {L'(', L')'}, @@ -28,6 +36,10 @@ {L'\u300e', L'\u300f'}, // white corner brackets {kMPLeftSingleQuotation, kMPRightSingleQuotation}, {kMPLeftDoubleQuotation, kMPRightDoubleQuotation}, + {kMPLeftAngleSingleQuotation, kMPRightAngleSingleQuotation}, // Latin Single Guillemet + {kMPLeftAngleDoubleQuotation, kMPRightAngleDoubleQuotation}, // Latin Double Guillemet + {kMPLeftAngleSingleBracket, kMPRightAngleSingleBracket}, // East Asian Single Guillemet + {kMPLeftAngleDoubleBracket, kMPRightAngleDoubleBracket}, // East Asian Double Guillemet {L'\0', L'\0'}, }; From 1bf9de5859a3590fda448a746771a6ef60a34b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Sun, 13 May 2018 11:34:43 +0200 Subject: [PATCH 378/439] renamed Touch Bar icons --- .../TouchBar Icons/Contents.json | 6 ++++++ .../HideEditor.imageset/Contents.json | 17 ----------------- .../HideEditor.imageset/HideEditor@2x.png | Bin 653 -> 0 bytes .../HidePreview.imageset/Contents.json | 17 ----------------- .../HidePreview.imageset/HidePreview@2x.png | Bin 770 -> 0 bytes .../Highlight.imageset/Contents.json | 17 ----------------- .../Image.imageset/Contents.json | 17 ----------------- .../TouchBar Icons/Image.imageset/Image@2x.png | Bin 1003 -> 0 bytes .../InlineCode.imageset/Contents.json | 17 ----------------- .../TouchBar Icons/Link.imageset/Contents.json | 17 ----------------- .../OrderedList.imageset/Contents.json | 17 ----------------- .../ShiftLeft.imageset/Contents.json | 17 ----------------- .../ShiftRight.imageset/Contents.json | 17 ----------------- .../Strikethrough.imageset/Contents.json | 17 ----------------- .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconBlockquote@2x.png} | Bin .../Contents.json | 2 +- .../TouchBarIconComment@2x.png} | Bin .../Contents.json | 2 +- .../TouchBarIconCopyHTML@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconEditorAndPreview@2x.png | Bin 0 -> 322 bytes .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconHeadings@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconHideEditor@2x.png | Bin 0 -> 489 bytes .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconHidePreview@2x.png | Bin 0 -> 486 bytes .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconHighlight@2x.png} | Bin .../Contents.json | 2 +- .../TouchBarIconImage@2x.png | Bin 0 -> 1054 bytes .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconInlineCode@2x.png} | Bin .../Contents.json | 2 +- .../TouchBarIconLink@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconOrderedList@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconShiftLeft@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconShiftRight@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconStrikethrough@2x.png} | Bin .../Contents.json | 17 +++++++++++++++++ .../TouchBarIconUnorderedList@2x.png} | Bin .../UnorderedList.imageset/Contents.json | 17 ----------------- 47 files changed, 214 insertions(+), 191 deletions(-) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/HideEditor@2x.png delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/HidePreview@2x.png delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Image@2x.png delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{Blockquote.imageset/Blockquote@2x.png => TouchBarIconBlockquote.imageset/TouchBarIconBlockquote@2x.png} (100%) rename MacDown/Images.xcassets/TouchBar Icons/{CopyHTML.imageset => TouchBarIconComment.imageset}/Contents.json (79%) rename MacDown/Images.xcassets/TouchBar Icons/{Comment.imageset/Comment@2x.png => TouchBarIconComment.imageset/TouchBarIconComment@2x.png} (100%) rename MacDown/Images.xcassets/TouchBar Icons/{Headings.imageset => TouchBarIconCopyHTML.imageset}/Contents.json (79%) rename MacDown/Images.xcassets/TouchBar Icons/{CopyHTML.imageset/CopyHTML@2x.png => TouchBarIconCopyHTML.imageset/TouchBarIconCopyHTML@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/TouchBarIconEditorAndPreview@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHeadings.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{Headings.imageset/Headings@2x.png => TouchBarIconHeadings.imageset/TouchBarIconHeadings@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHideEditor.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHideEditor.imageset/TouchBarIconHideEditor@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/TouchBarIconHidePreview@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{Highlight.imageset/Highlight@2x.png => TouchBarIconHighlight.imageset/TouchBarIconHighlight@2x.png} (100%) rename MacDown/Images.xcassets/TouchBar Icons/{Comment.imageset => TouchBarIconImage.imageset}/Contents.json (80%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/TouchBarIconImage@2x.png create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{InlineCode.imageset/InlineCode@2x.png => TouchBarIconInlineCode.imageset/TouchBarIconInlineCode@2x.png} (100%) rename MacDown/Images.xcassets/TouchBar Icons/{Blockquote.imageset => TouchBarIconLink.imageset}/Contents.json (80%) rename MacDown/Images.xcassets/TouchBar Icons/{Link.imageset/Link@2x.png => TouchBarIconLink.imageset/TouchBarIconLink@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{OrderedList.imageset/OrderedList@2x.png => TouchBarIconOrderedList.imageset/TouchBarIconOrderedList@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{ShiftLeft.imageset/ShiftLeft@2x.png => TouchBarIconShiftLeft.imageset/TouchBarIconShiftLeft@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{ShiftRight.imageset/ShiftRight@2x.png => TouchBarIconShiftRight.imageset/TouchBarIconShiftRight@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{Strikethrough.imageset/Strikethrough@2x.png => TouchBarIconStrikethrough.imageset/TouchBarIconStrikethrough@2x.png} (100%) create mode 100644 MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json rename MacDown/Images.xcassets/TouchBar Icons/{UnorderedList.imageset/UnorderedList@2x.png => TouchBarIconUnorderedList.imageset/TouchBarIconUnorderedList@2x.png} (100%) delete mode 100644 MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json diff --git a/MacDown/Images.xcassets/TouchBar Icons/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/Contents.json deleted file mode 100644 index 95fbdd75..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "HideEditor@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/HideEditor@2x.png b/MacDown/Images.xcassets/TouchBar Icons/HideEditor.imageset/HideEditor@2x.png deleted file mode 100644 index a8b1a9b13f6c39185f7b8751fbe716e31fd95cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)V2iUK*Jq6m{s;aul!X>H83Xtf8e6`5AO>q}~jplcy85gj< zh@5v~J=6PjpWsT8IJtM!lTU)V~+_YS}bkoRl0Pdi&#n>OozG~_mS zX!5XP9dp7Sb;_9ZZ3pAqxA$vl&suZ9EN5q@dF4#SXflD#txKoMc?hfdU(a<; z?#^6{hL!iwJVw%W{@Qoyo{WQ5vxp? zy|HtyoKvutcEYZ5CSpn}Sjt&`+c8!=NB@iaL44?hpO4g>&mtc)n#g7SQ_J}rY9I{; nf`MQl7zhS}fnXpQSe}7jhu-dJ-YxBy00000NkvXXu0mjfikUWD diff --git a/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json deleted file mode 100644 index 4aee5eb8..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "HidePreview@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/HidePreview@2x.png b/MacDown/Images.xcassets/TouchBar Icons/HidePreview.imageset/HidePreview@2x.png deleted file mode 100644 index d072aef87d0dea029d407fa308eed1de81309d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)`e zn@1o`(++e3T|#3Qs*!5#)JDc6h`rHbeG^y1iOY#hOZfY)mnH{$&MU8iXF+J$F8B50=_ixHJ^Q{i9IX1DvXP7X{ zyTJYQ?kZs0zO1m2^EQ*tgn*PL8CpbN=+^1%Q)}oIj+)K{Oz4K2OJ^UNnAn}s*{9Z! zD;zzY37A9rCy;p284tGs<~@a;K#!r>c96ESFVGqE5wEpZ9JeFVr?k)08L>m?4K#b2 z!?X&;Q0%a(W1gWZ*6NogL0skD88Hd;3i=846&gchtsgr)p|znZhcpS|<}7wp%nM%^ zddFh8`Gu1)v~QGbx>hE)xY#Y`r*j@$<`-R)Btc9Mn$eSvzxK{JZ$oELn~aOaAds52 z$rBvyk}-LF(I-C7Gr+J7g3C!~_@_KiiT&q$8!@!nE}0hV;lV{8KM(O*vVy@U^0ck@ zs%IX*a0zONkx-gwXp?49njl0cbJop%KeSB47p&pZpLF2gtJji~*8E07Ae+i}g`x*LSlx(_2KH7eY1hKh@29yQm8DNz8`89-8(wfJIwtZ@~&h3)~v0_?V zCtSlJtu@4ZcvYtPv2I~%ro8mI7@Y)b*mTB!gXW)$(KTLLkd!9b;9b&MT5Hf1ZUU`? zHf&b9APNM20Kzt$I$k&kQ~&?~07*qoM6N<$f+X-~ AS^xk5 diff --git a/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json deleted file mode 100644 index a075af3f..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Highlight@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json deleted file mode 100644 index 5b3fdffd..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Image@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Image@2x.png b/MacDown/Images.xcassets/TouchBar Icons/Image.imageset/Image@2x.png deleted file mode 100644 index 97c10c520994c233e1f362165bf511f53b490f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003 zcmVv@yKSv6mKUJ& z@Nam~BsH9i6<1-BQJm(6kZw*^98Id#9<{OD6f1=`r6 zxJJIVK*)RB=8p6)$jQ8dZG2u#V|yDQUS5 zi)XwBehn*KN124>>MF?_UFvC~PLVdJSG^7hb1s{CH*7)JXN>O?`l$GkQ?OiZrPLv& z4v{veSKSqa_&u;KTvD8j7PSTayBH!mZi~fsQ5}(t9b(pJ=Xup#K!{xr+x@81f1&J! zAE*I22ghDj84ts9J1fNwF*Sc&VsR{F#TC%~LeLk*^8}F`MAeCia?wV%rXXGrl+I z>(rkoiAfz|Cdc5eFh$6|du)n%i5^=J<3q6QW8wXIi%i;ywI@2mMM}nc8!tj+?;HGQ zO^oc#9a-SmC*aLlzC0W8$wLg&Kgyfa*scH~lgTh`gMWxGq6^8GrepFZ53#>cP4ni? z*OiF0K@3;J&&3|mQ{)O8<4Y%R@(>fq)SH+WJjtwN6JoofcBDKnC#>JMPJTJWEX7_~ zz2R8|O^R(FY~Q9%sIN_#Rf~7LBnabC*nWMu;~g|7VX~H-ux92Y2;*DE_5poEGlc51 z4Q}i_sh*)iqy<4gmKaxlrdEI|4YAmz!F2-wv46zN;iPo6Zq7RM0ImH;yb~Tkv${ef zU!bpbO4J}2tTEXBigNnY68lM3RtG>kiFpLK^V};dAnlirX}kII@FeZZwm20|V);rp z4GYkqNotsOS#0fsxzb&DP#?tQF}QRe#A|mcObi_e9S9u=9S9u=9S9u=9S9u=9r&+1 Z@CQ>qJFeF;C+PqH002ovPDHLkV1oT}&Cvh= diff --git a/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json deleted file mode 100644 index 72385e47..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "InlineCode@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Contents.json deleted file mode 100644 index e6e81595..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Link@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json deleted file mode 100644 index 88afe703..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "OrderedList@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json deleted file mode 100644 index e44affd8..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "ShiftLeft@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json deleted file mode 100644 index 061635c8..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "ShiftRight@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json deleted file mode 100644 index 66c49911..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "Strikethrough@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json new file mode 100644 index 00000000..67b6221c --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconBlockquote@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Blockquote@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/TouchBarIconBlockquote@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Blockquote@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/TouchBarIconBlockquote@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json similarity index 79% rename from MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/Contents.json rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json index 6064e380..d15fa2cc 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "mac", - "filename" : "CopyHTML@2x.png", + "filename" : "TouchBarIconComment@2x.png", "scale" : "2x" } ], diff --git a/MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Comment@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/TouchBarIconComment@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Comment@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/TouchBarIconComment@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json similarity index 79% rename from MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json index 778d8319..33d60e73 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/Headings.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "mac", - "filename" : "Headings@2x.png", + "filename" : "TouchBarIconCopyHTML@2x.png", "scale" : "2x" } ], diff --git a/MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/CopyHTML@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/TouchBarIconCopyHTML@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/CopyHTML.imageset/CopyHTML@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/TouchBarIconCopyHTML@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json new file mode 100644 index 00000000..c73c4a7b --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconEditorAndPreview@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/TouchBarIconEditorAndPreview@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/TouchBarIconEditorAndPreview@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c830b73d08f802ee706073c553a86abbcb0e83 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8Ea{HEjtmSN`?>!lvI6-(JzX3_ zGFacv3gl`w5McGS-{V}pV&3WEFC4a0Y~6M-wq7_Ysb6BOCIM*~_x&aX2tA z2{bUUC@?T`{F&!)u5ydv%^A5{>ZZzhuYa6qbeeH3``fI}+=N@>q%&;fXkZI4QB&S#z z9&42(R-SIo(n5nb6FNi!lvNA9*F7R}5 z49Q@9JIm4QaDa%bG`noMS{Zk2qk>br-y9F|hkm>I_(WryJr0WQXzel%PpIiv`>;Z# z@mpQd{CoVFa)0JeuYR|`xuwMD;soX*2fh=GmI~}o8e}FgKb2kax+?4Vt-iUkZw{O8 zy7uzoITPL+j{INO{%%;k&-3+`%|E;MnYI+mhlZZrUBb(F{o$e80sK?Vw>{Vw`6Y>I znzQ&EtM|9>eB1E5v}o?u?gP(PUwE&0W$|>?hIF^B87KC={bOU5DiFZ*kNp1#&#iNGxjYZa*(R_9b3Rz8kl0x~iZepxJTeEGPCZCSsukcI1m#1nxFxlwFxV+Pp>&D{QO4mFdh-`FYTHav_v}Mi3179|} zF<(9|#p@&gTIj%)je3kevS7x$KYg!O{eQ&%aiQ!zi;7K!d(v({{Qq_Nv=nRYohV_r c*y;oGpRc7k;q9V-fpN#+>FVdQ&MBb@01aQ^?EnA( literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json new file mode 100644 index 00000000..5f7625fe --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconHidePreview@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/TouchBarIconHidePreview@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/TouchBarIconHidePreview@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d5fd5222b334c5a7abf3a66b51161ef2e474d0 GIT binary patch literal 486 zcmV@P)K}y3=6h#{c9Xk`d1?d6`;u4&Qt8g8KuD}I!Xu(B@;0oMA z#aUNid=Gx)Ax&z+yWtY=htNmz^Zq^e-$B!KHq(#;azGBq0XZNCTHW!D_SYadlrE!uRQ0fg>3=D}iGcY99%)pRXvjeBcnjJVj z*6hF@>o|U%dE?1GH9PRR!CVy}e{6j219xmLJMhXxHyU5;hm6l-5Pi-y&HCIk=G^PB z*i)znm(0NFadwxOfz#v64xAomW?)F1nSmj3W(J1DnH3loXI5ZXoLPZkab^UD#+eZq z8fQk}80Vb}%pR@pQGKB)z7Rk4U3#1C@Cf~eYqlN!Uw>*DVK=md9FPNYKn}i_@% literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json new file mode 100644 index 00000000..0aca332c --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconHighlight@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Highlight@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/TouchBarIconHighlight@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/Highlight.imageset/Highlight@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/TouchBarIconHighlight@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json similarity index 80% rename from MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Contents.json rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json index e1bc85f1..0e16ddcc 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/Comment.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "mac", - "filename" : "Comment@2x.png", + "filename" : "TouchBarIconImage@2x.png", "scale" : "2x" } ], diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/TouchBarIconImage@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/TouchBarIconImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0fc416b46a18050f8200e7eef4968a2a85a286 GIT binary patch literal 1054 zcmV+(1mXLMP)$15xs#$ zg^WSuE}~?bGHF~BnTHYHBoResC{sqGG->AeE$w|;-`DZY+27@yBYV|<_FDV0)_<+N zzwhibr>4e>uYj+BuYj+BuYj+BuYj+BuYj+BuRvB6$mjF*pab-Ra!U^ZC3byQ`33wE zXb%_yl@{T!J3y`kBUi$l!W05XRUd&-h0e+n^?ahek$%b$)&ySVbWZvShhJYk(rN_mS>yge|=Nu!awRT-vtz>I`xp1kLXVG%c zy!8oZUgC%VoYM7RUBr~~4#{(4CGE)g-C=#x?idV1%3Jq`@-LT) z6;TA$+yuj!af+s3*{dO{pMvxFgY8q7AN`f1-7eKhSY&|vH#+LK1t z%}-w*mspWRt8JHSWNA8tO-At%AgMtpCvMw~YF zgdsE+A}17?JLu1V>~b@(JBC{G66 z?rtWt)hau=`wl3(Dpl8n?PXq)(Yx7+{i2K+PFJxsC)HhCbxruWa$_$5pXdvG&sB4> zQ02X`RXNt2RCjUJzHEw*hI%>1i|Kj{TniQQl$t4T>;^6#PfGRZL>$NRD_s-F>NB=f z-ZD=(G`S?};yf^yovsI!`axWNgfHI@;(^S);Va-P;49!O;49!O;49!O;49!O@ZVJ6 YH-$+s4wapj#sB~S07*qoM6N<$f}~ge_W%F@ literal 0 HcmV?d00001 diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json new file mode 100644 index 00000000..583d27dc --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconInlineCode@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/InlineCode@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/TouchBarIconInlineCode@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/InlineCode.imageset/InlineCode@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/TouchBarIconInlineCode@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json similarity index 80% rename from MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Contents.json rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json index 5b877cb3..395b867a 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/Blockquote.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "mac", - "filename" : "Blockquote@2x.png", + "filename" : "TouchBarIconLink@2x.png", "scale" : "2x" } ], diff --git a/MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Link@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/TouchBarIconLink@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/Link.imageset/Link@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/TouchBarIconLink@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json new file mode 100644 index 00000000..b1c1ba68 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconOrderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/OrderedList@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/TouchBarIconOrderedList@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/OrderedList.imageset/OrderedList@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/TouchBarIconOrderedList@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json new file mode 100644 index 00000000..2412818c --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconShiftLeft@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/ShiftLeft@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/TouchBarIconShiftLeft@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/ShiftLeft.imageset/ShiftLeft@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/TouchBarIconShiftLeft@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json new file mode 100644 index 00000000..d6072221 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconShiftRight@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/ShiftRight@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/TouchBarIconShiftRight@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/ShiftRight.imageset/ShiftRight@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/TouchBarIconShiftRight@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json new file mode 100644 index 00000000..8318fee8 --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconStrikethrough@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Strikethrough@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/TouchBarIconStrikethrough@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/Strikethrough.imageset/Strikethrough@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/TouchBarIconStrikethrough@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json new file mode 100644 index 00000000..c234401b --- /dev/null +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "idiom" : "mac", + "filename" : "TouchBarIconUnorderedList@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/UnorderedList@2x.png b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/TouchBarIconUnorderedList@2x.png similarity index 100% rename from MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/UnorderedList@2x.png rename to MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/TouchBarIconUnorderedList@2x.png diff --git a/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json deleted file mode 100644 index 2f491c9c..00000000 --- a/MacDown/Images.xcassets/TouchBar Icons/UnorderedList.imageset/Contents.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "scale" : "1x" - }, - { - "idiom" : "mac", - "filename" : "UnorderedList@2x.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file From 4f79601e4a18079f9d00a0a6f75e1118580ab099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Ka=CC=88=C3=9Fner?= Date: Mon, 14 May 2018 11:38:26 +0200 Subject: [PATCH 379/439] improved Touch Bar using the dedicated Touch Bar Icons; equal button size & flexible spaces instead of fixed --- .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../TouchBarIconImage.imageset/Contents.json | 3 + .../Contents.json | 3 + .../TouchBarIconLink.imageset/Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Contents.json | 3 + .../Localization/Base.lproj/MPDocument.xib | 264 +++++++++++------- 17 files changed, 211 insertions(+), 101 deletions(-) diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json index 67b6221c..c07ea731 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconBlockquote.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json index d15fa2cc..1433ea9b 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconComment.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json index 33d60e73..f291fdb2 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconCopyHTML.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json index c73c4a7b..1d90c190 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconEditorAndPreview.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHeadings.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHeadings.imageset/Contents.json index ef6dcb2d..56c181bb 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHeadings.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHeadings.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHideEditor.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHideEditor.imageset/Contents.json index 02f8c732..98b4a3c3 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHideEditor.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHideEditor.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json index 5f7625fe..ec6e5f1e 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHidePreview.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json index 0aca332c..1cf82823 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconHighlight.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json index 0e16ddcc..17a9e6bd 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconImage.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json index 583d27dc..a82328c4 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconInlineCode.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json index 395b867a..50f173b3 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconLink.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json index b1c1ba68..834907b4 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconOrderedList.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json index 2412818c..6bb3df3a 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftLeft.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json index d6072221..60f85cc0 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconShiftRight.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json index 8318fee8..40cbb3b5 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconStrikethrough.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json index c234401b..63471258 100644 --- a/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json +++ b/MacDown/Images.xcassets/TouchBar Icons/TouchBarIconUnorderedList.imageset/Contents.json @@ -13,5 +13,8 @@ "info" : { "version" : 1, "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" } } \ No newline at end of file diff --git a/MacDown/Localization/Base.lproj/MPDocument.xib b/MacDown/Localization/Base.lproj/MPDocument.xib index 037d5424..0cfe945f 100644 --- a/MacDown/Localization/Base.lproj/MPDocument.xib +++ b/MacDown/Localization/Base.lproj/MPDocument.xib @@ -1,12 +1,12 @@ - + - - - + + + - + @@ -29,7 +29,7 @@ - + @@ -56,11 +56,11 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +