all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: dino chiesa <dpchiesa@hotmail.com>
Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: first-class support for csharp in cc-mode.el
Date: Wed, 30 Dec 2009 21:01:00 +0000	[thread overview]
Message-ID: <20091230210100.GB2247@muc.de> (raw)
In-Reply-To: <COL124-W302685C097D1C55BD1B015CE790@phx.gbl>

Hi, Dino,

On Wed, Dec 30, 2009 at 08:29:14AM -0800, dino chiesa wrote:

> Hi Alan, nice to meet you.
> Stefan, thanks for the input. 

> acm@muc.de wrote:
> > The current policy is not to add any more languages to the core of CC
> > Mode, since it's hassle enough supporting the seven that are already
> > there. There are certainly lots of users of C, C++, Java, several
> > users of Objective C and AWK, but I just don't know about Pike and
> > IDL. The problem is, when somebody implements support for a language
> > directly in CC Mode and they move on a few years later, support for
> > that langauge effectively vanishes. It was to fix this that Martin
> > Stjernholm (my predecessor) implemented the c-lang-const mechanism.

> Very clear. In that case I should be petitioning to get csharp-mode put
> into the emacs progmodes distrib separately, rather than petitioning to
> get csharp-mode folded into cc-mode.

I think so.  I doubt Stefan will take that much persuading.  ;-)

> > If the c-lang-const stuff is inadequate to support, say, C#, then I
> > would prefer to amend CC Mode so that C# can be supported. It looks
> > like the @"....." syntax will need such an amendment. This will
> > probably involve a large change, since the use of \ as an escape
> > character is firmly embedded in the very fabric of CC Mode. Is @ used
> > for anything else in C#? Is it forbidden to have whitespace between @
> > and "?

> Yes, according to the lang spec, the @ must immediately be followed by
> a double-quote. The symbol is not used for anything else in the
> language. I just looked and this is called a "verbatim string literal".
> http://www.go-mono.com/docs/index.aspx?link=ecmaspec%3a9.4.4.5

> > In fact, I've just thought of a way of fixing this: in an
> > after-change function, splat the syntax (using syntax-table
> > text-properties) of anything within @"....". I think there's already
> > a suitable hook in CC Mode for this.

I've had a look at this.  The two hooks you want are
c-get-state-before-change-function and c-before-font-lock-function, both
of which are c-lang-defconsts.  In the function you put in the first
hook, you should see whether or not you're about to disrupt the status of
one or more @"......\" constructs.  There'll be some cunning special
cases to check here.  The function on the second hook will actually add
the text-property to the pertinent \, or possibly remove it.

> Is this the approach used for handling of slashes within awk? (can be
> either a divide operator or a string delimiter). I tried wading through
> that code but didn't yet figure it out.

:-)  I wrote that code some while ago, and I'm not sure I could figure it
out any more.  It's a fairly involved finite state machine implemented by
regular expressions.

> In csharp, it is not only a trailing slash that is special - the
> verbatim string also allows verbatim newlines in the string. This is
> legal:

> var s = @"The quick brown fox
> jumps over the lazy dog";

> and results in a string with a \n between the 4th and 5th words.

> I don't know how that might affect the final design of a solution, or
> if it recommends or disrecommends Stefan's suggestion to worry only
> about the final slash. 

I couldn't say off-hand either.  I suspect it would just work.

> >> I have no idea if this is a friendly proposal or not, but it would
> >> make things nice for people who write C# and use emacs.

> > Thanks for the proposal! Constructive suggestions are always welcome at
> > CC Mode. By the way, CC Mode has its own mailing list at
> > bug-cc-mode@gnu.org and is hosted on sourceforge for historical reasons.


> Ah, very good. Is bug-cc-mode intended to serve discussion related only
> to bugs or potential bugs, or is it also good for random discussion or
> questions from cc-derived modes? I mean, if I were to ask specifically
> about the verbatim string literals, should I ask on emacs-devel or is
> it better on bug-cc-mode ?

Probably better on bug-cc-mode, but more people will see it on
emacs-devel.

> >> There are still a few issues with that C# mode - lambdas have no
> >> special support, and the new dynamic keyword in .NET 4.0 isn't there
> >> (simple to add), and there is the literal string thing I described
> >> in my other mail thread - but mostly it works well. Including this
> >> would provide a good baseline of support in emacs for C#.

> > Those are all issues for C# Mode's maintainer.


> Right, those are issues for me (and friends) to own. I wasn't really
> asking for *that*, although I may ask for specific advice on some of
> those in the future, after I take a run at them, I hope you don't mind.

> My real goal regarding "first class support" is to make csharp-mode
> official and standard, so that someone downloading emacs 24 or 23.x
> will just get it. I had originally thought that meant major surgery on
> cc-mode, but you're telling me it could be simpler than that.

It should be, and if it's not, I should be able to make it so.

-- 
Alan Mackenzie (Nuremberg, Germany).




  parent reply	other threads:[~2009-12-30 21:01 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-29  1:51 cc-mode help - how to support literal strings in C# syntax? dino chiesa
2009-12-29 10:43 ` Andreas Roehler
2009-12-30  4:40   ` dino chiesa
2010-01-01 11:43     ` Andreas Roehler
2010-01-01 16:04     ` Andreas Roehler
2009-12-30  5:01   ` first-class support for csharp in cc-mode.el dino chiesa
2009-12-30  6:17     ` Miles Bader
2009-12-30  7:18       ` dino chiesa
2009-12-30 11:09         ` Miles Bader
2009-12-30 15:00           ` dino chiesa
2009-12-30 15:19     ` Alan Mackenzie
2009-12-30 15:39       ` Stefan Monnier
2009-12-30 16:29         ` dino chiesa
2009-12-30 16:57           ` Stefan Monnier
2009-12-30 21:01           ` Alan Mackenzie [this message]
2009-12-30 21:03             ` dino chiesa
2009-12-31  2:44               ` Miles Bader
2009-12-31  2:58                 ` Jason Rumney
2009-12-31  3:08                 ` Deniz Dogan
2009-12-31  3:18                   ` dino chiesa
2009-12-31  3:13                 ` dino chiesa
2009-12-31 11:43           ` Vagn Johansen
2009-12-30 20:19         ` Alan Mackenzie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091230210100.GB2247@muc.de \
    --to=acm@muc.de \
    --cc=dpchiesa@hotmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.