Thank you very much, that does almost what I wanted. I made a few changes to make the script work and then I changed it to check if the string was already in the .php files and if it is, it uses it. Since I don't know regular expressions and it's the first time I'm using lisp, I guess this is a terrible code, but it works Once again, thank you for your help. I left here the final code I'll be using: (defvar *ds-languages-dir* "languages") (defvar *ds-php-file* (format "%s/pt.php" *ds-languages-dir*)) (defvar *ds-php-buffer* ()) (defun ds-create-lang-entries () "Change the selection in the current buffer and create a PHP definition in the PHP file. The change to make is \'\' --> \'\'. The addition to the PHP file is made at the end of the file; it is \'DEFINE(\"_LANG_MATCHED_STRING\", \"%s\");\'." (interactive) (ensure-php-buffer) (let ((xsl-format "") (php-format "DEFINE(\"_LANG_%s\", \"%s\");\n") (oldbuf (current-buffer)) (the-string (buffer-substring-no-properties (point) (mark)))) (save-current-buffer (set-buffer *ds-php-buffer*) (if (search-backward the-string nil t) (progn (let ((endpoint (- (point) 4))) (search-backward "DEFINE" nil t) (let ((the-constant (buffer-substring-no-properties (search-forward "_LANG_") endpoint))) ;; Change the selected text to the appropriate XSL (set-buffer oldbuf) (delete-region (point) (mark)) (goto-char (mark)) (insert (format xsl-format the-constant))))) (progn (set-buffer oldbuf) (let* ((the-constant (replace-regexp-in-string " " "_" (upcase (read-from-minibuffer "constant: "))))) ;; Change the selected text to the appropriate XSL (delete-region (point) (mark)) (goto-char (mark)) (insert (format xsl-format the-constant)) ;; (save-excursion (set-buffer *ds-php-buffer*) (goto-char (point-max)) (insert (format php-format the-constant the-string))))))))) (defun ensure-php-buffer () "Make sure that everything about the PHP buffer is good." (unless (file-directory-p *ds-languages-dir*) (make-directory *ds-languages-dir* t)) (unless *ds-php-buffer* (setq *ds-php-buffer* (find-file-noselect *ds-php-file*)))) (local-set-key "\C-c\C-c" 'ds-create-lang-entries) On Fri, Apr 13, 2012 at 2:56 PM, Doug Lewan wrote: > A concrete example always makes vague requirements clearer. > Thank you. > > I think the following will do what you want. > The process is this: > 1. Go through the XSL buffer(s), > 2. sweeping the strings of interest and > 3. type C-cC-c to process. > 4. Move on to the next string and repeat. > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > (defvar *ds-languages-dir* "languages") > (defvar *ds-php-file* (format "%s/pt.php" *ds-languages-dir*)) > (defvar *ds-php-buffer* ()) > > (defun ds-create-lang-entries () > "Change the selection in the current buffer and create a PHP definition > in the PHP file. > The change to make is > \'MATCHED_STRING\' > --> \'\'. > The addition to the PHP file is made at the end of the file; > it is \'DEFINE(\"_LANG_MATCHED_STRING\", \"bar\");\'." > (interactive) > (ensure-php-buffer) > (let* ((xsl-format "") > (php-format "DEFINE(\"_LANG_%s\", \"bar\");\n") > (the-string (buffer-substring-no-properties (point) (mark))) > (the-STRING (upcase the-string))) > ;; Change the selected text to the appropriate XSL > (delete-region (point) (mark)) > (goto-char (mark)) > (insert (format xsl-format the-string)) > ;; Now add a PHP definition at the end of the PHP file. > (save-excursion > (set-buffer *ds-php-buffer*) > (goto-char (point-max)) > (insert (format php-format the-STRING))))) > > (defun ensure-php-buffer () > "Make sure that everything about the PHP buffer is good." > (unless (file-directory-p *ds-languages-dir*) (make-directory > *ds-languages-dir* t)) > (unless *ds-php-buffer* (setq *ds-php-buffer* (find-file-noselect > *ds-php-file*)))) > > (local-set-key "\C-c\C-c" 'ds-create-lang-entries) > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > I hope this helps. > > ,Doug > > > > From: help-gnu-emacs-bounces+dougl=shubertticketing.com@gnu.org [mailto: > help-gnu-emacs-bounces+dougl=shubertticketing.com@gnu.org] On Behalf Of > Daniel Sousa > Sent: Thursday, 2012 April 12 12:10 > To: help-gnu-emacs@gnu.org > Subject: Re: Help with emacs scripting > > I'm majoring in applied math and computation, I know pretty well that > computers are dumb xD > > I think neither of you have understood what I wanted, so I'll give you an > example. > I have a lot of .xsl that generate pages and I want to make those pages > translatable. I migth have the file, for exemple, welcome.xsl: > > > > > >

Bem-vindo

>
>
    > >
  • Coisa
  • >
    >
>
>
> And I wanted to make this translatable, so I change this to > > > > > >

>
>
    > >
  • select="name" />
  • >
    >
>
>
> And I create a languages/pt.php with: > define('_LANG_WELCOME','Bem-vindo'); > define('_LANG_STUFF','Coisa'); > > I have a piece of php code that puts in the xml all the constants that > begin with "_LANG". > > I have a lot of these .xsl and I need to go manually through them all to > find the strings that I want to make translatable. What I want this script > to do is, on my input put that /> thing on the place I select and append to the language file the > repective define();. >