From b0115d1a000ee15d3ca773c3da3300595d805454 Mon Sep 17 00:00:00 2001 From: Laurence Kedward Date: Sun, 28 Nov 2021 11:43:49 +0000 Subject: Apply suggestion: don't use M_attr, simplify implementation --- src/fpm_backend_console.f90 | 59 +++++++++++++++------------------------------ src/fpm_backend_output.f90 | 22 ++++++----------- 2 files changed, 27 insertions(+), 54 deletions(-) (limited to 'src') diff --git a/src/fpm_backend_console.f90 b/src/fpm_backend_console.f90 index 73bcd5d..014e800 100644 --- a/src/fpm_backend_console.f90 +++ b/src/fpm_backend_console.f90 @@ -14,21 +14,30 @@ implicit none private public :: console_t +public :: LINE_RESET +public :: COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_RESET character(len=*), parameter :: ESC = char(27) +!> Escape code for erasing current line +character(len=*), parameter :: LINE_RESET = ESC//"[2K"//ESC//"[1G" +!> Escape code for moving up one line +character(len=*), parameter :: LINE_UP = ESC//"[1A" +!> Escape code for moving down one line +character(len=*), parameter :: LINE_DOWN = ESC//"[1B" +!> Escape code for red foreground color +character(len=*), parameter :: COLOR_RED = ESC//"[31m" +!> Escape code for green foreground color +character(len=*), parameter :: COLOR_GREEN = ESC//"[32m" +!> Escape code for yellow foreground color +character(len=*), parameter :: COLOR_YELLOW = ESC//"[93m" +!> Escape code to reset foreground color +character(len=*), parameter :: COLOR_RESET = ESC//"[0m" !> Console object type console_t !> Number of lines printed integer :: n_line = 1 - !> 'Plain' output (no escape codes) - logical :: plain_mode = .false. - !> Escape code for erasing current line - character(:), allocatable :: LINE_RESET - !> Escape code for moving up one line - character(:), allocatable :: LINE_UP - !> Escape code for moving down one line - character(:), allocatable :: LINE_DOWN + contains !> Write a single line to the console procedure :: write_line => console_write_line @@ -36,36 +45,8 @@ contains procedure :: update_line => console_update_line end type console_t -!> Constructor for console_t -interface console_t - procedure :: new_console -end interface console_t - contains -!> Initialise a new console object -function new_console(plain_mode) result(console) - !> 'Plain' output (no escape codes) - logical, intent(in), optional :: plain_mode - !> Console object to initialise - type(console_t) :: console - - if (present(plain_mode)) then - console%plain_mode = plain_mode - end if - - if (console%plain_mode) then - console%LINE_RESET = "" - console%LINE_UP = "" - console%LINE_DOWN = "" - else - console%LINE_RESET = ESC//"[2K"//ESC//"[1G" - console%LINE_UP = ESC//"[1A" - console%LINE_DOWN = ESC//"[1B" - end if - -end function new_console - !> Write a single line to the standard output subroutine console_write_line(console,str,line,advance) !> Console object @@ -92,7 +73,7 @@ subroutine console_write_line(console,str,line,advance) line = console%n_line end if - write(stdout,'(A)',advance=trim(adv)) console%LINE_RESET//str + write(stdout,'(A)',advance=trim(adv)) LINE_RESET//str if (adv=="yes") then console%n_line = console%n_line + 1 @@ -118,12 +99,12 @@ subroutine console_update_line(console,line_no,str) n = console%n_line - line_no !+ 1 !+ 1 ! Step back to line - write(stdout,'(A)',advance="no") repeat(console%LINE_UP,n)//console%LINE_RESET + write(stdout,'(A)',advance="no") repeat(LINE_UP,n)//LINE_RESET write(stdout,*) str ! Step forward to end - write(stdout,'(A)',advance="no") repeat(console%LINE_DOWN,n)//console%LINE_RESET + write(stdout,'(A)',advance="no") repeat(LINE_DOWN,n)//LINE_RESET !$omp end critical diff --git a/src/fpm_backend_output.f90 b/src/fpm_backend_output.f90 index 2cc8597..3f297f7 100644 --- a/src/fpm_backend_output.f90 +++ b/src/fpm_backend_output.f90 @@ -13,8 +13,7 @@ module fpm_backend_output use iso_fortran_env, only: stdout=>output_unit use fpm_filesystem, only: basename use fpm_targets, only: build_target_ptr -use fpm_backend_console, only: console_t -use M_attr, only: attr, attr_mode +use fpm_backend_console, only: console_t, LINE_RESET, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_RESET implicit none private @@ -58,14 +57,6 @@ contains logical, intent(in), optional :: plain_mode !> Progress object to initialise type(build_progress_t) :: progress - - if (plain_mode) then - call attr_mode('plain') - else - call attr_mode('color') - end if - - progress%console = console_t(plain_mode) progress%n_target = size(target_queue,1) progress%target_queue => target_queue @@ -105,7 +96,8 @@ contains else ! Pretty output - write(output_string,'(A,T40,A,A)') target_name,attr('compiling...') + write(output_string,'(A,T40,A,A)') target_name, COLOR_YELLOW//'compiling...'//COLOR_RESET + call progress%console%write_line(trim(output_string),progress%output_lines(queue_index)) call progress%console%write_line(trim(overall_progress)//'Compiling...',advance=.false.) @@ -142,9 +134,9 @@ contains end if if (build_stat == 0) then - write(output_string,'(A,T40,A,A)') target_name,attr('done.') + write(output_string,'(A,T40,A,A)') target_name,COLOR_GREEN//'done.'//COLOR_RESET else - write(output_string,'(A,T40,A,A)') target_name,attr('failed.') + write(output_string,'(A,T40,A,A)') target_name,COLOR_RED//'failed.'//COLOR_RESET end if write(overall_progress,'(A,I4,A)') '[',100*progress%n_complete/progress%n_target,'%] ' @@ -173,11 +165,11 @@ contains if (progress%plain_mode) then ! Plain output - write(*,'(A)') attr('[100%] Project compiled successfully.') + write(*,'(A)') '[100%] Project compiled successfully.' else ! Pretty output - write(*,'(A)') progress%console%LINE_RESET//attr('[100%] Project compiled successfully.') + write(*,'(A)') LINE_RESET//COLOR_GREEN//'[100%] Project compiled successfully.'//COLOR_RESET end if -- cgit v1.2.3