Re: [NTG-context] ctags and ConTeXt
Aditya Mahajan wrote: Hi Here is my first attempt (see attachment). It works correctly in the little testing that I have done (on Windows). Just add \usemodule[ctags] somewhere in your environment file, and run context. I file called context.tags will be generated which contains the labels, filename, and line-number where the label occurs (line number can sometimes be off). I modify a few core macros, so this can possibly break existing stuff (It should not, but then ...) i didn't look at the code yet, but maybe a hook is a safer way? I found no reliable way to know the current file name. So this works correctly only if registerfileinfo is called. So one will have the correct filename when using a project structure, but not when using \input. I do not want to redefine \input, since almost everything relies on \input working correctly. I will also post the module on the garden once I am more comfortable with it. This one is too dangerous to go to the core. Hans - Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl - ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Re: [NTG-context] ctags and ConTeXt
On Tue, 27 Feb 2007, Hans Hagen wrote: Aditya Mahajan wrote: Hi Here is my first attempt (see attachment). It works correctly in the little testing that I have done (on Windows). Just add \usemodule[ctags] somewhere in your environment file, and run context. I file called context.tags will be generated which contains the labels, filename, and line-number where the label occurs (line number can sometimes be off). I modify a few core macros, so this can possibly break existing stuff (It should not, but then ...) i didn't look at the code yet, but maybe a hook is a safer way? The redefinition is safe. I put the warning since the user must be aware that a module redefines a core macro. There are two redefinitions, one for knowing the name of the current file, and the other for writings the reference to the tags file. For knowing the name of the current file, I would say that the core should support it. From what I understand, \inputfilename (or \currentfile) should give the name of the current file, but they do not. So, I had to modify registerfileinfo so that it provides with the name of the current file. To write the reference into the tag file, I need to know the reference. That is why I had to modify writereference. One hook that I can think of is to provide an \everywritereference token. \def\writereference#1#2#3#4 {\def\currentreferece{#1} \the\everywritereference % Rest of the writereference code} Then, modules like ctags will be able to hook into everywritereference. Aditya ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Re: [NTG-context] ctags and ConTeXt
Aditya Mahajan wrote: but this only writes a space. ctags expects \t to be present between tag and file name. try \rawcharacter{asciinumber} Secondly (this is not that important), can TeX write to a file without any extension? Traditionally the tags file is just named `tags' did you try it? Hans - Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl - ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Re: [NTG-context] ctags and ConTeXt
Aditya Mahajan wrote: Secondly (this is not that important), can TeX write to a file without any extension? Traditionally the tags file is just named `tags' No, it can't. Taco ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Re: [NTG-context] ctags and ConTeXt
Taco Hoekwater wrote: Aditya Mahajan wrote: Secondly (this is not that important), can TeX write to a file without any extension? Traditionally the tags file is just named `tags' No, it can't. yet, in luatex we can overload the openers Taco ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context -- - Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl - ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Re: [NTG-context] ctags and ConTeXt
Hi Here is my first attempt (see attachment). It works correctly in the little testing that I have done (on Windows). Just add \usemodule[ctags] somewhere in your environment file, and run context. I file called context.tags will be generated which contains the labels, filename, and line-number where the label occurs (line number can sometimes be off). I modify a few core macros, so this can possibly break existing stuff (It should not, but then ...) I found no reliable way to know the current file name. So this works correctly only if registerfileinfo is called. So one will have the correct filename when using a project structure, but not when using \input. I do not want to redefine \input, since almost everything relies on \input working correctly. I will also post the module on the garden once I am more comfortable with it. This one is too dangerous to go to the core. Aditya%M \logo [CTAGS] {CTAGS} %D \module %D [ file=t-ctags, %Dversion=2007-02-26, %D title=\CONTEXT\ tags(\CTAGS), %D subtitle=\CTAGS\ support in \CONTEXT, %D author={Aditya Mahajan}, %D date=\currentdate] %D %M \setuphead [section] [page=] %M \useURL[ctags][http://ctags.sourceforge.net/] %M \useURL[vim] [http://www.vim.org] %M \logo [VIM] {VIM} %M \logo [EMACS] {EMACS} %D \section Introduction %D %D \CTAGS\ is a program that generates an index of language objects %D found in a file that allows these objects to be easily located by a %D text editor. They are tightly integrated with \VIM\ and \EMACS. For %D large \TEX\ files, \CTAGS\ is very useful to find reference labels. %D Suppose you are writing a long book or paper, and you want to add %D reference to an equation. Also suppose all your equation labels start %D with \type{eq:}. Then in \VIM\ you can type \type{eq:} and press %D \type{^X^]} and \VIM\ will present you with a pop-up menu showing the %D different labels that start with \type{eq:}. For long files this can %D save you a lot of time. %D %D Traditionally tags are generated from an external program. However, %D \CONTEXT's syntax is almost impossible to parse from an external %D program. Consider the following two cases %D \starttyping %D \defineenumeration[problem] %D \startproblem[tag] %D blah blah %D \stopproblem %D \stoptyping %D and %D \starttyping %D \defineitemgroup[problem] %D \startproblem[intro] %D \item blah blah %D \stopproblem %D \stoptyping %D %D For an external program to correctly parse this, it must be able to %D understand \TEX. The only program that can understand \TEX\ is \TEX. %D So, I decided to write \CTAGS\ support for \CONTEXT\ in \CONTEXT. It %D turned out to be much simpler than expected. So now, one can read %D \CTAGS\ as \CONTEXT\ tags \mono{:-)}. %D %D \section User Guide %D %D To use the module simply add %D \starttyping %D \usemodule[ctags] %D \stoptyping %D on the top of the file\footnote{This must be done before %D \type{\everystarttext} is executed. That is either in the environment %D file or before \type{\starttext} in a file.}. Unfortunately, right %D now (that is with \PDFTEX), it is not possible to create a file %D without extension. So, the tags are written to a file %D \filename{context.tags}. To use this in \VIM, you have to add %D \starttyping %D set tags=./tags,tags,context.tags %D \stoptyping %D in your \filename{.vimrc} (\filename{_vimrc} on Windows). I do not %D know how to do something similar in \EMACS. If someone knows, please %D let me know. %D %D This file modifies a core \CONTEXT\ macro, so be careful while using %D it. It may (although it should not) break in some cases. You have %D been warned. %D %D The rest of the file is self explanatory. \writestatus {loading} {Context CTAGS support Module} \startmodule[vim] \unprotect \newwrite\ctagsfile \newtoks\everyopenctags \newtoks\everyclosectags %D TODO: Find out if we are running \LUATEX, and if we are write to %D \filename{tags}. \appendtoks \immediate\openout\ctagsfile context.tags \immediate\write\ctagsfile{!_TAG_FILE_FORMAT\rawcharacter{9}1} \immediate\write\ctagsfile{!_TAG_FILE_SORTED\rawcharacter{9}0} \immediate\write\ctagsfile{!_TAG_PROGRAM_AUTHOR\rawcharacter{9}Aditya Mahajan} \immediate\write\ctagsfile{!_TAG_PROGRAM_NAME\rawcharacter{9}ConTeXt t-ctags module} \to \everyopenctags \appendtoks \immediate\closeout\ctagsfile \to \everyclosectags \let\normalwriterefernce\writereference \def\writereference#1% #2#3#4 {\doifsomething{#1} {\immediate\write\ctagsfile{#1\rawcharacter{9}\currentctagsfile \rawcharacter{9}\the\inputlineno}} \normalwriterefernce{#1}}% #2#3#4 %D \type{\everystarttext} is executed at \type{\startcomponent}. If we %D have a typical structure %D \starttyping %D \startcomponent file %D \product file %D \enviromnent file %D \stoptyping %D then \type{\everystarttext} is executed before ctags module is %D loaded. So, we open the tags as soon as the module is loaded. This %D can cause a
Re: [NTG-context] ctags and ConTeXt
On Sun, 11 Feb 2007, Aditya Mahajan wrote: Hi, I am wondering how others manage a large list of reference labels in ConTeXt. I use Vim as an editor and it supports ctags. ctags is a utility that is basically for supporting tags in programs (initially only for C, and hence the name), but can be used relatively easily with LaTeX. Basically, ctags creates a tag file with the format tag-name tag-file tag-regex (for details see http://ctags.sourceforge.net/FORMAT) I have a rudimentary support that is running. I have modified the writereference command so that it also writes the correct information to the tags file. It is almost working. I just need to figure out how to write a literal tab to a file? I tried \immediate\write\file {tag^^I file^^I /:line_no/} but this only writes a space. ctags expects \t to be present between tag and file name. Secondly (this is not that important), can TeX write to a file without any extension? Traditionally the tags file is just named `tags' Aditya ___ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context