@@ -29,16 +29,22 @@ public struct Link: InlineMarkup, InlineContainer {
2929
3030public extension Link {
3131 /// Create a link with a destination and zero or more child inline elements.
32- init < Children: Sequence > ( destination: String ? = nil , _ children: Children ) where Children. Element == RecurringInlineMarkup {
32+ init < Children: Sequence > ( destination: String ? = nil , title : String ? = nil , _ children: Children ) where Children. Element == RecurringInlineMarkup {
3333
3434 let destinationToUse : String ?
3535 if let d = destination, d. isEmpty {
3636 destinationToUse = nil
3737 } else {
3838 destinationToUse = destination
3939 }
40+ let titleToUse : String ?
41+ if let t = title, t. isEmpty {
42+ titleToUse = nil
43+ } else {
44+ titleToUse = title
45+ }
4046
41- try ! self . init ( . link( destination: destinationToUse, parsedRange: nil , children. map { $0. raw. markup } ) )
47+ try ! self . init ( . link( destination: destinationToUse, title : titleToUse , parsedRange: nil , children. map { $0. raw. markup } ) )
4248 }
4349
4450 /// Create a link with a destination and zero or more child inline elements.
@@ -49,16 +55,33 @@ public extension Link {
4955 /// The link's destination.
5056 var destination : String ? {
5157 get {
52- guard case let . link( destination) = _data. raw. markup. data else {
58+ guard case let . link( destination, _ ) = _data. raw. markup. data else {
5359 fatalError ( " \( self ) markup wrapped unexpected \( _data. raw) " )
5460 }
5561 return destination
5662 }
5763 set {
5864 if let d = newValue, d. isEmpty {
59- _data = _data. replacingSelf ( . link( destination: nil , parsedRange: nil , _data. raw. markup. copyChildren ( ) ) )
65+ _data = _data. replacingSelf ( . link( destination: nil , title: title, parsedRange: nil , _data. raw. markup. copyChildren ( ) ) )
66+ } else {
67+ _data = _data. replacingSelf ( . link( destination: newValue, title: title, parsedRange: nil , _data. raw. markup. copyChildren ( ) ) )
68+ }
69+ }
70+ }
71+
72+ /// The link's title.
73+ var title : String ? {
74+ get {
75+ guard case let . link( _, title) = _data. raw. markup. data else {
76+ fatalError ( " \( self ) markup wrapped unexpected \( _data. raw) " )
77+ }
78+ return title
79+ }
80+ set {
81+ if let t = newValue, t. isEmpty {
82+ _data = _data. replacingSelf ( . link( destination: destination, title: nil , parsedRange: nil , _data. raw. markup. copyChildren ( ) ) )
6083 } else {
61- _data = _data. replacingSelf ( . link( destination: newValue, parsedRange: nil , _data. raw. markup. copyChildren ( ) ) )
84+ _data = _data. replacingSelf ( . link( destination: destination , title : newValue, parsedRange: nil , _data. raw. markup. copyChildren ( ) ) )
6285 }
6386 }
6487 }
0 commit comments