@@ -77,7 +77,6 @@ DEF PROCtext
7777 AUTOFLIP FALSE
7878 start = 16
7979 l = top
80- CURSOR 1, start
8180 GCOL &FFFFFF
8281 REPEAT
8382 PROCclearLineFromCursor
@@ -102,7 +101,7 @@ DEF PROCtext
102101 GRAPHPRINT 0, start, 1.4, 1, MID$(l$, 5, LEN(l$))
103102 handled = TRUE
104103 ENDIF
105- IF handled = FALSE THEN GRAPHPRINT 0, start, 1, 1, l$
104+ IF handled = FALSE THEN PROCmarkdownLine(l$, 0, start)
106105 ENDIF
107106 l = l + 1
108107 start = start + 8
@@ -111,6 +110,132 @@ DEF PROCtext
111110 PROCshowCursor
112111ENDPROC
113112
113+ REM render one markdown line with inline formatting
114+ DEF PROCmarkdownLine(mdline$, mdstartx, mdstarty)
115+ mdx = mdstartx
116+ mdy = mdstarty
117+ mdbold = FALSE
118+ mdunderline = FALSE
119+ mdbuf$ = ""
120+ mdpos = 0
121+
122+ REPEAT
123+ mdtwo$ = ""
124+ IF mdpos < LEN(mdline$) - 1 THEN mdtwo$ = MID$(mdline$, mdpos, 2)
125+
126+ IF mdtwo$ = "**" THEN
127+ IF mdbuf$ <> "" THEN
128+ GRAPHPRINT mdx, mdy, 1, 1, mdbuf$
129+ IF mdbold = TRUE THEN GRAPHPRINT mdx + 1, mdy, 1, 1, mdbuf$
130+ IF mdunderline = TRUE THEN LINE mdx, mdy + 7, mdx + LEN(mdbuf$) * 8 - 1, mdy + 7
131+ mdx = mdx + LEN(mdbuf$) * 8
132+ mdbuf$ = ""
133+ ENDIF
134+ mdbold = BITNOT(mdbold)
135+ mdpos = mdpos + 2
136+ ELSE
137+ IF mdtwo$ = "__" THEN
138+ IF mdbuf$ <> "" THEN
139+ GRAPHPRINT mdx, mdy, 1, 1, mdbuf$
140+ IF mdbold = TRUE THEN GRAPHPRINT mdx + 1, mdy, 1, 1, mdbuf$
141+ IF mdunderline = TRUE THEN LINE mdx, mdy + 7, mdx + LEN(mdbuf$) * 8 - 1, mdy + 7
142+ mdx = mdx + LEN(mdbuf$) * 8
143+ mdbuf$ = ""
144+ ENDIF
145+ mdunderline = BITNOT(mdunderline)
146+ mdpos = mdpos + 2
147+ ELSE
148+ IF mdtwo$ = "![" THEN
149+ IF mdbuf$ <> "" THEN
150+ GRAPHPRINT mdx, mdy, 1, 1, mdbuf$
151+ IF mdbold = TRUE THEN GRAPHPRINT mdx + 1, mdy, 1, 1, mdbuf$
152+ IF mdunderline = TRUE THEN LINE mdx, mdy + 7, mdx + LEN(mdbuf$) * 8 - 1, mdy + 7
153+ mdx = mdx + LEN(mdbuf$) * 8
154+ mdbuf$ = ""
155+ ENDIF
156+
157+ img_ok = FALSE
158+ img_end_square = 0
159+ img_end_paren = 0
160+ img_quote = FALSE
161+ imgscan = mdpos + 2
162+
163+ REPEAT
164+ IF MID$(mdline$, imgscan, 1) = "]" THEN img_end_square = imgscan
165+ imgscan = imgscan + 1
166+ UNTIL imgscan > LEN(mdline$) OR img_end_square > 0
167+
168+ IF img_end_square > 0 THEN
169+ IF MID$(mdline$, img_end_square + 1, 1) = "(" THEN
170+ imgscan = img_end_square + 2
171+ REPEAT
172+ imgchar$ = MID$(mdline$, imgscan, 1)
173+ IF imgchar$ = CHR$(34) THEN img_quote = BITNOT(img_quote)
174+ IF imgchar$ = ")" AND img_quote = FALSE THEN img_end_paren = imgscan
175+ imgscan = imgscan + 1
176+ UNTIL imgscan > LEN(mdline$) OR img_end_paren > 0
177+ ENDIF
178+ ENDIF
179+
180+ IF img_end_paren > 0 THEN
181+ img_alt$ = MID$(mdline$, mdpos + 2, img_end_square - mdpos - 2)
182+ img_dest$ = MID$(mdline$, img_end_square + 2, img_end_paren - img_end_square - 2)
183+ img_url$ = img_dest$
184+ img_title$ = ""
185+ img_split = INSTR(img_dest$, " ")
186+
187+ IF img_split > 0 THEN
188+ img_url$ = LEFT$(img_dest$, img_split - 1)
189+ img_title$ = MID$(img_dest$, img_split + 1, LEN(img_dest$))
190+ IF LEFT$(img_title$, 1) = CHR$(34) THEN img_title$ = MID$(img_title$, 2, LEN(img_title$))
191+ IF RIGHT$(img_title$, 1) = CHR$(34) THEN img_title$ = LEFT$(img_title$, LEN(img_title$) - 1)
192+ ENDIF
193+
194+ PROCmarkdownImage(img_alt$, img_url$, img_title$, mdx, mdy)
195+ mdpos = img_end_paren + 1
196+ img_ok = TRUE
197+ ENDIF
198+
199+ IF img_ok = FALSE THEN
200+ mdbuf$ = mdbuf$ + MID$(mdline$, mdpos, 1)
201+ mdpos = mdpos + 1
202+ ENDIF
203+ ELSE
204+ mdbuf$ = mdbuf$ + MID$(mdline$, mdpos, 1)
205+ mdpos = mdpos + 1
206+ ENDIF
207+ ENDIF
208+ ENDIF
209+ UNTIL mdpos >= LEN(mdline$)
210+
211+ IF mdbuf$ <> "" THEN
212+ GRAPHPRINT mdx, mdy, 1, 1, mdbuf$
213+ IF mdbold = TRUE THEN GRAPHPRINT mdx + 1, mdy, 1, 1, mdbuf$
214+ IF mdunderline = TRUE THEN LINE mdx, mdy + 7, mdx + LEN(mdbuf$) * 8 - 1, mdy + 7
215+ ENDIF
216+ ENDPROC
217+
218+ REM placeholder for inline images
219+ DEF PROCmarkdownImage(img_alt_text$, img_url_text$, img_title_text$, img_x, img_y)
220+ boxw = 32
221+ boxh = 32
222+
223+ GCOL &888888
224+ LINE img_x, img_y, img_x + boxw, img_y
225+ LINE img_x + boxw, img_y, img_x + boxw, img_y + boxh
226+ LINE img_x + boxw, img_y + boxh, img_x, img_y + boxh
227+ LINE img_x, img_y + boxh, img_x, img_y
228+
229+ LINE img_x, img_y, img_x + boxw, img_y + boxh
230+ LINE img_x + boxw, img_y, img_x, img_y + boxh
231+
232+ GRAPHPRINT img_x + boxw + 4, img_y + 10, 0.75, 0.75, img_alt_text$
233+ GCOL &FFFFFF
234+
235+ start = start + (boxh - 8)
236+ mdx = mdx + boxw + 4 + (LEN(img_alt_text$) * 4)
237+ ENDPROC
238+
114239DEF FNmarkdown_header$(L$)
115240 R$ = ""
116241 IF LEFT$(L$, 7) = "###### " THEN R$ = "###### "
0 commit comments