unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#22246: 24.4; C-Mode: Syntax-Highlighting for „//“-Comment-Line continued with „\“
@ 2015-12-26 14:59 Andreas Pickart
       [not found] ` <mailman.927.1451154668.843.bug-gnu-emacs@gnu.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Andreas Pickart @ 2015-12-26 14:59 UTC (permalink / raw)
  To: 22246

[-- Attachment #1: Type: text/plain, Size: 4300 bytes --]

In Standard-C, it is allowed to continue Lines with a Backslash („\“).
This even works for Single-Line-Comments („//“). But the C-Mode of Emacs
does not colour the Continuation-Line right in this Case.




In GNU Emacs 24.4.1 (x86_64-pc-linux-gnu, GTK+ Version 3.14.5)
 of 2015-03-07 on trouble, modified by Debian
Configured using:
 `configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --with-pop=yes
 --enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.4/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.4/site-lisp:/usr/share/emacs/site-lisp
 --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
 --libexecdir=/usr/lib --localstatedir=/var/lib
 --infodir=/usr/share/info --mandir=/usr/share/man --with-pop=yes
 --enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.4/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.4/site-lisp:/usr/share/emacs/site-lisp
 --with-x=yes --with-x-toolkit=gtk3 --with-toolkit-scroll-bars
 'CFLAGS=-g -O2 -fstack-protector-strong -Wformat
 -Werror=format-security -Wall' CPPFLAGS=-D_FORTIFY_SOURCE=2
 LDFLAGS=-Wl,-z,relro'

Important settings:
  value of $LC_ALL: en_US.utf8
  value of $LANG: de_DE.UTF-8
  locale-coding-system: utf-8-unix

Major mode: C/l

Minor modes in effect:
  show-paren-mode: t
  tooltip-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  abbrev-mode: t

Recent input:
/ / SPC C o m m e n t \ RET s t i l l SPC C o m m e 
n t RET ESC x r e p TAB o TAB r TAB RET

Recent messages:
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...done
Loading debian-ispell...done
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done
Loading term/xterm...done
For information about GNU Emacs and the GNU system, type C-h C-a.
(New file)
Auto-saving...done
Making completion list... [2 times]

Load-path shadows:
/usr/share/emacs/24.4/site-lisp/debian-startup hides /usr/share/emacs/site-lisp/debian-startup
/usr/share/emacs24/site-lisp/dictionaries-common/ispell hides /usr/share/emacs/24.4/lisp/textmodes/ispell
/usr/share/emacs24/site-lisp/dictionaries-common/flyspell hides /usr/share/emacs/24.4/lisp/textmodes/flyspell

Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util
help-fns mail-prsvr mail-utils help-mode cc-langs cl-loaddefs cl-lib
cc-mode cc-fonts easymenu cc-guess cc-menus cc-cmds cc-styles cc-align
cc-engine cc-vars cc-defs xterm time-date paren tooltip electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list newcomment lisp-mode
prog-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core frame cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev
minibuffer nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
dbusbind gfilenotify dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)

