diff --git a/fprettify/__init__.py b/fprettify/__init__.py index d6450a3..6a07edf 100644 --- a/fprettify/__init__.py +++ b/fprettify/__init__.py @@ -899,6 +899,8 @@ def replace_relational_single_fline(f_line, cstyle): .ne. <--> /= """ + # keep track of whether the line may be affected + line_affected = False new_line = f_line # only act on lines that do contain a relation @@ -942,8 +944,25 @@ def replace_relational_single_fline(f_line, cstyle): line_parts[pos] = part new_line = ''.join(line_parts) + line_affected = True - return new_line + return new_line, line_affected + + +def replace_relational_lines(lines, cstyle): + """ + format a list of lines - replaces scalar relational + operators in logical expressions to either Fortran or C-style + by calling original function for single line. + """ + + new_lines = [] + + for f_line in lines: + new_line, changed = replace_relational_single_fline(f_line, cstyle) + new_lines.append(new_line) + + return new_lines def replace_keywords_single_fline(f_line, case_dict): @@ -1559,7 +1578,10 @@ def reformat_ffile_combined(infile, outfile, impose_indent=True, indent_size=3, f_line = f_line.strip(' ') if impose_replacements: - f_line = replace_relational_single_fline(f_line, cstyle) + f_line, relation_found = replace_relational_single_fline(f_line, cstyle) + if relation_found: + updated_lines = replace_relational_lines(lines, cstyle) + linebreak_pos = get_linebreak_pos(updated_lines, filter_fypp=not indent_fypp) if impose_case: f_line = replace_keywords_single_fline(f_line, case_dict) diff --git a/fprettify/tests/__init__.py b/fprettify/tests/__init__.py index 5980930..6195cbb 100644 --- a/fprettify/tests/__init__.py +++ b/fprettify/tests/__init__.py @@ -381,7 +381,7 @@ def test_relation_replacement(self): "'==== heading", "if (vtk%my_rank .eq. 0) write (vtk%filehandle_par, '(\"\",", - "if (abc(1) .lt. -bca .or. &\n qwe .gt. ewq) then"] + "if (abc(1)<=-bca .or. &\n qwe .gt. ewq) then"] f_outstring = ["if (min .lt. max .and. min .lt. thres)", "if (min .gt. max .and. min .gt. thres)", "if (min .eq. max .and. min .eq. thres)", @@ -391,7 +391,7 @@ def test_relation_replacement(self): "'==== heading", "if (vtk%my_rank .eq. 0) write (vtk%filehandle_par, '(\"\",", - "if (abc(1) .lt. -bca .or. &\n qwe .gt. ewq) then"] + "if (abc(1) .le. -bca .or. &\n qwe .gt. ewq) then"] c_outstring = ["if (min < max .and. min < thres)", "if (min > max .and. min > thres)", "if (min == max .and. min == thres)", @@ -401,7 +401,7 @@ def test_relation_replacement(self): "'==== heading", "if (vtk%my_rank == 0) write (vtk%filehandle_par, '(\"\",", - "if (abc(1) < -bca .or. &\n qwe > ewq) then"] + "if (abc(1) <= -bca .or. &\n qwe > ewq) then"] for i in range(0, len(instring)): self.assert_fprettify_result(['--enable-replacements', '--c-relations'], instring[i], c_outstring[i]) self.assert_fprettify_result(['--enable-replacements'], instring[i], f_outstring[i])