unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [Fwd: [Patch] etags support for php5]
@ 2008-05-30 16:51 Lennart Borgman (gmail)
  2009-10-12 16:40 ` Jordi Gutiérrez Hermoso
  0 siblings, 1 reply; 3+ messages in thread
From: Lennart Borgman (gmail) @ 2008-05-30 16:51 UTC (permalink / raw)
  To: Emacs Devel, Bas Kok

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

Was this ever added to etags?


-------- Original Message --------
Subject: [Patch] etags support for php5
Date: Sat, 22 Sep 2007 18:28:43 +0300
From: Bas Kok <bakotaco@gmail.com>
To: bug-gnu-emacs@gnu.org

Hi all,

PHP5 introduced public, private and protected access modifiers for
methods and properties, class constants and the static keyword.
However etags currently does not recognize methods and properties
qualified with these keywords, therefore I added these.

I am not sure what the process is for having this added to cvs emacs,
therefore I added the patch for this to this email.

Regards,
-- 
Bas


[-- Attachment #2: etags.patch --]
[-- Type: application/octet-stream, Size: 1570 bytes --]

*** etags.c	13 Aug 2007 15:41:27 +0200	3.77
--- etags.c	22 Sep 2007 16:11:55 +0200	
***************
*** 4669,4674 ****
--- 4669,4707 ----
  		    lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
  	  search_identifier = FALSE;
  	}
+       else if (LOOKING_AT (cp, "public") ||
+ 	       LOOKING_AT (cp, "private") ||
+ 	       LOOKING_AT (cp, "protected") ||
+ 	       LOOKING_AT (cp, "static"))
+ 	{
+ 	  cp = skip_spaces (cp);
+ 	  if (LOOKING_AT (cp, "function"))
+ 	    {
+ 	      if(*cp == '&')
+ 		cp = skip_spaces (cp+1);
+ 	      if(*cp != '\0')
+ 		{
+ 		  name = cp;
+ 		  while (!notinname (*cp))
+ 		    cp++;
+ 		  make_tag (name, cp - name, TRUE,
+ 			    lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
+ 		}
+ 	      else
+ 		search_identifier = TRUE;
+ 	    }
+ 	  else if (members
+ 		   && *cp == '$')
+ 	    {
+ 	      name = cp;
+ 	      while (!notinname(*cp))
+ 		cp++;
+ 	      make_tag (name, cp - name, FALSE,
+ 			lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
+ 	    }
+ 	  else
+ 	    search_identifier = TRUE;	    
+ 	}
        else if (LOOKING_AT (cp, "function"))
  	{
  	  if(*cp == '&')
***************
*** 4710,4716 ****
  		    lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
  	}
        else if (members
! 	       && LOOKING_AT (cp, "var")
  	       && *cp == '$')
  	{
  	  name = cp;
--- 4743,4750 ----
  		    lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
  	}
        else if (members
! 	       && (LOOKING_AT (cp, "var") 
! 		   || LOOKING_AT (cp, "const"))
  	       && *cp == '$')
  	{
  	  name = cp;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Fwd: [Patch] etags support for php5]
@ 2009-10-12 16:40 ` Jordi Gutiérrez Hermoso
  2009-10-12 19:47   ` Francesco Potortì
  0 siblings, 1 reply; 3+ messages in thread
From: Jordi Gutiérrez Hermoso @ 2009-10-12 16:40 UTC (permalink / raw)
  To: Emacs-devel



Lennart Borgman (gmail) wrote:
> 
> Was this ever added to etags?
> 

Indeed, I'd like to know too. Was this ever added to etags? It doesn't look
like it was, two years later.

- Jordi G. H.

-------- Original Message --------
Subject: [Patch] etags support for php5
Date: Sat, 22 Sep 2007 18:28:43 +0300
From: Bas Kok <bakotaco@gmail.com>
To: bug-gnu-emacs@gnu.org

Hi all,

PHP5 introduced public, private and protected access modifiers for
methods and properties, class constants and the static keyword.
However etags currently does not recognize methods and properties
qualified with these keywords, therefore I added these.

I am not sure what the process is for having this added to cvs emacs,
therefore I added the patch for this to this email.

Regards,
-- 
Bas


 

-- 
View this message in context: http://www.nabble.com/-Fwd%3A--Patch--etags-support-for-php5--tp17563626p25857155.html
Sent from the Emacs - Dev mailing list archive at Nabble.com.





^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Fwd: [Patch] etags support for php5]
  2009-10-12 16:40 ` Jordi Gutiérrez Hermoso
