A small non-functional browser
I've been coding a small 'browser' from scratch these days.
The idea was to keep dependencies at minimum. So, I would use raw sockets to do everything and use raylib to render it.
In the end I gave up understanding how open_ssl cryptography worked from specification and ended up just calling openssl and including it as dependency.
it can handle http:// https:// (both on text mode) and did I say it can also display gemini capsules if given a gemini:// url?
Note: design not final
Did you like it?
Render gemini is beautiful:
render_gemini_response :: proc(gemtext : string) { lines := strings.split(gemtext,"\n") line_number : i32 = 0 draw_height : i32 = 50 for line in lines { if len(line) < 3 { continue } first_char := line[0] switch first_char { case '#': heading := 1 if line[1] == '#' { heading += 1 if line[2] == '#' { heading += 1 } } fsize :i32 = i32(10 + 10 / heading) rl.DrawText(rl.TextFormat("%d",line_number),10,draw_height + i32(camera_position),fsize,rl.GRAY) rl.DrawText(rl.TextFormat("%s",line[heading:]),50,draw_height + i32(camera_position),fsize,rl.BLACK/9*8) draw_height += fsize + 1 break case '=': if line[1] == '>' { //fmt.println("link ") rl.DrawText(rl.TextFormat("%d",line_number),10,draw_height + i32(camera_position),12,rl.GRAY) rl.DrawText(rl.TextFormat("%s",line[:]),50,draw_height + i32(camera_position),12,rl.DARKBLUE) draw_height += 12 + 1 } break case '>': rl.DrawText(rl.TextFormat("%d",line_number),10,draw_height + i32(camera_position),15,rl.GRAY) rl.DrawText(rl.TextFormat("\""),45,draw_height + i32(camera_position),20,rl.GOLD) rl.DrawText(rl.TextFormat("%s",line[1:]),50+3,draw_height + i32(camera_position),12,rl.LIME) draw_height += 15 + 1 //fmt.println("quote ") break case '*': rl.DrawText(rl.TextFormat("%d",line_number),10,draw_height + i32(camera_position),12,rl.GRAY) rl.DrawText(rl.TextFormat(". %s",line[1:]),50,draw_height + i32(camera_position),12,rl.BLACK) draw_height += 12 + 1 //fmt.println("quote ") break case: fsize :: 15 rl.DrawText(rl.TextFormat("%d",line_number),10,draw_height + i32(camera_position),fsize,rl.GRAY) rl.DrawTextEx(font,rl.TextFormat("%s",line[:]),rl.Vector2(rl.Vector2{50,f32(draw_height) + f32(camera_position)}),fsize,0,rl.BLACK) draw_height += fsize + 1 break } line_number += 1 } }
Poll Results
1. yes
█████████████████████▁▁▁ 86%
2. no
███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ 14%
21 votes were cast.
#gemini 🗳️ #programming #software #web
Jun 02 · 5 weeks ago · 👍 norayr, akkartik, DocEdelgas, ps, 0x, Not4uffinonMobile, the_mantelman · 🔥 1
3 Comments ↓
🐧 the_mantelman · Jun 03 at 16:58:
So, where can I find the source code?
🚀 LucasMW [OP] · Jun 03 at 19:50:
I haven't publish it anywhere except snippets. It still buggy and unfinished. I don't know if I want to opensource it either.
🚀 LucasMW [OP] · Jun 04 at 20:53:
Added some code which renders gemtext as an example.
We don't handle emojis an other special chars yet.
Source