From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Andreas Politz Newsgroups: gmane.emacs.help Subject: Re: syntax parsing of non-contiguous regions Date: Sun, 20 Sep 2009 21:53:54 +0200 Message-ID: <87tyyxie99.fsf@fh-trier.de> References: <4AB53B94.2070307@googlemail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1253476491 16053 80.91.229.12 (20 Sep 2009 19:54:51 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 20 Sep 2009 19:54:51 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Sun Sep 20 21:54:44 2009 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1MpSUe-0001T3-IL for geh-help-gnu-emacs@m.gmane.org; Sun, 20 Sep 2009 21:54:44 +0200 Original-Received: from localhost ([127.0.0.1]:41390 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MpSUe-0002DR-40 for geh-help-gnu-emacs@m.gmane.org; Sun, 20 Sep 2009 15:54:44 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MpSUL-0002DM-6s for help-gnu-emacs@gnu.org; Sun, 20 Sep 2009 15:54:25 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MpSUG-0002D8-7z for help-gnu-emacs@gnu.org; Sun, 20 Sep 2009 15:54:24 -0400 Original-Received: from [199.232.76.173] (port=38074 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MpSUG-0002D5-3j for help-gnu-emacs@gnu.org; Sun, 20 Sep 2009 15:54:20 -0400 Original-Received: from lo.gmane.org ([80.91.229.12]:46482) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MpSUF-0002SE-Gu for help-gnu-emacs@gnu.org; Sun, 20 Sep 2009 15:54:19 -0400 Original-Received: from list by lo.gmane.org with local (Exim 4.50) id 1MpSUD-0001N3-TR for help-gnu-emacs@gnu.org; Sun, 20 Sep 2009 21:54:17 +0200 Original-Received: from dslb-084-059-097-122.pools.arcor-ip.net ([84.59.97.122]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 20 Sep 2009 21:54:17 +0200 Original-Received: from politza by dslb-084-059-097-122.pools.arcor-ip.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 20 Sep 2009 21:54:17 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 46 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: dslb-084-059-097-122.pools.arcor-ip.net User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) Cancel-Lock: sha1:9QHuupL/4BAtx9xlbIhq3ta74w8= X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:68331 Archived-At: Emacs offers the possibility of setting the character-syntax on the fly. (info "(elisp) Setting Syntax Properties") Out of boredom, I actually tried to implement something like this. (defun foo-mode () (interactive) (kill-all-local-variables) (set-syntax-table (let ((tb (make-syntax-table))) (modify-syntax-entry ?{ ". 1" tb) (modify-syntax-entry ?% ". 23" tb) (modify-syntax-entry ?} ". 4" tb) tb)) (setq font-lock-defaults '(nil nil nil nil nil (font-lock-syntactic-keywords . ((foo-find-other-comment ; generic comment syntax prohibits regular comments ; inside it (1 "!") (2 "!"))))))) (defun foo-find-other-comment (limit) "Starting at point, find the next occurence of '!' not inside a string or comment." (let (success) (while (and (not success) (re-search-forward "\\(!\\).*\\(\n?\\)" limit t)) (setq success (let ((st (syntax-ppss (match-beginning 0)))) (not (or (nth 4 st) ;comment (nth 5 st))))) ;string (unless (eobp) (forward-char)) (when success (goto-char (match-end 0)))) success)) -ap