@ 2009-10-12 19:47   ` Francesco Potortì
  0 siblings, 0 replies; 3+ messages in thread
From: Francesco Potortì @ 2009-10-12 19:47 UTC (permalink / raw)
  To: Jordi Gutiérrez Hermoso, Lennart Borgman; +Cc: Emacs-devel

>Lennart Borgman (gmail) wrote:
>> Was this ever added to etags?
>
>Indeed, I'd like to know too. Was this ever added to etags? It doesn't look
>like it was, two years later.
>- Jordi G. H.

No, it wasn't.  I am guilty of not having solicited a response.  This is
a mail I sent long ago to which I did not receive any answer.  Again, my
fault to have forgotten this.  Would someone please reply?

________________________________________________________________
Date: 17 Aug 2008 19:47:47 +0200
From: Francesco Potorti` <Potorti@isti.cnr.it>
To: Lennart Borgman <lennart.borgman@gmail.com>,
    Bas Kok <bakotaco@gmail.com>
Cc: Stefan Monnier <monnier@iro.umontreal.ca>
In-reply-to: <jwv3anz3x0s.fsf-monnier+emacs@gnu.org>
Subject: Re: [Lennart Borgman (gmail)] [Fwd: [Patch] etags support for php5]
Organization: ISTI-CNR, via Moruzzi 1, I-56124 Pisa, +39-0503153058

Dear Lennart and Bas,

thank you for your patch to etags to support php5 keywords, and sorry
for the delay in checking it.  I only managed to test it now, during my
vacations.

However, I obtain strange results from my tests, so I would ask you to
send me a php5 source file together with the expected results.

Just to let you know, I tried your patch on the appended file.  Again,
sorry for the delay, and hope you can follow up to this.


===File ~/gnu/etags/sendmail.php============================
<?php

/*
  Classe creata da Santoro Diego.
  Per aiuti nella programmazione in PHP, PERL, C e ECMAScript contattatemi
  e-Mail vincenza.tralice@tiscali.it oppure santoro.diego@3000.it
  La classe ? ancora in fase beta.
*/

final class sendMail {

  const eMailAddressErrorMessage="L' e-Mail indicata non rispetta un formato valido.";
  const defaultSubject="this is the subject.";
  const defaultTextMessage="this is text message.";
  const defaultHtmlMessage="this is html message.";
  const defaultHeaderMessage="this is a multi-part message in MIME format.";

  private static $messageProperties=array(
    "charset" => array(
        "modifiable" => true,
        "values" => array(
            "iso-8859-1",
            "iso-8859-15",
            "utf-8",
            "utf-16"
        )
    ),
    "content-transfer-encoding" => array(
        "modifiable" => true,
        "values" => array(
            "7bit",
            "8bit",
            "quoted-printable"
        )
    )
  );

  private $attachmentProperties=array(
    "content-type" => array(
        "modifiable" => false,
         "values" => array(
            "application/octet-stream"
        )
    ),
    "content-transfer-encoding" => array(
        "modifiable" => false,
        "values" => array(
            "base64"
        )
    ),
    "content-disposition" => array(
        "modifiable" => true,
        "values" => array(
            "attachment",
            "inline"
        )
    )
  );

  private static $relatedProperties=array(
    "content-transfer-encoding" => array(
        "modifiable" => false,
        "values" => array(
            "base64"
        )
    )
  );

  private $html;
  private $text;

  private $related;
  private $attachments;

