GNU bug report logs - #58983
28.2; nroff-mode misshandled quoting

Previous Next

Package: emacs;

Reported by: Gavin Jaeger-Freeborn <gavinfreeborn <at> gmail.com>

Date: Thu, 3 Nov 2022 06:48:05 UTC

Severity: normal

Found in version 28.2

To reply to this bug, email your comments to 58983 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#58983; Package emacs. (Thu, 03 Nov 2022 06:48:05 GMT) Full text and rfc822 format available.

Acknowledgement sent to Gavin Jaeger-Freeborn <gavinfreeborn <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 03 Nov 2022 06:48:05 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Gavin Jaeger-Freeborn <gavinfreeborn <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 28.2; nroff-mode misshandled quoting
Date: Wed, 02 Nov 2022 21:40:45 -0700

Hello everyone,

Currently nroff-mode misidentifies double quotes in string definitions.
Currently all pairs of double quotes are highlighted as a string unless
used in a comment like in most languages. However, nroff/troff has one
special case where its is not the case. The following outlines how it should
work.

In nroff/troff you can define strings with the following format

.ds welcome hello world

This defines a `string` welcome with the contents `hello world'

Now if someone wanted to define a string that started with a space they
would instead use

.ds welcome " hello world

In addition you can call a macro with the same leeding `.` like so

.B "hello world"

This calls the macro `B` with it's first argument being `hello world`

The issue is that at the moment the strings are simply detected with the
code

(modify-syntax-entry ?\" "\"  2" st)

Meaning that (unless it's a comment) its assumed to be a string (at least
that is my understanding). Instead a special case needs to be added to
avoid doing this if the double quote is used in a string definition.

The closest thing to a language specification these languages have is
the troff user manual which defines the ds request as

> .ds xx
>
> Define a string xx containing string. Any initial double quote in string
> is stripped off to permit initial blanks.

The manual can be found at https://www.troff.org/54.pdf

For further examples on how this is used please see
https://raw.githubusercontent.com/aligrudi/neatroff_make/master/tmac/tmac.en

In addition https://github.com/aligrudi/neatroff_make/tree/master/demo
contains multiple other examples.

Thanks in advance!

Gavin



In GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.34, cairo version 1.17.6)
 of 2022-09-12 built on frederik
Windowing system distributor 'The X.Org Foundation', version 11.0.12101004
System Description: EndeavourOS

Configured using:
 'configure --with-x-toolkit=gtk3 --with-native-compilation
 --sysconfdir=/etc --prefix=/usr --libexecdir=/usr/lib
 --localstatedir=/var --with-cairo --with-harfbuzz --with-libsystemd
 --with-modules 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fno-plt
 -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security
 -fstack-clash-protection -fcf-protection -g
 -ffile-prefix-map=/build/emacs/src=/usr/src/debug -flto=auto'
 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=auto''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
X11 XDBE XIM XPM GTK3 ZLIB

Important settings:
  value of $LC_MONETARY: en_CA.UTF-8
  value of $LC_NUMERIC: en_CA.UTF-8
  value of $LC_TIME: en_CA.UTF-8
  value of $LANG: en_CA.UTF-8
  locale-coding-system: utf-8-unix

Major mode: mu4e:main

Minor modes in effect:
  mu4e-search-minor-mode: t
  mu4e-update-minor-mode: t
  mu4e-context-minor-mode: t
  windmove-mode: t
  display-time-mode: t
  org-yaap-mode: t
  clipmon-mode: t
  treemacs-filewatch-mode: t
  treemacs-follow-mode: t
  treemacs-git-mode: t
  treemacs-fringe-indicator-mode: t
  recentf-mode: t
  global-paren-face-mode: t
  repeat-mode: t
  winner-mode: t
  electric-pair-mode: t
  savehist-mode: t
  global-auto-revert-mode: t
  popper-mode: t
  diff-hl-flydiff-mode: t
  global-diff-hl-mode: t
  global-org-modern-mode: t
  shell-dirtrack-mode: t
  global-hl-line-mode: t
  corfu-history-mode: t
  global-corfu-mode: t
  vertico-mode: t
  marginalia-mode: t
  global-so-long-mode: t
  async-bytecomp-package-mode: t
  dired-async-mode: t
  override-global-mode: t
  apheleia-global-mode: t
  apheleia-mode: t
  puni-global-mode: t
  puni-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  global-prettify-symbols-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  overwrite-mode: overwrite-mode-binary

Load-path shadows:
/home/gavinok/.emacs.d/elpa/transient-20220918.2101/transient hides /usr/share/emacs/28.2/lisp/transient

Features:
(shadow face-remap message-attachment-reminder mu4e mu4e-org mu4e-main
mu4e-view mu4e-headers mu4e-compose mu4e-draft mu4e-actions smtpmail
mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark mu4e-message flow-fill
mu4e-contacts mu4e-update mu4e-folders mu4e-server mu4e-context
mu4e-vars mu4e-helpers mu4e-config ido puni vc-mtn vc-hg vc-bzr vc-src
vc-sccs vc-svn vc-cvs vc-rcs emacsbug sendmail misearch multi-isearch
view windmove sh-script smie tempel time org-duration org-eldoc
org-download org-attach org-id url-http url-auth url-gw org-yaap
diary-lib diary-loaddefs org-clock notifications clipmon writegood-mode
flyspell ispell lsp-zig lsp-steep lsp-svelte lsp-sqls
lsp-ruby-syntax-tree lsp-yaml lsp-xml lsp-vimscript lsp-vhdl lsp-volar
lsp-vetur lsp-html lsp-verilog lsp-vala lsp-v lsp-typeprof lsp-ttcn3
lsp-toml lsp-terraform lsp-tex lsp-tailwindcss lsp-sorbet lsp-solargraph
lsp-rust lsp-rf lsp-remark lsp-racket lsp-r lsp-purescript lsp-pylsp
lsp-pyls lsp-pwsh lsp-php lsp-pls lsp-perlnavigator lsp-perl
lsp-openscad lsp-ocaml lsp-magik lsp-nix lsp-nim lsp-nginx lsp-mint
lsp-marksman lsp-markdown lsp-lua lsp-kotlin lsp-json lsp-javascript
lsp-java-boot dap-java dap-gdb-lldb dap-utils dap-mode dap-tasks
dap-launch posframe dap-overlays lsp-java lsp-idris lsp-haxe lsp-haskell
lsp-groovy lsp-grammarly grammarly websocket bindat request lsp-hack
lsp-graphql lsp-gleam lsp-go lsp-completion lsp-gdscript lsp-fsharp
lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elixir lsp-elm
lsp-dockerfile lsp-docker yaml lsp-dhall lsp-d lsp-css lsp-csharp gnutls
lsp-crystal lsp-cmake lsp-clojure lsp-treemacs lsp-treemacs-generic
lsp-treemacs-themes treemacs-treelib treemacs treemacs-header-line
treemacs-compatibility treemacs-mode treemacs-bookmarks
treemacs-interface treemacs-extensions treemacs-mouse-interface
treemacs-tags treemacs-persistence treemacs-filewatch-mode
treemacs-follow-mode treemacs-rendering treemacs-annotations
treemacs-async treemacs-workspaces treemacs-dom treemacs-visuals
treemacs-fringe-indicator treemacs-scope pulse treemacs-faces
treemacs-icons treemacs-themes treemacs-core-utils pfuture
treemacs-logging treemacs-customization treemacs-macros
lsp-semantic-tokens lsp-clangd lsp-beancount lsp-bash lsp-ansible
lsp-angular lsp-ada lsp-actionscript lsp-pyright lsp-mode lsp-protocol
yasnippet spinner network-stream nsm markdown-mode color lv inline ht f
f-shortdoc shortdoc s dash haskell-doc inf-haskell haskell-decl-scan
imenu haskell haskell-completions haskell-load haskell-commands
highlight-uses-mode haskell-modules haskell-sandbox
haskell-navigate-imports haskell-repl haskell-svg haskell-collapse
haskell-debug haskell-interactive-mode haskell-presentation-mode
haskell-compile haskell-hoogle haskell-process haskell-session
haskell-indent haskell-mode haskell-cabal haskell-utils
haskell-font-lock haskell-indentation haskell-string
haskell-sort-imports haskell-lexeme haskell-align-imports
haskell-complete-module haskell-ghc-support etags fileloop xref dabbrev
haskell-customize org-indent ol-eww eww xdg url-queue mm-url ol-rmail
ol-mhe ol-irc ol-info ol-gnus nnselect gnus-search eieio-opt speedbar
ezimage dframe gnus-art mm-uu mml2015 mm-view mml-smime smime dig
gnus-sum shr kinsoku svg dom gnus-group gnus-undo gnus-start gnus-dbus
dbus xml gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo gnus-spec
gnus-int gnus-range message rmc puny rfc822 mml mml-sec epa derived epg
rfc6068 epg-config mailabbrev gmm-utils mailheader gnus-win gnus
nnheader gnus-util rmail rmail-loaddefs mail-utils ol-docview doc-view
jka-compr image-mode exif ol-bibtex ol-bbdb ol-w3m ol-doi org-link-doi
nroff-mode mule-util orderless cursor-sensor consult-vertico consult
compat-28 recentf tree-widget bookmark server hideshow checkdoc
flymake-proc flymake compile text-property-search thingatpt paren-face
hl-todo compat compat-macs executable vc-git repeaters repeat winner
dired-x elec-pair apheleia disp-table pcase savehist autorevert
filenotify popper project diff-hl-flydiff diff diff-hl log-view
pcvs-util vc-dir ewoc vc vc-dispatcher diff-mode org-protocol org-tempo
tempo org-modern ob-rust ob-forth ob-scheme ob-clojure ob-lisp ob-java
ob-dot ob-lua ob-C cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles
cc-align cc-engine cc-vars cc-defs ob-python python tramp-sh tramp
tramp-loaddefs trampver tramp-integration files-x tramp-compat
parse-time ls-lisp ob-shell shell ob-haskell ox-md ox-odt rng-loc
rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda org-refile
ox-html table ox-ascii ox-publish ox org-element avl-tree generator
org-contrib org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-footnote org-src ob-comint org-pcomplete pcomplete comint ansi-color
ring org-list org-faces org-entities noutline outline org-version
ob-emacs-lisp ob-core ob-eval org-table oc-basic bibtex iso8601
time-date ol org-keys oc org-compat org-macs org-loaddefs format-spec
find-func cal-menu calendar cal-loaddefs hl-line spaceway-theme cape
corfu-history corfu visual-regexp vertico-directory vertico marginalia
advice cus-edit pp cus-load wid-edit comp comp-cstr warnings rx so-long
pragmatapro-lig fontaine async-bytecomp dired-async async dired-aux
dired dired-loaddefs quelpa-use-package cl-extra quelpa mm-decode
mm-bodies mm-encode lisp-mnt mail-parse rfc2231 rfc2047 rfc2045 mm-util
ietf-drums mail-prsvr help-fns radix-tree help-mode use-package
use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key use-package-core finder-inf cl easy-mmode
edmacro kmacro info package browse-url url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core
cl-macs eieio-loaddefs password-cache json subr-x map url-vars seq
byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib iso-transl
tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice button loaddefs faces cus-face macroexp files
window text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote threads dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
cairo move-toolbar gtk x-toolkit x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 1884181 93137)
 (symbols 48 61947 21)
 (strings 32 321162 20706)
 (string-bytes 1 9511735)
 (vectors 16 113045)
 (vector-slots 8 2128991 115355)
 (floats 8 1035 778)
 (intervals 56 151390 236)
 (buffers 992 142))




This bug report was last modified 2 years and 24 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.