unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: "Andreas Röhler" <andreas.roehler@easy-emacs.de>
To: help-gnu-emacs@gnu.org
Subject: Re: Low level trickery for changing character syntax?
Date: Wed, 09 Apr 2014 07:59:03 +0200	[thread overview]
Message-ID: <5344E1A7.50900@easy-emacs.de> (raw)
In-Reply-To: <87lhvfzrgt.fsf@gmail.com>

Am 08.04.2014 19:00, schrieb Thorsten Jolitz:
>
> Hi List,
>
> assume an imaginary elisp library gro.el I cannot (or don't want to)
> change that is used on files of type A, with functions matching these
> kinds of strings:
>
> #+begin_src emacs-lisp
>    (defconst rgxp-1 "^[*] [*]Fat[*]$")
>
>    (defun foo (strg)
>      (and (string-match "^\\*+[ \t]* \\*.+\\*" strg)
>           (string-match rgxp-1 strg)))
> #+end_src
>
> #+results:
> : foo
>
> #+begin_src emacs-lisp
> (foo "* *Fat*")
> #+end_src
>
> #+results:
> : 0
>
> #+begin_src emacs-lisp
> (foo "+ *Fat*")
> #+end_src
>
> #+results:
>
> Now assume I want to use gro.el functionality on files of type B
> such that it matches strings likes this:
>
> #+begin_src emacs-lisp
> (foo "// # *Fat*//" )
> #+end_src
>
> In short, when called from file.type-A, I want foo to match "// #
> *Fat*//", while it should only match "* *Fat*" when called from
> file.type-B (without changing foo or rgxp-1).
>
> Thus in rgxp-1 and in foo, "^" would need to be replaced with "^// ",
> the first "*" would need to be replaced with "#" (the other occurences
> not), and "$" would need to be replaced with "//$".
>
> Now I wonder what would be the best way (or at least a possible way) to
> achieve this with Emacs low-level trickery (almost) without touching
> gro.el. I don't enough know about syntax table low-level stuff besides
> reading the manual, so these are only vague speculations:
>
>   1. Change the syntax-table of gro.el whenever it is applied to files of
>   type B such that "^" is seen as "^// ", "*" as "#" etc.?
>
>   2. Define new categories and put "^" "*" and "$" in them, and somehow
>   load/activate these categories conditional on the type of file gro.el
>   functionality is called upon. These categories should then achieve that
>   "^" is seen as "^// " etc when the categories are loaded?
>
>   3. Define "^" and "$", when found at beg/end of a string, as 'generic
>   comment delimiter, and define "/" as generic comment delimiter too, such
>   that "^//" and "//$" are matched by "^" and "$"?
>
> I know that these ideas do not and cannot work as described, but I'm
> looking for a hint which idea could possibly work? What would be the way
> to go?
>
> Or is this completely unrealistic and the only way to achieve it is to
> change the hardcoded regexps in (imaginary) library gro.el?
>

You could define different syntax-tables and than call functions

if type-A
(with-syntax-table type-A ...






  parent reply	other threads:[~2014-04-09  5:59 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-08 17:00 Low level trickery for changing character syntax? Thorsten Jolitz
2014-04-08 17:06 ` Thorsten Jolitz
2014-04-08 17:49 ` Andreas Röhler
2014-04-09  0:26   ` Thorsten Jolitz
2014-04-09  5:59 ` Andreas Röhler [this message]
2014-04-09  7:44   ` Thorsten Jolitz
2014-04-09  9:56     ` Andreas Röhler
2014-04-09 12:49     ` Stefan Monnier
2014-04-09 13:12       ` Thorsten Jolitz
2014-04-09  7:09 ` Tassilo Horn
2014-04-09  8:52   ` Org Minor Mode (was Re: Low level trickery for changing character syntax?) Thorsten Jolitz
2014-04-09 12:50     ` Stefan Monnier
2014-04-09 13:01     ` Tassilo Horn
2014-04-09 13:43       ` Thorsten Jolitz

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=5344E1A7.50900@easy-emacs.de \
    --to=andreas.roehler@easy-emacs.de \
    --cc=help-gnu-emacs@gnu.org \
    /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.
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).