diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ab9676..bd626d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog ======= +### 1.0b16 +Bugfix: +- Fix on heads extension. +- Fix on emoji extension. +- Fix for exporting a source color scheme as a CSS style. + ### 1.0b15 New features: - Option to export the generated preview to an HTML file in the main application. diff --git a/QLExtension/Info.plist b/QLExtension/Info.plist index c58793f..25b9743 100644 --- a/QLExtension/Info.plist +++ b/QLExtension/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - QLExtension + QLMarkdown Preview Extension CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/QLMarkdown.xcodeproj/project.pbxproj b/QLMarkdown.xcodeproj/project.pbxproj index 838e3fd..ed44849 100644 --- a/QLMarkdown.xcodeproj/project.pbxproj +++ b/QLMarkdown.xcodeproj/project.pbxproj @@ -134,7 +134,6 @@ 83E7FEF1258FBF37003ECF9B /* highlight in Resources */ = {isa = PBXBuildFile; fileRef = 83E7FEF0258FBF37003ECF9B /* highlight */; }; 83EF951D2585367500B56FA3 /* NSColor+ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83EF951C2585367500B56FA3 /* NSColor+ext.swift */; }; 83EF95232585476800B56FA3 /* emoji.c in Sources */ = {isa = PBXBuildFile; fileRef = 83EF95222585476800B56FA3 /* emoji.c */; }; - 83F1FE4C259CEE7400257DAC /* external-launcher.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 83F1FE41259CEE7400257DAC /* external-launcher.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 83F1FE53259CEEC900257DAC /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83F1FE52259CEEC900257DAC /* main.swift */; }; 83F1FE57259CEF0100257DAC /* external_launcherProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83F1FE56259CEF0100257DAC /* external_launcherProtocol.swift */; }; 83F1FE5B259CEF4300257DAC /* external_launcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83F1FE5A259CEF4300257DAC /* external_launcher.swift */; }; @@ -177,13 +176,6 @@ remoteGlobalIDString = 836B3007259E222600A6A5F7; remoteInfo = "highlight-wrapper"; }; - 83F1FE4A259CEE7400257DAC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83598E5925818808004664D3 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 83F1FE40259CEE7400257DAC; - remoteInfo = "external-launcher"; - }; 83F1FE6C259CF02900257DAC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83598E5925818808004664D3 /* Project object */; @@ -233,7 +225,6 @@ dstPath = "$(CONTENTS_FOLDER_PATH)/XPCServices"; dstSubfolderSpec = 16; files = ( - 83F1FE4C259CEE7400257DAC /* external-launcher.xpc in Embed XPC Services */, 83F882412598A8C4008C5071 /* org.sparkle-project.InstallerStatus.xpc in Embed XPC Services */, 83F8823F2598A8C2008C5071 /* org.sparkle-project.InstallerLauncher.xpc in Embed XPC Services */, 83F8823D2598A8C0008C5071 /* org.sparkle-project.InstallerConnection.xpc in Embed XPC Services */, @@ -529,19 +520,19 @@ 83598E6D2581880A004664D3 /* Info.plist */, 83598E6E2581880A004664D3 /* QLMarkdown.entitlements */, 83598E7925818839004664D3 /* QLMarkdown-Bridging-Header.h */, - 8357EB762587DBDE002C2C45 /* Themes */, 83598E6425818808004664D3 /* AppDelegate.swift */, 83598E6625818808004664D3 /* ViewController.swift */, 83598E6A2581880A004664D3 /* Main.storyboard */, - 836B747C259E2D7B00A6A5F7 /* AboutViewController.swift */, 83598E682581880A004664D3 /* Assets.xcassets */, - 83EF951C2585367500B56FA3 /* NSColor+ext.swift */, - 8357EB7E2588262C002C2C45 /* String+ext.swift */, + 8357EB762587DBDE002C2C45 /* Themes */, + 836B747C259E2D7B00A6A5F7 /* AboutViewController.swift */, 83598EF92582098A004664D3 /* test1.md */, 83598EFA258209C7004664D3 /* test2.md */, 837D20D5258362A5008FC698 /* example.jpg */, 83F4B99125868A7400FC58A7 /* Settings.swift */, 83327D452595E15700E76CF6 /* Settings+ext.swift */, + 8357EB7E2588262C002C2C45 /* String+ext.swift */, + 83EF951C2585367500B56FA3 /* NSColor+ext.swift */, 834CAB89259167B800673002 /* examples */, ); path = QLMarkdown; @@ -767,7 +758,6 @@ dependencies = ( 836B7472259E23DB00A6A5F7 /* PBXTargetDependency */, 831A8C4B258ABADA00E36182 /* PBXTargetDependency */, - 83F1FE4B259CEE7400257DAC /* PBXTargetDependency */, ); name = QLMarkdown; productName = QLMarkdown; @@ -1035,11 +1025,6 @@ name = "highlight-wrapper"; targetProxy = 836B7478259E2BA400A6A5F7 /* PBXContainerItemProxy */; }; - 83F1FE4B259CEE7400257DAC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 83F1FE40259CEE7400257DAC /* external-launcher */; - targetProxy = 83F1FE4A259CEE7400257DAC /* PBXContainerItemProxy */; - }; 83F1FE6D259CF02900257DAC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 83F1FE40259CEE7400257DAC /* external-launcher */; @@ -1074,7 +1059,7 @@ CODE_SIGN_ENTITLEMENTS = QLExtension/QLExtension.entitlements; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 15; + CURRENT_PROJECT_VERSION = 16; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; HEADER_SEARCH_PATHS = ( @@ -1110,7 +1095,7 @@ CODE_SIGN_ENTITLEMENTS = QLExtension/QLExtension.entitlements; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 15; + CURRENT_PROJECT_VERSION = 16; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; HEADER_SEARCH_PATHS = ( @@ -1265,7 +1250,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 15; + CURRENT_PROJECT_VERSION = 16; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -1310,7 +1295,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 15; + CURRENT_PROJECT_VERSION = 16; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = NO; FRAMEWORK_SEARCH_PATHS = ( diff --git a/QLMarkdown/Base.lproj/Main.storyboard b/QLMarkdown/Base.lproj/Main.storyboard index a3bebaa..c2a197b 100644 --- a/QLMarkdown/Base.lproj/Main.storyboard +++ b/QLMarkdown/Base.lproj/Main.storyboard @@ -2069,7 +2069,7 @@ Gw - + @@ -2087,7 +2087,7 @@ Gw - + @@ -2184,7 +2184,7 @@ Gw - + diff --git a/QLMarkdown/Themes/SaveAsFormatView.xib b/QLMarkdown/Themes/SaveAsFormatView.xib index 2587f09..1e0e50b 100644 --- a/QLMarkdown/Themes/SaveAsFormatView.xib +++ b/QLMarkdown/Themes/SaveAsFormatView.xib @@ -34,7 +34,7 @@ - + diff --git a/QLMarkdown/Themes/Theme.swift b/QLMarkdown/Themes/Theme.swift index bf5c137..f8639d6 100644 --- a/QLMarkdown/Themes/Theme.swift +++ b/QLMarkdown/Themes/Theme.swift @@ -87,7 +87,7 @@ import Cocoa } class PropertyStyle { - enum Name: String { + enum Attribute: String { case italic = "italic" case bold = "bold" case underline = "underline" @@ -117,7 +117,7 @@ import Cocoa self.init(color: color, italic: italic, bold: bold, underline: underline) } - func getCSSStyle(withColor: Bool = true) -> String { + func getCSSStyle() -> String { var style = "" if let italic = self.italic { style += "font-style: \(italic ? "italic" : "normal"); " @@ -128,14 +128,14 @@ import Cocoa if let underline = self.underline { style += "text-decoration: \(underline ? "underline" : "none"); " } - if withColor, let color = self.color { + if let color = self.color { style += "color: \(color); " } return style } - subscript(name: Name)->AnyHashable? { + subscript(name: Attribute)->AnyHashable? { get { switch name { case .bold: @@ -323,20 +323,18 @@ import Cocoa self.keywords = [] } - func getHtmlExample() -> String { + + func getCSSStyle() -> String { let formatPropertyCss = { (name: PropertyName, property: PropertyStyle) -> String in - var css = "." + name.cssClass.joined(separator: ".") + " {" + var css = "." + name.cssClass.joined(separator: ".") + " {\n" if name == .canvas { - css += "background-color: \(property.color ?? "#ffffff");" + css += " background-color: \(property.color ?? "#ffffff");\n" } else { css += property.getCSSStyle() } css += "}\n" return css } - let formatProperty = { (name: PropertyName, property: PropertyStyle) -> String in - return "
\(name.name)
\n" - } var css = "" @@ -363,6 +361,16 @@ import Cocoa css += formatPropertyCss(.keyword(index: i), keyword) } + return css + } + + func getHtmlExample() -> String { + let formatProperty = { (name: PropertyName, property: PropertyStyle) -> String in + return "
\(name.name)
\n" + } + + let css = self.getCSSStyle() + var s = """ diff --git a/QLMarkdown/Themes/ThemeTableView.swift b/QLMarkdown/Themes/ThemeTableView.swift index ec49592..eb03672 100644 --- a/QLMarkdown/Themes/ThemeTableView.swift +++ b/QLMarkdown/Themes/ThemeTableView.swift @@ -176,7 +176,12 @@ class ThemeTableView: NSView { return } do { - try theme.write(toFile: url.path) + if url.pathExtension == "css" { + let css = theme.getCSSStyle() + try css.write(toFile: url.path, atomically: true, encoding: .utf8) + } else { + try theme.write(toFile: url.path) + } } catch { let alert = NSAlert() alert.alertStyle = .critical diff --git a/QLMarkdown/Themes/ThemeTableView.xib b/QLMarkdown/Themes/ThemeTableView.xib index 5e60d91..a97630a 100644 --- a/QLMarkdown/Themes/ThemeTableView.xib +++ b/QLMarkdown/Themes/ThemeTableView.xib @@ -20,22 +20,22 @@ - + - + - - + + - + @@ -43,8 +43,8 @@ - - + + @@ -76,18 +76,18 @@ - + - - + + - + @@ -105,16 +105,16 @@ - + - + - + - + @@ -500,7 +500,7 @@ - + diff --git a/QLMarkdown/ViewController.swift b/QLMarkdown/ViewController.swift index aa4db00..6f57e5d 100644 --- a/QLMarkdown/ViewController.swift +++ b/QLMarkdown/ViewController.swift @@ -337,7 +337,6 @@ class ViewController: NSViewController { didSet { if oldValue != isDirty { self.view.window?.isDocumentEdited = isDirty - saveButton?.isEnabled = isDirty } if isDirty && autoRefresh && isLoaded && pauseAutoRefresh == 0 { self.refresh(self) @@ -360,14 +359,12 @@ class ViewController: NSViewController { @IBOutlet weak var tabView: NSTabView! @IBOutlet weak var tabViewLeftConstraint: NSLayoutConstraint! - @IBOutlet weak var tabViewBottomConstraint: NSLayoutConstraint! @IBOutlet weak var webView: WKWebView! @IBOutlet weak var textView: NSTextView! @IBOutlet weak var stylesPopup: NSPopUpButton! @IBOutlet weak var styleExtendPopup: NSPopUpButton! - @IBOutlet weak var styleRevealMenu: NSMenuItem! @IBOutlet weak var highlightBackground: NSPopUpButton! @IBOutlet weak var sourceBackgroundLabel: NSTextField! @@ -389,11 +386,9 @@ class ViewController: NSViewController { @IBOutlet weak var strikethroughPopupButton: NSPopUpButton! @IBOutlet weak var emojiPopupButton: NSPopUpButton! @IBOutlet weak var unsafeButton: NSButton! - @IBOutlet weak var versionLabel: NSTextField! @IBOutlet weak var advancedButton: NSButton! @IBOutlet weak var progressIndicator: NSProgressIndicator! - @IBOutlet weak var saveButton: NSButton! @IBOutlet weak var inlineLinkPopup: NSPopUpButton! @IBOutlet weak var appearanceButton: NSButton! @@ -789,7 +784,6 @@ document.addEventListener('scroll', function(e) { tabView.tabViewType = isAdvancedSettingsHidden ? .noTabsNoBorder : .topTabsBezelBorder tabView.selectTabViewItem(at: isAdvancedSettingsHidden ? 0 : 1) tabViewLeftConstraint.constant = isAdvancedSettingsHidden ? 0 : 20 - tabViewBottomConstraint?.constant = isAdvancedSettingsHidden ? 0 : 20 advancedButton.title = isAdvancedSettingsHidden ? "Show advanced options" : "Show only basic options" }