  public static function valid_eMailAddress($eMailAddress) {
   if(ereg("^[^@ ]+@[^@ ]+\.[^@ ]+$", $eMailAddress))
    return true;
   else
    return false;
  }

  public static function validContentId($contentId) {
   if(ereg("^[a-zA-Z0-9]+$", $contentId))
    return true;
   else
    return false;
  }

  public static function validContentKey($contentKey) {
   if(ereg("^[a-zA-Z0-9]+$", $contentKey))
    return true;
   else
    return false;
  }

  public static function mime_content_type($filename) {
   $mime=array(
    '.3dmf' => 'x-world/x-3dmf',
    '.a' => 'application/octet-stream',
    '.aab' => 'application/x-authorware-bin',
    '.xwd' => 'image/x-xwd',
    '.xyz' => 'chemical/x-pdb',
    '.z' => 'application/x-compressed',
    '.zip' => 'application/x-zip-compressed',
    '.zoo' => 'application/octet-stream',
    '.zsh' => 'text/x-script.zsh',
    '.css' => 'text/css'
   );
   return $mime[strrchr($filename, '.')];
  }

  private $from;
  private $to;
  private $subject;

  private $finalized;

  private $headerMessage;
  private $bodyMessage;

  private $boundaries;

  public function __construct($from, $to, $subject=self::defaultSubject) {

   // set from
   if(!self::valid_eMailAddress($from))
    die(self::eMailAddressErrorMessage);
   else
    $this->from=$from;

   // set to
   if(!self::valid_eMailAddress($to))
    die(self::eMailAddressErrorMessage);
   else
    $this->to=$to;

   // set subject
   $this->subject=$subject;

   // set text
   $this->text=array(
    "message" => self::defaultTextMessage,
    "properties" => array(
        "charset" => self::$messageProperties["charset"]["values"][0],
        "content-transfer-encoding" => self::$messageProperties["content-transfer-encoding"]["values"][0]
    )
   );

   // set html
   $this->html=array(
    "message" => self::defaultHtmlMessage,
    "properties" => array(
        "charset" => self::$messageProperties["charset"]["values"][0],
        "content-transfer-encoding" => self::$messageProperties["content-transfer-encoding"]["values"][1]
    )
   );

   // set related and attachments
   $this->related=array();
   $this->attachments=array();

   // set finalizater counter
   $this->finalized=false;

   $this->headerMessage="";
   $this->bodyMessage="";

   $this->boundaries=array(
    "multipart/alternative" => md5(uniqid(microtime())),
    "multipart/related" => md5(uniqid(microtime())),
    "multipart/mixed" => md5(uniqid(microtime()))
   );

  }

  public function setTo($to, &$errorString) {
   if(self::valid_eMailAddress($to)) {
    $this->to=$to;
    return true;
   } else {
    $errorString=eMailAddressErrorMessage;
    return false;
   }
  }

  public function setFrom($from, &$errorString) {
   if(self::valid_eMailAddress($from)) {
    $this->from=$from;
    return true;
   } else {
    $errorString=eMailAddressErrorMessage;
    return false;
   }
  }

  public function setSubject($subject=self::defaultSubject) {
   $this->subject=$subject;
  }

  public function setTextMessage($textMessage=self::defaultTextMessage) {
   $this->text["message"]=$textMessage;
  }

  public function setTextMessageProperty($key, $value, &$errorString) {

   $key=strtolower($key);
   $value=strtolower($value);

   if(isset(self::$messageProperties[$key])) {
    if(in_array($value, self::$messageProperties[$key]["values"])) {
     if(self::$messageProperties[$key]["modifiable"]) {
       $this->text["properties"][$key]=$value;
       return true;
     } else {
      $errorString="Il valore della propriet? indicata non ? modificabile.";
      return false;
     }
    } else {
     $errorString="Il valore indicato per questa propriet? non ? valido.";
     return false;
    }
   } else {
    $errorString="Non esiste questa propriet? per i messaggi html.";
    return false;
   }
  }

