@@ -523,7 +523,7 @@ subroutine format_output_string( self, unit, string, procedure_name, &
523523 character (* ), intent (in ) :: procedure_name
524524 character (* ), intent (in ) :: col_indent
525525
526- integer :: count, indent_len, index , iostat, length, remain
526+ integer :: count, indent_len, index_ , iostat, length, remain
527527 character (256 ) :: iomsg
528528
529529 length = len_trim (string)
@@ -544,27 +544,32 @@ subroutine format_output_string( self, unit, string, procedure_name, &
544544
545545 subroutine format_first_line ()
546546
547- if ( length <= self % max_width .or. self % max_width == 0 ) then
547+ if ( self % max_width == 0 .or. &
548+ ( length <= self % max_width .and. &
549+ index ( string (1 :length), new_line(' a' )) == 0 ) ) then
548550 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
549551 string (1 :length)
550552 remain = 0
551553 return
552554 else
553555
554- do index= self % max_width, 1 , - 1
555- if ( string (index:index) == ' ' ) exit
556- end do
556+ index_ = index ( string (1 :min (length, self % max_width)), new_line(' a' ))
557+ if ( index_ == 0 ) then
558+ do index_= self % max_width, 1 , - 1
559+ if ( string (index_:index_) == ' ' ) exit
560+ end do
561+ end if
557562
558- if ( index == 0 ) then
563+ if ( index_ == 0 ) then
559564 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
560565 string (1 :self % max_width)
561566 count = self % max_width
562567 remain = length - count
563568 return
564569 else
565570 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
566- string (1 :index -1 )
567- count = index
571+ string (1 :index_ -1 )
572+ count = index_
568573 remain = length - count
569574 return
570575 end if
@@ -585,20 +590,24 @@ subroutine format_subsequent_line()
585590 return
586591 else
587592
588- do index= count+ self % max_width, count+1 , - 1
589- if ( string (index:index) == ' ' ) exit
590- end do
593+ index_ = count + index ( string (count+1 :count+ self % max_width), &
594+ new_line(' a' ))
595+ if (index_ == count) then
596+ do index_= count+ self % max_width, count+1 , - 1
597+ if ( string (index_:index_) == ' ' ) exit
598+ end do
599+ end if
591600
592- if ( index == count ) then
601+ if ( index_ == count ) then
593602 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
594603 string (count+1 :count+ self % max_width)
595604 count = count + self % max_width
596605 remain = length - count
597606 return
598607 else
599608 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
600- string (count+1 :index -1 )
601- count = index
609+ string (count+1 :index_ -1 )
610+ count = index_
602611 remain = length - count
603612 return
604613 end if
@@ -611,29 +620,35 @@ end subroutine format_subsequent_line
611620
612621 subroutine indent_format_subsequent_line ()
613622
614- if ( remain <= self % max_width - indent_len ) then
623+ if ( index ( string (count+1 :length), new_line(' a' )) == 0 .and. &
624+ remain <= self % max_width - indent_len ) then
615625 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
616626 col_indent // string (count+1 :length)
617627 count = length
618628 remain = 0
619629 return
620630 else
621631
622- do index= count+ self % max_width- indent_len, count+1 , - 1
623- if ( string (index:index) == ' ' ) exit
624- end do
632+ index_ = count + index ( string (count+1 : &
633+ min ( length, count+ self % max_width - indent_len) ), &
634+ new_line(' a' ))
635+ if (index_ == count) then
636+ do index_= count+ self % max_width- indent_len, count+1 , - 1
637+ if ( string (index_:index_) == ' ' ) exit
638+ end do
639+ end if
625640
626- if ( index == count ) then
641+ if ( index_ == count ) then
627642 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
628- col_indent // &
643+ col_indent // &
629644 string (count+1 :count+ self % max_width- indent_len)
630645 count = count + self % max_width - indent_len
631646 remain = length - count
632647 return
633648 else
634649 write ( unit, ' (a)' , err= 999 , iostat= iostat, iomsg= iomsg ) &
635- col_indent // string (count+1 :index -1 )
636- count = index
650+ col_indent // string (count+1 :index_ -1 )
651+ count = index_
637652 remain = length - count
638653 return
639654 end if
0 commit comments