aboutsummaryrefslogtreecommitdiff
path: root/dumb_render.f90
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeff@approximatrix.com>2020-05-14 08:31:44 -0400
committerJeffrey Armstrong <jeff@approximatrix.com>2020-05-14 08:31:44 -0400
commitac37668c0765703a2d76edac0d1d8b8f55be4e56 (patch)
treefa816ff133589627bf644c80dbb14ca0c56d893f /dumb_render.f90
parent401b544c7d188ad865f2866d2cc0c43a658613a8 (diff)
downloadLR-87-ac37668c0765703a2d76edac0d1d8b8f55be4e56.tar.gz
LR-87-ac37668c0765703a2d76edac0d1d8b8f55be4e56.zip
Renderer class now has optional arguments for drawing text to indicate list items, headings, etc. Dumb renderer now draws headings a bit nicer.
Diffstat (limited to 'dumb_render.f90')
-rw-r--r--dumb_render.f90102
1 files changed, 95 insertions, 7 deletions
diff --git a/dumb_render.f90 b/dumb_render.f90
index 93897ed..3834e5c 100644
--- a/dumb_render.f90
+++ b/dumb_render.f90
@@ -27,6 +27,8 @@ implicit none
integer, parameter::width = 79
integer, parameter::height = 24
+ character, parameter::bullet_character = '-'
+
type, extends(renderer) :: dumb_renderer
integer::link_index
@@ -46,14 +48,14 @@ implicit none
procedure :: draw_porportional => dumb_text_draw
- procedure :: preformatted_width => dumb_text_width
- procedure :: preformatted_height => dumb_text_height
+ procedure :: preformatted_width => dumb_simple_width
+ procedure :: preformatted_height => dumb_simple_height
procedure :: is_preformatted_visible => dumb_text_visible
- procedure :: draw_preformatted => dumb_text_draw
+ procedure :: draw_preformatted => dumb_simple_draw
procedure :: link_width => dumb_link_width
- procedure :: link_height => dumb_text_height
+ procedure :: link_height => dumb_simple_height
procedure :: is_link_visible => dumb_text_visible
procedure :: draw_link => dumb_link_draw
@@ -122,28 +124,66 @@ contains
end function store_link
- function dumb_text_width(self, text)
+ function dumb_text_width(self, text, heading, list_item)
implicit none
class(dumb_renderer)::self
character(*), intent(in)::text
+ integer, optional::heading
+ logical, optional::list_item
integer::dumb_text_width
dumb_text_width = len_trim(text)
+ if(present(list_item)) then
+ if(list_item) then
+ dumb_text_width = dumb_text_width + 3
+ end if
+ end if
+
end function dumb_text_width
- function dumb_text_height(self, text)
+ function dumb_text_height(self, text, heading, list_item)
implicit none
class(dumb_renderer)::self
character(*), intent(in)::text
+ integer, optional::heading
+ logical, optional::list_item
integer::dumb_text_height
dumb_text_height = 1
+ if(present(heading)) then
+ if(heading > 0) then
+ dumb_text_height = 2
+ end if
+ end if
+
end function dumb_text_height
+ function dumb_simple_width(self, text)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::text
+ integer::dumb_simple_width
+
+ dumb_simple_width = len_trim(text)
+
+ end function dumb_simple_width
+
+ function dumb_simple_height(self, text)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::text
+ integer::dumb_simple_height
+
+ dumb_simple_height = 1
+
+ end function dumb_simple_height
+
function dumb_text_visible(self, text)
implicit none
@@ -157,7 +197,7 @@ contains
end function dumb_text_visible
- subroutine dumb_text_draw(self, text)
+ subroutine dumb_simple_draw(self, text)
implicit none
class(dumb_renderer)::self
@@ -177,6 +217,54 @@ contains
write(*, formatting) text(1:limit_x)
end if
+ end subroutine dumb_simple_draw
+
+ subroutine dumb_text_draw(self, text, heading, list_item)
+ implicit none
+
+ class(dumb_renderer)::self
+ character(*), intent(in)::text
+ integer, optional::heading
+ logical, optional::list_item
+ integer::limit_x
+ character(5)::formatting
+ character(self%max_width)::heading_line
+
+ ! Put a bullet for list items
+ if(present(list_item)) then
+ if(list_item) then
+ write(*, '(1X, A1, 1X)', advance='no') bullet_character
+ end if
+ end if
+
+ limit_x = min(len_trim(text), self%max_width)
+ if(limit_x == 0) then
+ write(*,*) " "
+ else
+ if(limit_x < 10) then
+ write(formatting, '(A2, I1, A1)') '(A', limit_x, ')'
+ else
+ write(formatting, '(A2, I2, A1)') '(A', limit_x, ')'
+ end if
+
+ write(*, formatting) text(1:limit_x)
+ end if
+
+ ! For headings, plop a second line as an underline
+ if(present(heading)) then
+ if(heading > 0) then
+ if(limit_x > 0) then
+ if(heading == 1) then
+ heading_line = repeat("=", limit_x)
+ else
+ heading_line = repeat("-", limit_x)
+ end if
+ write(*, formatting) heading_line(1:limit_x)
+ else
+ write(*,*) " "
+ end if
+ end if
+ end if
end subroutine dumb_text_draw