  public function setHtmlMessage($htmlMessage=self::defaultHtmlMessage) {
   $this->html["message"]=$htmlMessage;
  }

  public function setHtmlMessageProperty($key, $value, &$errorString) {

   $key=strtolower($key);
   $value=strtolower($value);

   if(isset(self::$messageProperties[$key])) {
    if(in_array($value, self::$messageProperties[$key]["values"])) {
     if(self::$messageProperties[$key]["modifiable"]) {
      $this->html["properties"][$key]=$value;
      return true;
     } else {
      $errorString="Il valore della propriet? indicata non ? modificabile.";
      return false;
     }
    } else {
     $errorString="Il valore indicato per questa propriet? non ? valido.";
     return false;
    }
   } else {
    $errorString="Non esiste questa propriet? per i messaggi html.";
    return false;
   }
  }

  public function addRelated($fileName, $relatedKey, $contentId, &$errorString) {
   if(is_file($fileName)) {
    if($fileHandle=fopen($fileName, "r")) {
     if(self::validContentId($contentId)) {
      if(!isset($this->related[$relatedKey])) {
       if(self::validContentKey($relatedKey)) {
        $this->related[$relatedKey]=array(
    "fileName" => basename($fileName),
    "properties" => array(
        "content-type" => self::mime_content_type($fileName),
        "content-transfer-encoding" => self::$relatedProperties["content-transfer-encoding"]["values"][0],
        "content-id" => $contentId
    ),
    "source" => base64_encode(
        fread($fileHandle, filesize($fileName))
    )
        );
        return true;
       } else {
        $errorString="L' id specificato non ? valido.";
        return false;
       }
      } else {
       $errorString="La chiave specificata ? gi? associata ad un altro related.";
       return false;
      }
     } else {
      $errorString="La chiave specificata per il related non ? valida.";
      return false;
     }
    } else {
     $errorString="Non ? possibile aprire il file indicato.";
     return false;
    }
   } else {
    $errorString="Il nome del file indicato non ? valido.";
    return false;
   }
  }

  public function setRelatedProperty($relatedKey, $key, $value, &$errorString) {

   $key=strtolower($key);
   $value=strtolower($value);
  
   if(isset(self::$relatedProperties[$key])) {
    if(in_array($value, self::$relatedProperties[$key]["values"])) {
     if(self::$relatedProperties[$key]["modifiable"]) {
      if(isset($this->related[$relatedKey])) {
       $this->related[$relatedKey]["properties"][$key]=$value;
       return true;
      } else {
       $errorString="Il related indicato non esiste.";
       return false;
      }
     } else {
      $errorString="Il valore della propriet? indicata non ? modificabile.";
      return false;
     }
    } else {
     $errorString="Il valore indicato per questa propriet? non ? valido.";
     return false;
    }
   } else {
    $errorString="Non esiste questa propriet? per i related.";
    return false;
   }
  }

  public function addAttachment($fileName, $attachmentKey, &$errorString) {
   if(is_file($fileName)) {
    if($fileHandle=fopen($fileName, "r")) {
     if(self::validContentKey($attachmentKey)) {
      if(!isset($this->attachments[$attachmentKey])) {
       $this->attachments[$attachmentKey]=array(
    "fileName" => basename($fileName),
    "properties" => array(
        "content-type" => self::$attachmentProperties["content-type"]["values"][0],
        "content-disposition" => self::$attachmentProperties["content-disposition"]["values"][0],
        "content-transfer-encoding" => self::$attachmentProperties["content-transfer-encoding"]["values"][0]
    ),
    "source" => base64_encode(
        fread($fileHandle, filesize($fileName))
    )
       );
       return true;
      } else {
       $errorString="La chiave specificata ? gi? associata ad un altro allegato.";
       return false;
      }
     } else {
      $errorString="La chiave specificata per l'allegato non ? valida.";
      return false;
     }
    } else {
     $errorString="Non ? possibile aprire il file indicato.";
     return false;
    }
   } else {
    $errorString="Il nome del file indicato non ? valido.";
    return false;
   }
  }

