Skip to content

Commit 3318309

Browse files
add code to render markdown line
1 parent f1a84cd commit 3318309

1 file changed

Lines changed: 127 additions & 2 deletions

File tree

os/programs/voyager.rrbasic

Lines changed: 127 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
112111
ENDPROC
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+
114239
DEF FNmarkdown_header$(L$)
115240
R$ = ""
116241
IF LEFT$(L$, 7) = "###### " THEN R$ = "###### "

0 commit comments

Comments
 (0)