Skip to content

Commit

Permalink
Added support for YAML header on all .md files.
Browse files Browse the repository at this point in the history
  • Loading branch information
sbarex committed Apr 16, 2021
1 parent 08e7efa commit f659f27
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 30 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog
=======
### 1.0b25
New features:
- Extended the support for the `yaml` header of `.rmd` to all `.md` files. The `rmd extension` was renamed to `YAML header`.

### 1.0b24
New features:
- Support for `.rmd` file. The `.rmd` files are handled like normal `.md` files _without parsing the `r` code_. With the `rmd extension` enabled (default enabled, on advanced settings) the file header is rendered as a `yaml` block.
Expand Down
8 changes: 4 additions & 4 deletions QLMarkdown.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1166,7 +1166,7 @@
CODE_SIGN_ENTITLEMENTS = QLExtension/QLExtension.entitlements;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 24;
CURRENT_PROJECT_VERSION = 25;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = NO;
HEADER_SEARCH_PATHS = (
Expand Down Expand Up @@ -1204,7 +1204,7 @@
CODE_SIGN_ENTITLEMENTS = QLExtension/QLExtension.entitlements;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 24;
CURRENT_PROJECT_VERSION = 25;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = NO;
HEADER_SEARCH_PATHS = (
Expand Down Expand Up @@ -1361,7 +1361,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 24;
CURRENT_PROJECT_VERSION = 25;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = NO;
FRAMEWORK_SEARCH_PATHS = (
Expand Down Expand Up @@ -1408,7 +1408,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 24;
CURRENT_PROJECT_VERSION = 25;
DEVELOPMENT_TEAM = "";
ENABLE_HARDENED_RUNTIME = NO;
FRAMEWORK_SEARCH_PATHS = (
Expand Down
56 changes: 45 additions & 11 deletions QLMarkdown/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -1127,7 +1127,7 @@
</gridCell>
<gridCell row="0Jj-Oa-MkY" column="gDs-o1-pxX" id="F7D-0Q-WPa">
<button key="contentView" horizontalHuggingPriority="247" verticalHuggingPriority="749" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zVa-zC-rZ4">
<rect key="frame" x="-2" y="3" width="284" height="18"/>
<rect key="frame" x="-2" y="-1" width="284" height="18"/>
<buttonCell key="cell" type="check" title="Debug info" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="Uj7-I5-hly">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
Expand Down Expand Up @@ -1601,16 +1601,49 @@
</button>
</gridCell>
<gridCell row="U3p-nG-osr" column="jYm-ty-U7O" id="jaW-YD-xIt">
<button key="contentView" toolTip="Handle header of .rmd files." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NW6-OK-azv">
<rect key="frame" x="-2" y="-1" width="137" height="18"/>
<buttonCell key="cell" type="check" title="Rmd header" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="6MU-jQ-KNG">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<binding destination="XfG-lQ-9wD" name="value" keyPath="self.rmdExtension" id="9G4-tM-SIs"/>
</connections>
</button>
<stackView key="contentView" distribution="fill" orientation="horizontal" alignment="centerY" spacing="4" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DZV-G2-qY1">
<rect key="frame" x="0.0" y="0.0" width="135" height="16"/>
<subviews>
<button toolTip="Handle YAML header." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NW6-OK-azv">
<rect key="frame" x="-2" y="-1" width="18" height="18"/>
<buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="only" state="on" inset="2" id="6MU-jQ-KNG">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<binding destination="XfG-lQ-9wD" name="value" keyPath="self.yamlExtension" id="bWC-ya-90g"/>
</connections>
</button>
<popUpButton horizontalHuggingPriority="249" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IeG-vS-v6c">
<rect key="frame" x="13" y="0.0" width="122" height="16"/>
<popUpButtonCell key="cell" type="roundTextured" title="YAML header" bezelStyle="texturedRounded" alignment="left" lineBreakMode="truncatingTail" state="on" imageScaling="proportionallyDown" inset="2" pullsDown="YES" id="vHd-22-hfh">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
<menu key="menu" id="ZCo-te-Lyb">
<items>
<menuItem title="YAML header" state="on" hidden="YES" id="JQj-Yd-BmL"/>
<menuItem title="Only for Rmd files" id="RCL-f2-K7U"/>
<menuItem title="For all md files" id="6lL-8G-ydW"/>
<menuItem title="Disabled" id="1JJ-R9-DkW">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</popUpButtonCell>
<connections>
<action selector="handleYamlPopup:" target="XfG-lQ-9wD" id="Azo-8t-Hif"/>
</connections>
</popUpButton>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</gridCell>
</gridCells>
</gridView>
Expand Down Expand Up @@ -1807,6 +1840,7 @@
<outlet property="textView" destination="Q3Q-a2-tMH" id="Glk-S5-qdQ"/>
<outlet property="unsafeButton" destination="Yvy-aE-Sho" id="UmS-Os-ggW"/>
<outlet property="webView" destination="bs7-Op-UnU" id="zXJ-Jb-TMr"/>
<outlet property="yamlPopupButton" destination="IeG-vS-v6c" id="PgQ-PL-hNI"/>
</connections>
</viewController>
<customObject id="rPt-NT-nkU" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
Expand Down
3 changes: 2 additions & 1 deletion QLMarkdown/Settings+ext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ extension Settings {
defaultsDomain["autolink"] = autoLinkExtension
defaultsDomain["tagfilter"] = tagFilterExtension
defaultsDomain["tasklist"] = taskListExtension
defaultsDomain["rmd"] = rmdExtension
defaultsDomain["rmd"] = yamlExtension
defaultsDomain["rmd_all"] = yamlExtensionAll
defaultsDomain["mention"] = mentionExtension
defaultsDomain["checkbox"] = checkboxExtension
defaultsDomain["inlineimage"] = inlineImageExtension
Expand Down
19 changes: 12 additions & 7 deletions QLMarkdown/Settings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ class Settings {
@objc var tableExtension: Bool = true
@objc var tagFilterExtension: Bool = true
@objc var taskListExtension: Bool = true
@objc var rmdExtension: Bool = true
@objc var yamlExtension: Bool = true
@objc var yamlExtensionAll: Bool = false

@objc var footnotesOption: Bool = true
@objc var hardBreakOption: Bool = false
Expand Down Expand Up @@ -134,7 +135,10 @@ class Settings {
taskListExtension = ext
}
if let ext = defaultsDomain["rmd"] as? Bool {
rmdExtension = ext
yamlExtension = ext
}
if let v = defaultsDomain["rmd_all"] as? Bool {
yamlExtensionAll = v
}

if let ext = defaultsDomain["strikethrough"] as? Bool {
Expand Down Expand Up @@ -279,7 +283,8 @@ class Settings {
self.tableExtension = s.tableExtension
self.tagFilterExtension = s.tagFilterExtension
self.taskListExtension = s.taskListExtension
self.rmdExtension = s.rmdExtension
self.yamlExtension = s.yamlExtension
self.yamlExtensionAll = s.yamlExtensionAll

self.footnotesOption = s.footnotesOption
self.hardBreakOption = s.hardBreakOption
Expand Down Expand Up @@ -439,7 +444,7 @@ class Settings {

var md_text = text

if self.rmdExtension && filename.lowercased().hasSuffix("rmd") && md_text.hasPrefix("---") {
if self.yamlExtension && (self.yamlExtensionAll || filename.lowercased().hasSuffix("rmd")) && md_text.hasPrefix("---") {
let pattern = "(?s)((?<=---\n).*?(?>\n---\n))"
if let range = md_text.range(of: pattern, options: .regularExpression) {
let yaml = String(md_text[range.lowerBound ..< md_text.index(range.upperBound, offsetBy: -4)])
Expand Down Expand Up @@ -669,9 +674,9 @@ table.debug td {
}
html_debug += "</td></tr>\n"

html_debug += "<tr><td>rmd extension</td><td>"
if self.rmdExtension {
html_debug += "on"
html_debug += "<tr><td>YAML extension</td><td>"
if self.yamlExtension {
html_debug += "on "+(self.yamlExtensionAll ? "for all files" : "for .rmd files")
} else {
html_debug += "off"
}
Expand Down
35 changes: 31 additions & 4 deletions QLMarkdown/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,15 @@ class ViewController: NSViewController {
isDirty = true
}
}
@objc dynamic var rmdExtension: Bool = Settings.factorySettings.rmdExtension {
@objc dynamic var yamlExtension: Bool = Settings.factorySettings.yamlExtension {
didSet {
updateYamlPopup()
isDirty = true
}
}
@objc dynamic var yamlExtensionAll: Bool = Settings.factorySettings.yamlExtensionAll {
didSet {
updateYamlPopup()
isDirty = true
}
}
Expand Down Expand Up @@ -391,6 +398,7 @@ class ViewController: NSViewController {

@IBOutlet weak var strikethroughPopupButton: NSPopUpButton!
@IBOutlet weak var emojiPopupButton: NSPopUpButton!
@IBOutlet weak var yamlPopupButton: NSPopUpButton!
@IBOutlet weak var unsafeButton: NSButton!
@IBOutlet weak var advancedButton: NSButton!

Expand Down Expand Up @@ -484,6 +492,23 @@ class ViewController: NSViewController {
}
}

@IBAction func handleYamlPopup(_ sender: NSPopUpButton) {
if sender.indexOfSelectedItem == 3 {
self.yamlExtension = false
} else {
self.yamlExtension = true
self.yamlExtensionAll = sender.indexOfSelectedItem == 2
}
}

func updateYamlPopup() {
if !yamlExtension {
yamlPopupButton.title = "YAML header"
} else {
yamlPopupButton.title = "YAML header (\(self.yamlExtensionAll ? "all files" : ".rmd files"))"
}
}

@IBAction func openDocument(_ sender: Any) {
let panel = NSOpenPanel()
panel.canChooseDirectories = false
Expand Down Expand Up @@ -960,7 +985,8 @@ document.addEventListener('scroll', function(e) {
self.autoLinkExtension = settings.autoLinkExtension
self.tagFilterExtension = settings.tagFilterExtension
self.taskListExtension = settings.taskListExtension
self.rmdExtension = settings.rmdExtension
self.yamlExtension = settings.yamlExtension
self.yamlExtensionAll = settings.yamlExtensionAll
self.strikethroughExtension = settings.strikethroughExtension
self.strikethroughDoubleTildeOption = settings.strikethroughDoubleTildeOption
self.mentionExtension = settings.mentionExtension
Expand Down Expand Up @@ -1044,7 +1070,8 @@ document.addEventListener('scroll', function(e) {
settings.autoLinkExtension = self.autoLinkExtension
settings.tagFilterExtension = self.tagFilterExtension
settings.taskListExtension = self.taskListExtension
settings.rmdExtension = self.rmdExtension
settings.yamlExtension = self.yamlExtension
settings.yamlExtensionAll = self.yamlExtensionAll
settings.mentionExtension = self.mentionExtension
settings.inlineImageExtension = self.inlineImageExtension
settings.headsExtension = self.headsExtension
Expand Down Expand Up @@ -1223,7 +1250,7 @@ class PreferencesWindowController: NSWindowController, NSWindowDelegate {
alert.messageText = "There are some modified settings"
alert.informativeText = "Do you want to save them before closing?"
alert.addButton(withTitle: "Save").keyEquivalent = "\r"
alert.addButton(withTitle: "No")
alert.addButton(withTitle: "Don't Save").keyEquivalent = "d"
alert.addButton(withTitle: "Cancel").keyEquivalent = "\u{1b}"

let r = alert.runModal()
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,10 @@ _Available on advanced options panel._ Strip potentially dangerous HTML tags (`<

_Available on advanced options panel._ Parse task list as defined by the GitHub extension to the standard Markdown language.

#### Rmd header
_Available on advanced options panel._ Allow to handle the header of `.rmd` files.
#### YAML header
_Available on advanced options panel._ Allow to handle a `yaml` header at the beginning of a file. You can choose to enable the extensions to all `.md` files or only for `.rmd` files.

The header is recognized only if thge file start with `---`.

### Themes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<key>re2.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>4</integer>
<integer>3</integer>
</dict>
</dict>
</dict>
Expand Down

0 comments on commit f659f27

Please sign in to comment.