  public function setAttachmentProperty($attachmentKey, $key, $value, &$errorString) {

   $key=strtolower($key);
   $value=strtolower($value);

   if(isset(self::$attachmentProperties[$key])) {
    if(in_array($value, self::$attachmentProperties[$key]["values"])) {
     if(self::$attachmentProperties[$key]["modifiable"]) {
      if(isset($this->attachments[$attachmentKey])) {
       $this->attachments[$attachmentKey]["properties"][$key]=$value;
       return true;
      } else {
       $errorString="L'allegato indicato non esiste.";
       return false;
      }
     } else {
      $errorString="Il valore della propriet? indicata non ? modificabile.";
      return false;
     }
    } else {
     $errorString="Il valore indicato per questa propriet? non ? valido.";
     return false;
    }
   } else {
    $errorString="Non esiste questa propriet? per gli allegati.";
    return false;
   }
  }

  public function finalize(&$errorString) {
   if(!$this->finalized) {
    $this->headerMessage="from: ".($this->from)."\n";
    $this->headerMessage.="to: ".($this->to)."\n";
    $this->headerMessage.="subject: ".($this->subject)."\n";
    $this->headerMessage.="mime-version: 1.0\n";

    if(($countAttachments=count($this->attachments))>0) {
     $this->headerMessage.="content-type: multipart/mixed; boundary=\"".($this->boundaries["multipart/mixed"])."\"\n\n";
     $this->headerMessage.=self::defaultHeaderMessage;
     $this->headerMessage.="\n\n";

     $this->bodyMessage="--".($this->boundaries["multipart/mixed"])."\n";

     if(($countRelated=count($this->related))>0) {
      $this->bodyMessage.="content-type: multipart/related; type=\"multipart/alternative\"; boundary=\"".($this->boundaries["multipart/related"])."\"\n\n";

      $this->bodyMessage.="--".($this->boundaries["multipart/related"])."\n";

      $this->bodyMessage.="content-type: multipart/alternative; boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
      $this->createMultipartAlternativeMessage($this->boundaries["multipart/alternative"]);
      $this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--\n\n";

      // aggiungere i related e chiudere

      $relatedCounter=0;
      while(list($key,)=each($this->related)) {
       $relatedCounter++;
      
       $this->bodyMessage.="--".$this->boundaries["multipart/related"]."\n";
       $this->createMultipartRelatedMessage($key);
       if($relatedCounter!=$countRelated) $this->bodyMessage.="--".($this->boundaries["multipart/related"])."\n";
       else $this->bodyMessage.="--".($this->boundaries["multipart/related"])."--\n\n";
      }
     } else {
      $this->bodyMessage.="content-type: multipart/alternative; boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
      $this->createMultipartAlternativeMessage();
      $this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--\n\n";
     }

     $attachmentsCounter=0;
     while(list($key,)=each($this->attachments)) {
      $attachmentsCounter++;
      $this->bodyMessage.="--".($this->boundaries["multipart/mixed"])."\n";
      $this->createMultipartMixedMessage($key);
      if($attachmentsCounter!=$countAttachments) $this->bodyMessage.="--".($this->boundaries["multipart/mixed"])."\n";
      else $this->bodyMessage.="--".($this->boundaries["multipart/mixed"])."--\n\n";
     }
    } else {
     if(($countRelated=count($this->related))>0) {
      $this->headerMessage.="content-type: multipart/related; type=\"multipart/alternative\"; boundary=\"".($this->boundaries["multipart/related"])."\"\n\n";
      $this->headerMessage.=self::defaultHeaderMessage;
      $this->headerMessage.="\n\n";

      $this->bodyMessage="--".($this->boundaries["multipart/related"])."\n";
      $this->bodyMessage.="content-type: multipart/alternative; boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
      $this->createMultipartAlternativeMessage();
      $this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--\n\n";

      $relatedCounter=0;
      while(list($key,)=each($this->related)) {
       $relatedCounter++;
       $this->bodyMessage.="--".$this->boundaries["multipart/related"]."\n";
       $this->createMultipartRelatedMessage($key);
       if($relatedCounter!=$countRelated) $this->bodyMessage.="--".($this->boundaries["multipart/related"])."\n";
       else $this->bodyMessage.="--".($this->boundaries["multipart/related"])."--\n\n";
      }
     } else {
      $this->headerMessage.="content-type: multipart/alternative; boundary=\"".($this->boundaries["multipart/alternative"])."\"\n\n";
      $this->headerMessage.=self::defaultHeaderMessage;
      $this->headerMessage.="\n\n";

      $this->createMultipartAlternativeMessage();
      $this->bodyMessage.="--".($this->boundaries["multipart/alternative"])."--";

     }
    }
    $this->finalized=true;
    return true;
   } else {
    $errorString="Al momento non ? possibile finalizzare.";
    return false;
   }
  }

