module prettify_selftest implicit none private public :: dp, test_routine, & test_function, test_type, str_function integer, parameter :: dp = selected_real_kind ( 15 , 307) type test_type real (kind =dp ) :: r = 1.0d-3 integer :: i end type test_type contains subroutine test_routine( & r, i, j, k, l) integer, intent(in) :: r, i, j, k integer, intent (out) :: l l = test_function(r,i,j,k) end & subroutine pure function test_function(r, i, j, & k) & result(l) integer, intent(in) :: r, i, j, k integer :: l l=r + i +j +k end function function & str_function(a) result(l) character(len=*) :: a integer :: l if(len(a)<5)then l=0 else l=1 endif end function end module program example_prog use example, only: dp, test_routine, test_function, test_type,str_function implicit none integer :: r,i,j,k,l,my_integer,m integer, dimension(5) :: arr integer, dimension(20) :: big_arr integer :: endif type(test_type) :: t real(kind=dp) :: r1, r2, r3, r4, r5, r6 integer, pointer :: point point=> null( ) ! 1) white space formatting ! !***************************! ! example 1.1 r=1;i=-2;j=3;k=4;l=5 r2 = 0.0_dp; r3= 1.0_dp; r4 =2.0_dp; r5=3.0_dp; r6 = 4.0_dp r1=-(r2**i*(r3+r5*(-r4)-r6))-2.e+2 if( r.eq.2.and.r<=5) i=3 write(*, *)(merge(3, 1, i<=2)) write(*, *)test_function(r,i,j , k) t % r = 4.0_dp t%i = str_function( "t % i = " ) ! example 1.2 my_integer=2 i=3 j=5 big_arr = [1, 2, 3, 4, 5, & 6, 7, 8, 9, 10, & 11, 12, 13, 14, 15, & 16, 17, 18, 19, 20] ! example 1.3: disabling auto-formatter: my_integer = 2 !& i = 3 !& j = 5 !& !&< my_integer = 2 i = 3 j = 5 !&> big_arr = [ 1, 2, 3, 4, 5, & !& 6, 7, 8, 9, 10, & !& 11, 12, 13, 14, 15, & !& 16, 17, 18, 19, 20] !& ! example 1.4: big_arr = [1, 2, 3, 4, 5,& & 6, 7, 8, 9, 10, & & 11, 12, 13, 14, 15,& &16, 17, 18, 19, 20] ! 2) auto indentation for loops ! !*******************************! ! example 2.1 l = 0 do r= 1 , 10 select case (r) case(1) do_label: do i = 1,100 if (i<=2) then m =0 do while(m <4) m =m+1 do k=1,3 if (k==1) l =l +1 end do enddo endif enddo do_label case ( 2 ) l=i + j + k end select enddo ! example 2.2 do m = 1, 2 do r = 1, 3 write (*, *) r do k = 1, 4 do l = 1, 3 do i = 4, 5 do my_integer = 1, 1 do j = 1, 2 write (*, *) test_function(m, r, k, l) + i enddo enddo enddo enddo enddo enddo enddo ! 3) auto alignment for linebreaks ! !************************************! ! example 3.1 l = test_function(1, 2, test_function(1, 2, 3, 4), 4) + 3 *(2+1) l = test_function (1, 2, test_function(1,2, 3, 4),4) +& 3*(2+ 1 ) l = test_function(1, 2, & test_function(1, 2, 3, 4), 4)+ & 3 * (2+1) l = test_function(1, 2, & test_function(1, 2, 3, & 4), 4) + & 3*(2 + 1) ! example 3.2 arr = [1, (/3,4, 5/), 6] + [ 1, 2,3, 4,5 ] arr = [1,(/ 3, 4, 5 /) , & 6] +[1,2, 3, 4, 5 ] arr = [1,(/3,4,5/), & 6]+ & [1, 2, 3, 4, 5] arr = [1, (/3, 4, & 5/), & 6] + & [1, 2,3, 4, 5 ] ! example 3.3 l = test_function(1, 2, & 3, 4) l = test_function( & 1, 2, 3, 4) arr = [1, 2, & 3, 4, 5] arr = [ & 1, 2, 3, 4, 5] ! 4) more complex formatting and tricky test cases ! !**************************************************! ! example 4.1 l = 0 do r = 1, 10 select case ( r ) case( 1) do i=1,100;if (i<=2) then! comment do j = 1,5 do k= 1, 3 l = l + 1 ! unindented comment ! indented comment end do; enddo elseif ( .not. j ==4 ) then my_integer = 4 else write (*,*) " hello" endif enddo case(2 ) l = i+ j + k end select enddo ! example 4.2 if ( & l == & 111) & then do k = 1, 2 if (k == 1) & l = test_function(1, & test_function(r=4, i=5, & j=6, k=test_function(1,2*(3*(1 +1)), str_function ( ")a!(b['(;=dfe"), & 9) + & test_function(1, 2, 3, 4)), 9, 10) & ! test_function(1,2,3,4)),9,10) & ! +13*str_function('') + str_function('"') + 13*str_function('') + str_function('"') end & ! comment ! comment do endif ! example 4.3 arr = [1,( /3,4, & 5 /),& 6 ]+ & [1,2, 3, 4,5] ; arr = [1, 2,& 3, 4, 5] ! example 4.4 endif = 3 if(endif==2)then endif=5 else if(endif==3)then write(*,*)endif endif ! example 4.5 do i=1,2;if(.true.)then write(*, *)"hello" endif; enddo end program