Skip to content

Commit b83fdd4

Browse files
committed
Added in app link marker to manage in-app links
- In-app links are displayed with a strong weight and an accent color
1 parent 50cd9e5 commit b83fdd4

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

Marker/Marker/Marker.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@ public func parsedMarkdownString(from markdownText: String,
9898
value: linkFont,
9999
range: NSRange(range, in: parsedString))
100100
}
101+
case .inAppLink(let range):
102+
font = textStyle.strongFont
103+
if let linkColor = textStyle.linkColor {
104+
attributedString.addAttribute(AttributedStringKey.foregroundColor,
105+
value: linkColor,
106+
range: NSRange(range, in: parsedString))
107+
}
101108
}
102109

103110
if let font = font {

Marker/Marker/Parser/MarkdownElement.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ enum MarkdownElement {
2222
case strikethrough(range: Range<Index>)
2323
case underline(range: Range<Index>)
2424
case link(range: Range<Index>, urlString: String)
25+
case inAppLink(range: Range<Index>)
2526

2627
/// Range of characters that the elements apply to.
2728
var range: Range<Index> {
2829
switch self {
29-
case .em(let range), .strong(let range), .strikethrough(let range), .underline(let range), .link(let range, _):
30+
case .em(let range), .strong(let range), .strikethrough(let range), .underline(let range), .link(let range, _), .inAppLink(let range):
3031
return range
3132
}
3233
}

Marker/Marker/Parser/MarkdownParser.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ struct MarkdownParser {
3232
private static let linkTextClosingSymbol = Symbol(character: "]")
3333
private static let linkURLOpeningSymbol = Symbol(character: "(")
3434
private static let linkURLClosingSymbol = Symbol(character: ")")
35+
private static let inAppLinkSymbol = Symbol(rawValue: "--")
3536

3637
// MARK: - Static functions
3738

@@ -45,7 +46,8 @@ struct MarkdownParser {
4546
let underscoreStrongSymbol = underscoreStrongSymbol,
4647
let asteriskStrongSymbol = asteriskStrongSymbol,
4748
let tildeStrikethroughSymbol = tildeStrikethroughSymbol,
48-
let equalUnderlineSymbol = equalUnderlineSymbol else {
49+
let equalUnderlineSymbol = equalUnderlineSymbol,
50+
let inAppLinkSymbol = inAppLinkSymbol, else {
4951
return (string, [])
5052
}
5153

@@ -57,6 +59,7 @@ struct MarkdownParser {
5759
let equalUnderlineRule = Rule(symbol: equalUnderlineSymbol)
5860
let linkTextRule = Rule(openingSymbol: linkTextOpeningSymbol, closingSymbol: linkTextClosingSymbol)
5961
let linkURLRule = Rule(openingSymbol: linkURLOpeningSymbol, closingSymbol: linkURLClosingSymbol)
62+
let inAppLinkRule = Rule(symbol: inAppLinkSymbol)
6063

6164
let tokens = try TokenParser.parse(string,
6265
using: [underscoreEmRule,
@@ -66,7 +69,8 @@ struct MarkdownParser {
6669
tildeStrikethroughRule,
6770
equalUnderlineRule,
6871
linkTextRule,
69-
linkURLRule])
72+
linkURLRule,
73+
inAppLinkRule])
7074

7175
guard tokens.count > 0 else {
7276
return (string, [])
@@ -105,6 +109,9 @@ struct MarkdownParser {
105109
elements.append(.link(range: range,urlString: tokens[i + 1].string))
106110

107111
i += 1
112+
case .some(inAppLinkRule):
113+
let range = strippedString.append(contentOf: token)
114+
elements.append(.inAppLink(range: range))
108115
default:
109116
strippedString += token.stringWithRuleSymbols
110117
}

0 commit comments

Comments
 (0)