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: Tue, 08 Apr 2014 19:49:16 +0200 [thread overview]
Message-ID: <5344369C.5060201@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?
>
Possible is a lot, the easiest IMO would be switching the regexp
if A-type:
...
if B-type:
next prev parent reply other threads:[~2014-04-08 17:49 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 [this message]
2014-04-09 0:26 ` Thorsten Jolitz
2014-04-09 5:59 ` Andreas Röhler
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=5344369C.5060201@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).