emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

HELP, PLEASE! Syntax problem!


From: Alan Mackenzie
Subject: HELP, PLEASE! Syntax problem!
Date: Wed, 25 Nov 2009 12:58:10 +0000
User-agent: Mutt/1.5.9i

Hello Stefan, Hello Emacs,

In the following fragment of code:

1   int a = foo (
2       1);
3   #define X(A, B)                                 \
4       do {                                        \
5           printf (A, B);                          \
6       } while (0)

7   int a = foo (
8       1);

, there is a C macro between lines 3 and 6.  The syntax-table properties
here have been manipulated (see below).  Putting point at the "(" in L5
and doing C-M-n takes point to after ")" ON LINE 8.  Similar things
happen with C-M-p, C-M-u from various places inside the macro

Evidently, all syntactic properties inside the macro have been
suppressed.  This is not wanted.

The manipulation is as follows:
(i) Every paren/brace/bracket inside the macro has a category text
  property 'c-{}-syntax-in-cpp.  This symbol has a syntax table
  property, value '(1), i.e. "punctuation syntax".  This is intended to
  make the paren invisible to scan-lists, etc.  It does this.  But...

(ii) Over the entire macro is an overlay with a 'syntax-table property.
  This overlay should prevail over the text property, since overlays
  always do.  The value of this 'syntax-table property is the actual
  syntax table currently in use.  The effect of this should be that all
  characters in the macro should appear to have their normal syntax.

[The purpose of this is to assist a low level parsing routine in CC Mode
which needs to ignore parens inside macros, except for the macro
currently containing point.]

So, what am I doing wrong, that the syntax of the parens is invisible?
The parens are equally invisible to parse-partial-sexp.  Alternatively,
could it be that scan-lists is neglecting to take account of the overlay?

Thanks in advance for the help!

-- 
Alan Mackenzie (Nuremberg, Germany).




reply via email to

[Prev in Thread] Current Thread [Next in Thread]