aboutsummaryrefslogtreecommitdiff
path: root/dumb_render.f90
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeff@approximatrix.com>2020-04-28 20:55:15 -0400
committerJeffrey Armstrong <jeff@approximatrix.com>2020-04-28 20:55:15 -0400
commitdfd21b695107fc01941e3218b60d360ee38fb150 (patch)
tree21c6097a544870972d21f69eea57e8ada5f7555f /dumb_render.f90
parenteb8d9bc74a0624dbc98ffb75268a3ba57bd43b40 (diff)
downloadLR-87-dfd21b695107fc01941e3218b60d360ee38fb150.tar.gz
LR-87-dfd21b695107fc01941e3218b60d360ee38fb150.zip
Links are now rendered in the dumb renderer. Preparation sub now available before every layout is performed.
Diffstat (limited to 'dumb_render.f90')
-rw-r--r--dumb_render.f9093
1 files changed, 92 insertions, 1 deletions
diff --git a/dumb_render.f90 b/dumb_render.f90
index f50efe1..7832891 100644
--- a/dumb_render.f90
+++ b/dumb_render.f90
@@ -2,11 +2,18 @@ module dumb_render
use render
implicit none
+ integer, parameter::width = 79
+ integer, parameter::height = 24
+
type, extends(renderer) :: dumb_renderer
+ integer::link_index
+ character(len=1024), dimension(height)::link_urls
+
contains
procedure :: initialize => dumb_initialize
+ procedure :: prepare_for_layout => prepare_for_dumb_layout
procedure :: text_width => dumb_text_width
procedure :: text_height => dumb_text_height
@@ -20,6 +27,12 @@ implicit none
procedure :: draw_preformatted => dumb_text_draw
+ procedure :: link_width => dumb_link_width
+ procedure :: link_height => dumb_text_height
+ procedure :: is_link_visible => dumb_text_visible
+
+ procedure :: draw_link => dumb_link_draw
+
end type dumb_renderer
contains
@@ -29,11 +42,41 @@ contains
class(dumb_renderer)::self
- self%max_width = 79
+ self%max_width = width
self%y = 0
+ self%link_index = 0
+ self%link_urls = " "
+
end subroutine dumb_initialize
+ subroutine prepare_for_dumb_layout(self)
+ implicit none
+
+ class(dumb_renderer)::self
+
+ self%link_index = 0
+ self%link_urls = " "
+
+ ! Write a page feed to clear the screen (not really necessary, but...)
+ write(*, '(A1)', advance='no') char(12)
+
+ end subroutine prepare_for_dumb_layout
+
+ function store_link(self, url)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::url
+ integer::store_link
+
+ self%link_index = self%link_index + 1
+ self%link_urls(self%link_index) = url
+
+ store_link = self%link_index
+
+ end function store_link
+
function dumb_text_width(self, text)
implicit none
@@ -90,4 +133,52 @@ contains
end subroutine dumb_text_draw
+ function build_link_text(self, text, idnum) result(res)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::text
+ integer, intent(in)::idnum
+ character(width)::res
+
+ write(res, '(A1, I3, A2)') '[', idnum,']['
+
+ if(len_trim(text) < (width - 7)) then
+ res = trim(res)//trim(text)//']'
+ else
+ res = trim(res)//text(1:(width-7))//']'
+ end if
+
+ end function build_link_text
+
+ function dumb_link_width(self, text)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::text
+ integer::dumb_link_width
+
+ character(width)::link
+
+ link = build_link_text(self, text, 0)
+
+ dumb_link_width = dumb_text_width(self, link)
+
+ end function dumb_link_width
+
+ subroutine dumb_link_draw(self, text, url)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::text, url
+ integer::i
+ character(width)::link
+
+ i = store_link(self, url)
+ link = build_link_text(self, text, i)
+
+ call dumb_text_draw(self, link)
+
+ end subroutine dumb_link_draw
+
end module dumb_render \ No newline at end of file