gbranden pushed a commit to branch master
in repository groff.
commit 25ef9f6bdad8f410749388e20caaa5c2d5e9ddee
Author: G. Branden Robinson <[email protected]>
AuthorDate: Wed Feb 26 04:55:59 2025 -0600
[eqn,pic,preconv,refer,soelim,tbl]: Fix lf reqs.
Use `lf` requests _even more_ carefully.
* src/preproc/eqn/main.cpp (do_file):
* src/preproc/pic/troff.cpp (troff_output::set_location):
* src/preproc/preconv/preconv.cpp (do_file):
* src/preproc/refer/refer.cpp (do_file, output_pending_line):
* src/preproc/soelim/soelim.cpp (set_location):
* src/preproc/tbl/main.cpp (main):
* src/preproc/tbl/table.cpp (set_troff_location): Output file name with
leading double quote in generated `lf` request only if it doesn't
already start with one.
Avoids misleading output like:
troff: backtrace: file '"man/groff_char.7':1062
troff:"man/groff_char.7:1062: warning: special character '.j' not defined
---
ChangeLog | 15 +++++++++++++++
src/preproc/eqn/main.cpp | 3 ++-
src/preproc/pic/troff.cpp | 3 ++-
src/preproc/preconv/preconv.cpp | 3 ++-
src/preproc/refer/refer.cpp | 7 ++++---
src/preproc/soelim/soelim.cpp | 3 ++-
src/preproc/tbl/main.cpp | 10 +++++++---
src/preproc/tbl/table.cpp | 4 +++-
8 files changed, 37 insertions(+), 11 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 05d4eaeae..6e1dc1271 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2025-02-26 G. Branden Robinson <[email protected]>
+
+ [eqn,pic,preconv,refer,soelim,tbl]: Use `lf` requests _even
+ more_ carefully.
+
+ * src/preproc/eqn/main.cpp (do_file):
+ * src/preproc/pic/troff.cpp (troff_output::set_location):
+ * src/preproc/preconv/preconv.cpp (do_file):
+ * src/preproc/refer/refer.cpp (do_file, output_pending_line):
+ * src/preproc/soelim/soelim.cpp (set_location):
+ * src/preproc/tbl/main.cpp (main):
+ * src/preproc/tbl/table.cpp (set_troff_location): Output file
+ name with leading double quote in generated `lf` request only if
+ it doesn't already start with one.
+
2025-02-24 G. Branden Robinson <[email protected]>
Implement approximate (`troff -a`) output of zero-width nodes
diff --git a/src/preproc/eqn/main.cpp b/src/preproc/eqn/main.cpp
index e537d206a..35f7a0550 100644
--- a/src/preproc/eqn/main.cpp
+++ b/src/preproc/eqn/main.cpp
@@ -106,7 +106,8 @@ void do_file(FILE *fp, const char *filename)
current_lineno = 1;
current_filename = fn.contents();
if (output_format == troff)
- (void) printf(".lf %d \"%s\n", current_lineno, current_filename);
+ (void) printf(".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"", current_filename);
while (read_line(fp, &linebuf)) {
if (linebuf.length() >= 4
&& linebuf[0] == '.' && linebuf[1] == 'l' && linebuf[2] == 'f'
diff --git a/src/preproc/pic/troff.cpp b/src/preproc/pic/troff.cpp
index 2a416780e..0687b0ff0 100644
--- a/src/preproc/pic/troff.cpp
+++ b/src/preproc/pic/troff.cpp
@@ -600,7 +600,8 @@ void troff_output::set_location(const char *s, int n)
}
}
if (update_file_name)
- printf(".lf %d \"%s\n", n, s);
+ printf(".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"", current_filename);
else
printf(".lf %d\n", n);
}
diff --git a/src/preproc/preconv/preconv.cpp b/src/preproc/preconv/preconv.cpp
index cd3d34a2a..b8517389f 100644
--- a/src/preproc/preconv/preconv.cpp
+++ b/src/preproc/preconv/preconv.cpp
@@ -1197,7 +1197,8 @@ do_file(const char *filename)
string fn(filename);
fn += '\0';
normalize_for_lf(fn);
- (void) printf(".lf 1 \"%s\n", fn.contents());
+ (void) printf(".lf 1 %s%s\n", ('"' == filename[0]) ? "" : "\"",
+ fn.contents());
}
int success = 1;
// Call converter (converters write to stdout).
diff --git a/src/preproc/refer/refer.cpp b/src/preproc/refer/refer.cpp
index a51518360..66eeda84f 100644
--- a/src/preproc/refer/refer.cpp
+++ b/src/preproc/refer/refer.cpp
@@ -475,8 +475,8 @@ static void do_file(const char *filename)
normalize_for_lf(fn);
current_lineno = 1;
current_filename = fn.contents();
- (void) fprintf(outfp, ".lf %d \"%s\n", current_lineno,
- current_filename);
+ (void) fprintf(outfp, ".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"", current_filename);
string line;
for (;;) {
line.clear();
@@ -691,7 +691,8 @@ static void output_pending_line()
if (!accumulate)
immediately_output_references();
if (need_syncing) {
- fprintf(outfp, ".lf %d \"%s\n", current_lineno, current_filename);
+ fprintf(outfp, ".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"", current_filename);
need_syncing = 0;
}
}
diff --git a/src/preproc/soelim/soelim.cpp b/src/preproc/soelim/soelim.cpp
index 4364d335d..1f66cc395 100644
--- a/src/preproc/soelim/soelim.cpp
+++ b/src/preproc/soelim/soelim.cpp
@@ -130,7 +130,8 @@ void set_location()
{
if (!want_raw_output) {
if (!want_tex_output)
- printf(".lf %d \"%s\n", current_lineno, current_filename);
+ printf(".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"", current_filename);
else
// XXX: Should we quote the file name? What's TeX-conventional?
printf("%% file %s, line %d\n", current_filename, current_lineno);
diff --git a/src/preproc/tbl/main.cpp b/src/preproc/tbl/main.cpp
index d068d1f08..00c37fb71 100644
--- a/src/preproc/tbl/main.cpp
+++ b/src/preproc/tbl/main.cpp
@@ -1708,7 +1708,8 @@ int main(int argc, char **argv)
if (argv[i][0] == '-' && argv[i][1] == '\0') {
current_lineno = 1;
current_filename = "-";
- (void) printf(".lf %d \"\%s\n", current_lineno,
+ (void) printf(".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"",
current_filename);
process_input_file(stdin);
}
@@ -1725,7 +1726,8 @@ int main(int argc, char **argv)
normalize_for_lf(fn);
current_lineno = 1;
current_filename = fn.contents();
- (void) printf(".lf %d \"\%s\n", current_lineno,
+ (void) printf(".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"",
current_filename);
process_input_file(fp);
}
@@ -1734,7 +1736,9 @@ int main(int argc, char **argv)
else {
current_lineno = 1;
current_filename = "-";
- (void) printf(".lf %d \"\%s\n", current_lineno, current_filename);
+ (void) printf(".lf %d %s%s\n", current_lineno,
+ ('"' == current_filename[0]) ? "" : "\"",
+ current_filename);
process_input_file(stdin);
}
if (ferror(stdout))
diff --git a/src/preproc/tbl/table.cpp b/src/preproc/tbl/table.cpp
index fa12d1af2..a6e8d229d 100644
--- a/src/preproc/tbl/table.cpp
+++ b/src/preproc/tbl/table.cpp
@@ -3208,7 +3208,9 @@ void set_troff_location(const char *fn, int ln)
string filename(fn);
filename += '\0';
normalize_for_lf(filename);
- printfs(".lf %1 \"%2\n", as_string(ln), filename.contents());
+ printfs(".lf 1 %1%2\n", ('"' == filename[0]) ? "" : "\"",
+ filename.contents());
+
last_filename = fn;
location_force_filename = 0;
}
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit