@@ -33,12 +33,12 @@ public struct LessonsParser: Parser {
3333 // MARK: - Lesson name
3434
3535 let nameParser = Parse {
36- OpenTagV2 ( " a " )
36+ OpenTag ( " a " )
3737 upToNextTag. map { String ( Substring ( $0) ) }
38- CloseTagV2 ( " a " )
38+ CloseTag ( " a " )
3939 }
4040 let multipleNamesParser = Parse {
41- OpenTagV2 ( " span " )
41+ OpenTag ( " span " )
4242 Many {
4343 nameParser
4444 } separator: {
@@ -48,7 +48,7 @@ public struct LessonsParser: Parser {
4848 } terminator: {
4949 Skip { PrefixThrough ( " </span> " . utf8) }
5050 }
51- OneLineTagV2 ( " br " )
51+ OneLineTag ( " br " )
5252 }
5353
5454 // MARK: - Teacher
@@ -61,11 +61,11 @@ public struct LessonsParser: Parser {
6161 upToNextTag. map { String ( Substring ( $0) ) }
6262 }
6363 let teacherParser = Parse ( Teacher . init) {
64- OpenTagV2 ( " a " ) {
64+ OpenTag ( " a " ) {
6565 teacherFullNameParser
6666 }
6767 teacherShortNameParser
68- CloseTagV2 ( " a " )
68+ CloseTag ( " a " )
6969 }
7070 let multipleTeachersParser = Parse {
7171 Optionally {
@@ -77,15 +77,15 @@ public struct LessonsParser: Parser {
7777 Peek { " <a " . utf8 }
7878 }
7979 }
80- OneLineTagV2 ( " br " )
80+ OneLineTag ( " br " )
8181 }
8282
8383 // MARK: - Location
8484
8585 let locationWithLinkParser = Parse {
86- OpenTagV2 ( " a " )
86+ OpenTag ( " a " )
8787 upToNextTag. map { String ( Substring ( $0) ) }
88- CloseTagV2 ( " a " )
88+ CloseTag ( " a " )
8989 }
9090 let locationPlainTextParser = Parse {
9191 Whitespace ( )
@@ -109,36 +109,36 @@ public struct LessonsParser: Parser {
109109 // MARK: - Lesson
110110
111111 let lessonCellParser = Parse {
112- OpenTagV2 ( " td " )
112+ OpenTag ( " td " )
113113 Optionally {
114114 Parse ( RawLesson . init) {
115115 multipleNamesParser
116116 multipleTeachersParser
117117 multipleLocationParser
118118 }
119119 }
120- CloseTagV2 ( " td " )
120+ CloseTag ( " td " )
121121 }
122122
123123 // MARK: - Row
124124
125125 /// Cell with pair number and time
126126 let skipFirstCell = Parse {
127- OpenTagV2 ( " td " )
127+ OpenTag ( " td " )
128128 Skip { PrefixThrough ( " </td> " . utf8) }
129129 }
130130
131131 let rowParser = Parse {
132132 Parse {
133133 Whitespace ( )
134- OpenTagV2 ( " tr " )
134+ OpenTag ( " tr " )
135135 Whitespace ( )
136136 }
137137 skipFirstCell
138138 Many ( 6 , element: { lessonCellParser } )
139139 Parse {
140140 Whitespace ( )
141- CloseTagV2 ( " tr " )
141+ CloseTag ( " tr " )
142142 Whitespace ( )
143143 }
144144 }
@@ -215,3 +215,55 @@ public struct LessonsParser: Parser {
215215 }
216216
217217}
218+
219+
220+ public func parse( _ input: inout String ) throws -> [ Lesson ] {
221+
222+ let upToNextTag = PrefixUpTo ( " < " . utf8)
223+ let quotedField = Parse { ... }
224+
225+ // MARK: - Lesson name
226+
227+ let nameParser = Parse { ... }
228+ let multipleNamesParser = Parse { ... }
229+
230+ // MARK: - Teacher
231+
232+ let teacherFullNameParser = Parse { ... }
233+ let teacherShortNameParser = Parse { ... }
234+ let teacherParser = Parse ( Teacher . init) { ... }
235+ let multipleTeachersParser = Parse { ... }
236+
237+ // MARK: - Location
238+
239+ let locationWithLinkParser = Parse { ... }
240+ let locationPlainTextParser = Parse { ... }
241+ let multipleLocationParser = Parse { ... }
242+
243+ // MARK: - Lesson
244+
245+ let lessonCellParser = Parse { ... }
246+
247+ // MARK: - Row
248+
249+ /// Cell with pair number and time
250+ let skipFirstCell = Parse { ... }
251+
252+ let rowParser = Parse { ... }
253+
254+ // MARK: - Table
255+
256+ let skipTableHeader = Parse { ... }
257+
258+ let firstTable = Parse { ... }
259+ . replaceError ( ... )
260+
261+ let secondTable = Parse { ... }
262+ . replaceError ( ... )
263+
264+ let allTables = Parse { ... } with: { ... }
265+
266+ let fullParser = allTables. map { ... }
267+
268+ return try fullParser. parse ( input)
269+ }
0 commit comments