  private function createMultipartAlternativeMessage() {
   $multipartAlternativeBoundary=$this->boundaries["multipart/alternative"];
   $this->bodyMessage.="--$multipartAlternativeBoundary\n";
   $this->bodyMessage.="content-type: text/plain; charset=\"".($this->text["properties"]["charset"])."\"\n";
   $this->bodyMessage.="content-transfer-encoding: ".($this->text["properties"]["content-transfer-encoding"])."\n\n";
   $this->bodyMessage.=$this->text["message"];
   $this->bodyMessage.="\n\n";
   $this->bodyMessage.="--$multipartAlternativeBoundary\n";
   $this->bodyMessage.="content-type: text/html; charset=\"".($this->html["properties"]["charset"])."\"\n";
   $this->bodyMessage.="content-transfer-encoding: ".($this->html["properties"]["content-transfer-encoding"])."\n\n";
   $this->bodyMessage.=$this->html["message"];
   $this->bodyMessage.="\n\n";
  }

  private function createMultipartRelatedMessage($key) {
   $obj=$this->related[$key];
   $this->bodyMessage.="content-type: ".($obj["properties"]["content-type"])."; name=\"".($obj["fileName"])."\"\n";
   $this->bodyMessage.="content-transfer-encoding: ".($obj["properties"]["content-transfer-encoding"])."\n";
   $this->bodyMessage.="content-id: <".($obj["properties"]["content-id"]).">\n\n";
   $this->bodyMessage.=$obj["source"];
   $this->bodyMessage.="\n\n";
  }

  private function createMultipartMixedMessage($key) {
   $obj=$this->attachments[$key];
   $this->bodyMessage.="content-type: ".($obj["properties"]["content-type"])."; name=\"".($obj["fileName"])."\"\n";
   $this->bodyMessage.="content-transfer-encoding: ".($obj["properties"]["content-transfer-encoding"])."\n";
   $this->bodyMessage.="content-disposition: ".($obj["properties"]["content-disposition"])."; filename=\"".($obj["fileName"])."\"\n\n";
   $this->bodyMessage.=$obj["source"];
   $this->bodyMessage.="\n\n";
  }

  public function getSource(&$errorString) {
   if($this->finalized) {
    return ($this->headerMessage).($this->bodyMessage);
   } else {
    $errorString="Ancora non ? avvenuta la finalizzazione.";
    return false;
   }
  }

  public function sendMail(&$errorString) {
   if($this->finalized) {
    mail($this->to, $this->subject, $this->bodyMessage, $this->headerMessage);
    $this->finalized=false;
    return true;
   } else {
    $errorString="Ancora non ? avvenuta la finalizzazione.";
    return false;
   }
  }
}

?>
============================================================






^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2009-10-12 19:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-30 16:51 [Fwd: [Patch] etags support for php5] Lennart Borgman (gmail)
2009-10-12 16:40 ` Jordi Gutiérrez Hermoso
2009-10-12 19:47   ` Francesco Potortì

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).