Memory information:
((conses 16 106480 3340)
 (symbols 48 20255 0)
 (miscs 40 41 132)
 (strings 32 16733 4161)
 (string-bytes 1 571592)
 (vectors 16 9569)
 (vector-slots 8 369435 10826)
 (floats 8 67 286)
 (intervals 56 231 0)
 (buffers 960 13)
 (heap 1024 8627 714))

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#22246: 24.4; C-Mode: Syntax-Highlighting for „//“-Comment-Line continued with „\“
       [not found] ` <mailman.927.1451154668.843.bug-gnu-emacs@gnu.org>
@ 2015-12-28 17:55   ` Alan Mackenzie
  2015-12-29 15:00     ` Alan Mackenzie
  0 siblings, 1 reply; 3+ messages in thread
From: Alan Mackenzie @ 2015-12-28 17:55 UTC (permalink / raw)
  To: Andreas Pickart; +Cc: 22246

Hello, Andreas.

There's now at least a provisional fix to this bug in the Emacs
repository release branch.

In article <mailman.927.1451154668.843.bug-gnu-emacs@gnu.org> you wrote:
> [-- text/plain, encoding quoted-printable, charset: utf-8, 114 lines --]

> In Standard-C, it is allowed to continue Lines with a Backslash („\“).
> This even works for Single-Line-Comments („//“). But the C-Mode of Emacs
> does not colour the Continuation-Line right in this Case.

Thanks for taking the trouble to report this bug.

> In GNU Emacs 24.4.1 (x86_64-pc-linux-gnu, GTK+ Version 3.14.5)
>  of 2015-03-07 on trouble, modified by Debian

I've converted the fix to work on Emacs 24.4, but after applying the
patch, you'll need (i) to rebuild the Emacs binary, and also (ii) to
rebuild CC Mode.  If you want any help on these, feel free to send me a
private email.

Here's the patch for Emacs 24.4:



--- src/syntax.c~	2015-12-28 17:31:54.658565440 +0000
+++ src/syntax.c	2015-12-28 16:26:02.057742664 +0000
@@ -139,6 +139,7 @@
 
 static Lisp_Object Qsyntax_table_p;
 static Lisp_Object Qsyntax_table, Qscan_error;
+static Lisp_Object Qcomment_end_can_be_escaped;
 
 /* This is the internal form of the parse state used in parse-partial-sexp.  */
 
@@ -734,8 +735,10 @@
 		   || SYNTAX_FLAGS_COMMENT_NESTED (syntax) != comnested))
 	continue;
 
-      /* Ignore escaped characters, except comment-enders.  */
-      if (code != Sendcomment && char_quoted (from, from_byte))
+      /* Ignore escaped characters, except comment-enders which cannot
+         be escaped.  */
+      if ((Vcomment_end_can_be_escaped || code != Sendcomment)
+          && char_quoted (from, from_byte))
 	continue;
 
       switch (code)
@@ -2286,7 +2289,8 @@
       if (code == Sendcomment
 	  && SYNTAX_FLAGS_COMMENT_STYLE (syntax, 0) == style
 	  && (SYNTAX_FLAGS_COMMENT_NESTED (syntax) ?
-	      (nesting > 0 && --nesting == 0) : nesting < 0))
+	      (nesting > 0 && --nesting == 0) : nesting < 0)
+          && !(Vcomment_end_can_be_escaped && char_quoted (from, from_byte)))
 	/* we have encountered a comment end of the same style
 	   as the comment sequence which began this comment
 	   section */
@@ -3641,6 +3645,12 @@
 In both cases, LIMIT bounds the search. */);
   Vfind_word_boundary_function_table = Fmake_char_table (Qnil, Qnil);
 
+  DEFVAR_BOOL ("comment-end-can-be-escaped", Vcomment_end_can_be_escaped,
+               doc: /* Non-nil means an escaped ender inside a comment doesn't end the comment.  */);
+  Vcomment_end_can_be_escaped = 0;
+  DEFSYM (Qcomment_end_can_be_escaped, "comment-end-can-be-escaped");
+  Fmake_variable_buffer_local (Qcomment_end_can_be_escaped);
+
   defsubr (&Ssyntax_table_p);
   defsubr (&Ssyntax_table);
   defsubr (&Sstandard_syntax_table);
--- lisp/progmodes/cc-langs.el~	2014-06-14 23:51:42.000000000 +0000
+++ lisp/progmodes/cc-langs.el	2015-12-28 16:18:41.226762430 +0000
@@ -1380,6 +1380,14 @@
 	    "\\)\\s *"))
 (c-lang-setvar comment-start-skip (c-lang-const comment-start-skip))
 
+(c-lang-defconst comment-end-can-be-escaped
+  "When non-nil, escaped EOLs inside comments are valid.
+This works in Emacs >= 25.1."
+  t nil
+  (c c++ objc) t)
+(c-lang-setvar comment-end-can-be-escaped
+	       (c-lang-const comment-end-can-be-escaped))
+
 (c-lang-defconst c-syntactic-ws-start
   ;; Regexp matching any sequence that can start syntactic whitespace.
   ;; The only uncertain case is '#' when there are cpp directives.


-- 
Alan Mackenzie (Nuremberg, Germany).






^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#22246: 24.4; C-Mode: Syntax-Highlighting for „//“-Comment-Line continued with „\“
  2015-12-28 17:55   ` Alan Mackenzie
@ 2015-12-29 15:00     ` Alan Mackenzie
  0 siblings, 0 replies; 3+ messages in thread
From: Alan Mackenzie @ 2015-12-29 15:00 UTC (permalink / raw)
  To: 22246-done

Bug fixed in emacs-25 branch.

-- 
Alan Mackenzie (Nuremberg, Germany).





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-12-29 15:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-26 14:59 bug#22246: 24.4; C-Mode: Syntax-Highlighting for „//“-Comment-Line continued with „\“ Andreas Pickart
     [not found] ` <mailman.927.1451154668.843.bug-gnu-emacs@gnu.org>
2015-12-28 17:55   ` Alan Mackenzie
2015-12-29 15:00     ` Alan Mackenzie

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).