Emre Sevinc <[EMAIL PROTECTED]> writes: > Yapacagim sunumu Emacs acip s-exp olarak kodlamak? Sacma > gibi göründü baslangicta ama sonra...
Can ile son iki projemizde, lisp ile programlama yapmamamiza ragmen
SEXPler ile veriyi modelleyip, ardindan elisp ya da common lisp ile
kod urettik.
Az once de API tanimlamak ve kod/dokumantasyonu cikartmak icin soyle
bir SEXP tanimlamaktan soz ediyorduk:
'((:PROCEDURE ((:NAME "random")
(:RETURN-TYPE "int")
(:ARGS ((:ARG :TYPE "int"
:NAME "minimum"
:COMMENT "set the
lower limit of the return value")
(:ARG :TYPE "int"
:NAME "maximum"
:COMMENT "set the
upper limit of the return value")))
(:FULL-NAME "Generate a pseudo random number
between `minimum' and `maximum'")
(:DESCRIPTION "`random' generates a pseudo
random number between `minimum' and `maximum' "))))
Sanirim SEXP'in hem ifade gucu hem de islenebilme kolayligi acisindan
ne kadar kullanilabilir oldugunu kesfettik.
Bir ornek daha, cirkin/hizli kodlandi. Ama PHP siniflari yaratmak icin
Emacs icerisinden rahatlikla kullanilabilir. En azindan biz
kullaniyoruz.
Calistirmak icin:
M-: (gen-bean "Student" "name number virt zirt")
BEGIN CODE ===============================================================
(defun mark-whole-buffer ()
"Put point at beginning and mark at end of buffer."
; (interactive)
(push-mark (point))
(push-mark (point-max))
(goto-char (point-min)))
(defun gen-bean-setter-getter (prop-list)
(cond
((null prop-list) (insert "// end setters-getters\n"))
(t (progn
(insert (format "function get%s(){\nreturn $this->%s;\n}\n\n"
(upcase-initials (car prop-list))(car prop-list)(car prop-list)))
(insert (format "function set%s($%s){\n$this->%s = $%s;\n}\n\n"
(upcase-initials (car prop-list))(car prop-list)(car prop-list)(car prop-list)))
(gen-bean-setter-getter (cdr prop-list))))))
(defun gen-bean-props (prop-list)
(cond
((null prop-list) (insert "// end props\n"))
(t (progn
(insert (format "var $%s;\n" (car prop-list)))
(gen-bean-props (cdr prop-list))))))
(defun gen-bean-convenience-functions (bean-name prop-list)
(insert (format "\nfunction persist(){
// TODO: FILL IN HERE
}\n\n" (downcase bean-name) bean-name))
(insert (format "\nfunction %sFromAssocArr($arr){
$p = new %s();
// TODO: FILL IN HERE
return $p;
}\n\n" (downcase bean-name) bean-name))
(insert (format "function getAll%ss(){
global $_DB_;
$sth = $_DB_->query(\"SELECT * FROM _%s\");
$retval = array();
$all = $sth->fetchAll(MDB2_FETCHMODE_ASSOC);
foreach($all as $one){
array_push($retval, %s::%sFromAssocArr($one));
}
return $retval;
}\n\n" bean-name (upcase bean-name) bean-name (downcase bean-name)))
(insert (format "function get%sById($id){
global $_DB_;
$sth = $_DB_->prepare(\"SELECT * FROM _%s WHERE id = ?\",
array(\"integer\"));
$result = $sth->execute($id);
if($one = $result->fetchRow(MDB2_FETCHMODE_ASSOC))
return %s::%sFromAssocArr($one);
else{
return false;
}
}\n\n" bean-name (upcase bean-name) bean-name (downcase bean-name))))
(defun gen-bean (bean-name prop-list)
(progn
(switch-to-buffer (format "class.%s.php" bean-name))
(php-mode)
(insert (format "<?php // $Id: $\n\n"))
(insert (format "class %s{\n\n" bean-name))
(gen-bean-props prop-list)
(insert (format "\nfunction %s(){\n\n}\n\n" bean-name))
(gen-bean-setter-getter prop-list)
(gen-bean-convenience-functions bean-name prop-list)
(insert (format "}\n?>"))
(indent-region (point-min) (point-max) nil)
))
END CODE ===============================================================
Iyi calismalar,
Sinan
,---------------------------------.
| Istanbul Bilgi University |
| Department of Computer Science |
| http://cs.bilgi.edu.tr/~vst |
| Tel: +90 212 311 54 27 |
`---------------------------------'
pgpi0bHUoIHc6.pgp
Description: PGP signature
_______________________________________________ cs-lisp mailing list [email protected] http://church.cs.bilgi.edu.tr/lcg http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp

