diff options
author | Jeffrey Armstrong <jeff@approximatrix.com> | 2020-04-28 20:55:15 -0400 |
---|---|---|
committer | Jeffrey Armstrong <jeff@approximatrix.com> | 2020-04-28 20:55:15 -0400 |
commit | dfd21b695107fc01941e3218b60d360ee38fb150 (patch) | |
tree | 21c6097a544870972d21f69eea57e8ada5f7555f /dumb_render.f90 | |
parent | eb8d9bc74a0624dbc98ffb75268a3ba57bd43b40 (diff) | |
download | LR-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.f90 | 93 |
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 |