ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* pretty typesetting for matlab files
@ 2006-03-15  6:50 Aditya Mahajan
  2006-03-15  9:20 ` Taco Hoekwater
  0 siblings, 1 reply; 6+ messages in thread
From: Aditya Mahajan @ 2006-03-15  6:50 UTC (permalink / raw)


[-- Attachment #1: Type: TEXT/PLAIN, Size: 1645 bytes --]

Hi,

  I was trying to define a pretty printing environment for matlab 
files. The basic requirements that I have are

% Numbers should be highlighted in a different color
% Identify floating point numbers 1.1 and 1e-3.

% Identify brackets
% ()[]{}

% Identify Punctuation
% ,;<=> ...

% Identify Operators
% ^ + - / * .^  .*

% Idenfity strings (enclosed in ' ' and " ")

% Identify lines starting with % as comments. Show them
% a different color. Identify %{ ... %} blocks as comments

% identifiers
function return case if else elseif do for while end

% variables
gt,lt,gt,lt,amp,abs,acos,acosh,acot,acoth,acsc,acsch,
[snip].... a huge list

The syntax is similar to both perl and MP. I had a look at the 
verb-*.tex files and tried to write verb-matlab. My attempt is 
attached.

However, it does not work correctly. There are somethings that I could 
not figure out.

1. How to change the comment identifier. Matlab uses % as line 
comments and %{ .... %} as block comments.
2. For some reason Matlab variables are not recognized.
3. The punctuations are not identified.
4. '...' is not recognized as a string. The ' is output as a right 
quotation mark and not _neutral_ '.

What would be a good way to include tex commands in the comments?

Matlab recognizes %% as a special comment (begining of a cell). Is it 
possible to somehow translate %% into \MATLABcell, which is \bf by 
default but the behaviour can be changed if desired?

See attachment verb-matlab.tex for my attempt and test.tex for an 
example.

Thanks
Aditya

-- 
Aditya Mahajan, EECS Systems, University of Michigan
http://www.eecs.umich.edu/~adityam || Ph: 7342624008

[-- Attachment #2: Type: TEXT/PLAIN, Size: 4896 bytes --]

\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi

\unprotect

\gdef\MATLABsetspecials%
  {\PLsetspecials}

\gdef\setupprettyMATLABtype%
  {\def\prettyidentifier{MATLAB}%
   \let\PLidentifiers=\MATLABidentifiers
   \let\PLvariables=\MATLABvariables
   \PLsetvariables
   \PLsetcontrols
   \PLsethandlers
   \MATLABsetspecials
   \PLsetdiagnostics}

\useprettyidentifiers \MATLABidentifiers \MATLABsetspecials
function return case if else elseif do for while end

\useprettyidentifiers \MATLABvariables \MATLABsetspecials
gt,lt,gt,lt,amp,abs,acos,acosh,acot,acoth,acsc,acsch,
all,angle,ans,any,asec,asech,asin,asinh,atan,atan2,atanh,auread,
auwrite,axes,axis,balance,bar,bessel,besselk,bessely,beta,
betainc,betaln,blanks,bone,break,brighten,capture,cart2pol,
cart2sph,caxis,cd,cdf2rdf,cedit,ceil,chol,cla,clabel,clc,clear,
clf,clock,close,colmmd,Colon,colorbar,colormap,ColorSpec,colperm,
comet,comet3,compan,compass,computer,cond,condest,conj,contour,
contour3,contourc,contrast,conv,conv2,cool,copper,corrcoef,cos,
cosh,cot,coth,cov,cplxpair,cputime,cross,csc,csch,csvread,
csvwrite,cumprod,cumsum,cylinder,date,dbclear,dbcont,dbdown,
dbquit,dbstack,dbstatus,dbstep,dbstop,dbtype,dbup,ddeadv,ddeexec,
ddeinit,ddepoke,ddereq,ddeterm,ddeunadv,deblank,dec2hex,deconv,
del2,delete,demo,det,diag,diary,diff,diffuse,dir,disp,dlmread,
dlmwrite,dmperm,dot,drawnow,echo,eig,ellipj,ellipke,
engClose,engEvalString,engGetFull,engGetMatrix,engOpen,
engOutputBuffer,engPutFull,engPutMatrix,engSetEvalCallback,
engSetEvalTimeout,engWinInit,eps,erf,erfc,erfcx,erfinv,error,
errorbar,etime,etree,eval,exist,exp,expint,expm,expo,eye,fclose,
feather,feof,ferror,feval,fft,fft2,fftshift,fgetl,fgets,figure,
fill,fill3,filter,filter2,find,findstr,finite,fix,flag,fliplr,
flipud,floor,flops,fmin,fmins,fopen,format,fplot,fprintf,
fread,frewind,fscanf,fseek,ftell,full,funm,fwrite,fzero,
gallery,gamma,gammainc,gammaln,gca,gcd,gcf,gco,get,getenv,
getframe,ginput,global,gplot,gradient,gray,graymon,grid,griddata,
gtext,hadamard,hankel,help,hess,hex2dec,hex2num,hidden,hilb,hist,
hold,home,hostid,hot,hsv,hsv2rgb,ifft,ifft2,imag,image,
imagesc,Inf,info,input,int2str,interp1,interp2,interpft,inv,
invhilb,isempty,isglobal,ishold,isieee,isinf,isletter,isnan,
isreal,isspace,issparse,isstr,jet,keyboard,kron,lasterr,lcm,
legend,legendre,length,lin2mu,line,linspace,load,log,log10,log2,
loglog,logm,logspace,lookfor,lower,ls,lscov,lu,magic,matClose,
matDeleteMatrix,matGetDir,matGetFp,matGetFull,matGetMatrix,
matGetNextMatrix,matGetString,matlabrc,matlabroot,matOpen,
matPutFull,matPutMatrix,matPutString,max,mean,median,menu,mesh,
meshc,meshgrid,meshz,mexAtExit,mexCallMATLAB,mexdebug,
mexErrMsgTxt,mexEvalString,mexFunction,mexGetFull,mexGetMatrix,
mexGetMatrixPtr,mexPrintf,mexPutFull,mexPutMatrix,mexSetTrapFlag,
min,more,movie,moviein,mu2lin,mxCalloc,mxCopyCharacterToPtr,
mxCopyComplex16ToPtr,mxCopyInteger4ToPtr,mxCopyPtrToCharacter,
mxCopyPtrToComplex16,mxCopyPtrToInteger4,mxCopyPtrToReal8,
mxCopyReal8ToPtr,mxCreateFull,mxCreateSparse,mxCreateString,
mxFree,mxFreeMatrix,mxGetIr,mxGetJc,mxGetM,mxGetN,mxGetName,
mxGetNzmax,mxGetPi,mxGetPr,mxGetScalar,mxGetString,mxIsComplex,
mxIsFull,mxIsNumeric,mxIsSparse,mxIsString,mxIsTypeDouble,
mxSetIr,mxSetJc,mxSetM,mxSetN,mxSetName,mxSetNzmax,mxSetPi,
mxSetPr,NaN,nargchk,nargin,nargout,newplot,nextpow2,nnls,nnz,
nonzeros,norm,normest,null,num2str,nzmax,ode23,ode45,orient,orth,
pack,pascal,patch,path,pause,pcolor,pi,pink,pinv,plot,plot3,
pol2cart,polar,poly,polyder,polyeig,polyfit,polyval,polyvalm,
pow2,print,printopt,prism,prod,pwd,qr,qrdelete,qrinsert,quad,
quad8,quit,quiver,qz,rand,randn,randperm,rank,rat,rats,rbbox,
rcond,real,realmax,realmin,refresh,rem,reset,reshape,residue,
rgb2hsv,rgbplot,rootobject,roots,rose,rosser,rot90,rotate,
round,rref,rrefmovie,rsf2csf,save,saxis,schur,sec,sech,semilogx,
semilogy,set,setstr,shading,sign,sin,sinh,size,slice,sort,sound,
spalloc,sparse,spaugment,spconvert,spdiags,specular,speye,spfun,
sph2cart,sphere,spinmap,spline,spones,spparms,sprandn,sprandsym,
sprank,sprintf,spy,sqrt,sqrtm,sscanf,stairs,startup,std,stem,
str2mat,str2num,strcmp,strings,strrep,strtok,subplot,subscribe,
subspace,sum,surf,surface,surfc,surfl,surfnorm,svd,symbfact,
symmmd,symrcm,tan,tanh,tempdir,tempname,terminal,text,tic,title,
toc,toeplitz,trace,trapz,tril,triu,type,uicontrol,uigetfile,
uimenu,uiputfile,unix,unwrap,upper,vander,ver,version,view,
viewmtx,waitforbuttonpress,waterfall,wavread,wavwrite,what,
whatsnew,which,white,whitebg,who,whos,wilkinson,wk1read,
wk1write,xlabel,xor,ylabel,zeros,zlabel,zoom

\installprettytype [MATLAB]     [MATLAB]
\definetyping      [MATLAB]     [\c!option=MATLAB]
\definepalet [MATLABcolorpretty]    [colorpretty]
\definepalet [MATLABgraypretty]     [graypretty]



\protect \endinput



[-- Attachment #3: Type: TEXT/PLAIN, Size: 1035 bytes --]

\setupcolors[state=start]
\input verb-matlab
\starttext
\startMATLAB
n = 150e5 ;
p = 0.9 ;

d = 300 ;
r = 100 ;

m_total = n:(n+40) ;

warning off;

%%. Refundable Tickets

cost = zeros(length(m_total),1) ;
for m = m_total 
    for k = 0:n
       cost(m-n+1) = cost(m-n+1) + k*d*nchoosek(m,k)*p^k*(1-p)^(m - k) ;
    end;
    for k = (n+1):m
        cost(m-n+1) = cost(m-n+1) + (n*d - (k-n)*r)*nchoosek(m,k)*p^k*(1-p)^(m-k) ;
    end;
end;
[value,count] = max(cost) ;
disp(sprintf('The maximum occurs at %d',count+n-1)) ;
figure(1);
plot(m_total,cost) ;

%%. Nonrefundable Case

cost = zeros(length(m_total),1) ;
for m = m_total 
    for k = 0:n
       cost(m-n+1) = cost(m-n+1) + k*d*nchoosek(m,k)*p^k*(1-p)^(m - k) ;
    end;
    for k = (n+1):m
        cost(m-n+1) = cost(m-n+1) + (m*d - (k-n)*(d+r))*nchoosek(m,k)*p^k*(1-p)^(m-k) ;
    end;
end;
[value,count] = max(cost) ;
disp(sprintf('The maximum occurs at %d',count+n-1)) ;
figure(2);
plot(m_total,cost) ;
\stopMATLAB
\stoptext


[-- Attachment #4: Type: text/plain, Size: 139 bytes --]

_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

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

* Re: pretty typesetting for matlab files
  2006-03-15  6:50 pretty typesetting for matlab files Aditya Mahajan
@ 2006-03-15  9:20 ` Taco Hoekwater
  2006-03-15 21:14   ` Aditya Mahajan
  0 siblings, 1 reply; 6+ messages in thread
From: Taco Hoekwater @ 2006-03-15  9:20 UTC (permalink / raw)




Aditya Mahajan wrote:
> Hi,
> 
>  I was trying to define a pretty printing environment for matlab files. 
> The basic requirements that I have are
>  
> The syntax is similar to both perl and MP. I had a look at the 
> verb-*.tex files and tried to write verb-matlab. My attempt is attached.

If you have to change any of the actual syntax rules (like for comments
etc.), then you have to be brave and create a fully new definition.

That may sound like a very daunting task, but it is not as hard as you
may think, just something to be done meticulously. The verb-xxxx
definitions are rather straightforward state engines that use character
codes as command tokens.

Cheers, Taco

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

* Re: pretty typesetting for matlab files
  2006-03-15  9:20 ` Taco Hoekwater
@ 2006-03-15 21:14   ` Aditya Mahajan
  2006-03-16  9:50     ` Taco Hoekwater
  0 siblings, 1 reply; 6+ messages in thread
From: Aditya Mahajan @ 2006-03-15 21:14 UTC (permalink / raw)




On Wed, 15 Mar 2006, Taco Hoekwater wrote:

>
>
> Aditya Mahajan wrote:
>> Hi,
>>
>>  I was trying to define a pretty printing environment for matlab files.
>> The basic requirements that I have are
>>
>> The syntax is similar to both perl and MP. I had a look at the
>> verb-*.tex files and tried to write verb-matlab. My attempt is attached.
>
> If you have to change any of the actual syntax rules (like for comments
> etc.), then you have to be brave and create a fully new definition.

The syntax is quite similar to MP. I will see if I can make the 
corresponding changes for things to work.

> That may sound like a very daunting task, but it is not as hard as you
> may think, just something to be done meticulously. The verb-xxxx
> definitions are rather straightforward state engines that use character
> codes as command tokens.

Is this documented somewhere? Even the source files (verb-*.tex) did not 
have too many hints on what is going on. Should I also look into some 
other files?

Thanks,
Aditya

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

* Re: pretty typesetting for matlab files
  2006-03-15 21:14   ` Aditya Mahajan
@ 2006-03-16  9:50     ` Taco Hoekwater
  2006-03-17  5:29       ` Aditya Mahajan
  0 siblings, 1 reply; 6+ messages in thread
From: Taco Hoekwater @ 2006-03-16  9:50 UTC (permalink / raw)




Aditya Mahajan wrote:
>>That may sound like a very daunting task, but it is not as hard as you
>>may think, just something to be done meticulously. The verb-xxxx
>>definitions are rather straightforward state engines that use character
>>codes as command tokens.
> 
> Is this documented somewhere? 

I don't know. If anybody else knows, please tell me. If not, I'll jot
down some stuff.

Cheers,
Taco

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

* Re: pretty typesetting for matlab files
  2006-03-16  9:50     ` Taco Hoekwater
@ 2006-03-17  5:29       ` Aditya Mahajan
  2006-03-17  9:16         ` Taco Hoekwater
  0 siblings, 1 reply; 6+ messages in thread
From: Aditya Mahajan @ 2006-03-17  5:29 UTC (permalink / raw)


[-- Attachment #1: Type: TEXT/PLAIN, Size: 1045 bytes --]

<--- On Mar 16, Taco Hoekwater wrote --->

> Aditya Mahajan wrote:
>>> That may sound like a very daunting task, but it is not as hard as you
>>> may think, just something to be done meticulously. The verb-xxxx
>>> definitions are rather straightforward state engines that use character
>>> codes as command tokens.
>>
>> Is this documented somewhere?
>
> I don't know. If anybody else knows, please tell me. If not, I'll jot
> down some stuff.

Actually the explaination in verb-ini.tex is pretty good. I had 
somehow missed reading it earlier. I vaguely understand how the whole 
mechanism is working and managed to obtain a partial 
solution (attached). I have a deadline for submission and right now 
this will have to do. The only features missing are identifying line 
and block comments and a meachism to add tex markup in comments. I 
need to understand verb-jv/js more clearly to incorporate these 
changes.

Thanks,
Aditya



-- 
Aditya Mahajan, EECS Systems, University of Michigan
http://www.eecs.umich.edu/~adityam || Ph: 7342624008

[-- Attachment #2: Type: TEXT/PLAIN, Size: 5305 bytes --]

\unprotect

\ifx\undefined\setupprettyPLtype \input verb-pl \relax \fi

\gdef\MATLABsetspecials%
  {\PLsetspecials
  \setpretty`\'=41
  \setpretty`\.=41
  \setpretty`\#=21
  \setpretty`\%=0
  \setpretty`\,=21
  \setpretty`\;=21
  \setpretty`\:=21
  }

\gdef\MATLABsethandlers%
  {\PLsethandlers}

\gdef\MATLABsetcontrols%
  {\PLsetcontrols}

\gdef\MATLABsetvariables
  {\PLsetvariables}


\gdef\setupprettyMATLABtype%
  {\def\prettyidentifier{MATLAB}%
   \let\PLidentifiers=\MATLABidentifiers
   \let\PLvariables=\MATLABvariables
   \MATLABsetvariables
   \MATLABsetcontrols
   \MATLABsethandlers
   \MATLABsetspecials}

\useprettyidentifiers \MATLABidentifiers \MATLABsetspecials
  function return case if else elseif do for while end

\useprettyidentifiers \MATLABvariables \MATLABsetspecials
  gt lt gt lt amp abs acos acosh acot acoth acsc acsch 
  all angle ans any asec asech asin asinh atan atan2 atanh auread 
  auwrite axes axis balance bar bessel besselk bessely beta 
  betainc betaln blanks bone break brighten capture cart2pol 
  cart2sph caxis cd cdf2rdf cedit ceil chol cla clabel clc clear 
  clf clock close colmmd Colon colorbar colormap ColorSpec colperm 
  comet comet3 compan compass computer cond condest conj contour 
  contour3 contourc contrast conv conv2 cool copper corrcoef cos 
  cosh cot coth cov cplxpair cputime cross csc csch csvread 
  csvwrite cumprod cumsum cylinder date dbclear dbcont dbdown 
  dbquit dbstack dbstatus dbstep dbstop dbtype dbup ddeadv ddeexec 
  ddeinit ddepoke ddereq ddeterm ddeunadv deblank dec2hex deconv 
  del2 delete demo det diag diary diff diffuse dir disp dlmread 
  dlmwrite dmperm dot drawnow echo eig ellipj ellipke 
  engClose engEvalString engGetFull engGetMatrix engOpen 
  engOutputBuffer engPutFull engPutMatrix engSetEvalCallback 
  engSetEvalTimeout engWinInit eps erf erfc erfcx erfinv error 
  errorbar etime etree eval exist exp expint expm expo eye fclose 
  feather feof ferror feval fft fft2 fftshift fgetl fgets figure 
  fill fill3 filter filter2 find findstr finite fix flag fliplr 
  flipud floor flops fmin fmins fopen format fplot fprintf 
  fread frewind fscanf fseek ftell full funm fwrite fzero 
  gallery gamma gammainc gammaln gca gcd gcf gco get getenv 
  getframe ginput global gplot gradient gray graymon grid griddata 
  gtext hadamard hankel help hess hex2dec hex2num hidden hilb hist 
  hold home hostid hot hsv hsv2rgb ifft ifft2 imag image 
  imagesc Inf info input int2str interp1 interp2 interpft inv 
  invhilb isempty isglobal ishold isieee isinf isletter isnan 
  isreal isspace issparse isstr jet keyboard kron lasterr lcm 
  legend legendre length lin2mu line linspace load log log10 log2 
  loglog logm logspace lookfor lower ls lscov lu magic matClose 
  matDeleteMatrix matGetDir matGetFp matGetFull matGetMatrix 
  matGetNextMatrix matGetString matlabrc matlabroot matOpen 
  matPutFull matPutMatrix matPutString max mean median menu mesh 
  meshc meshgrid meshz mexAtExit mexCallMATLAB mexdebug 
  mexErrMsgTxt mexEvalString mexFunction mexGetFull mexGetMatrix 
  mexGetMatrixPtr mexPrintf mexPutFull mexPutMatrix mexSetTrapFlag 
  min more movie moviein mu2lin mxCalloc mxCopyCharacterToPtr 
  mxCopyComplex16ToPtr mxCopyInteger4ToPtr mxCopyPtrToCharacter 
  mxCopyPtrToComplex16 mxCopyPtrToInteger4 mxCopyPtrToReal8 
  mxCopyReal8ToPtr mxCreateFull mxCreateSparse mxCreateString 
  mxFree mxFreeMatrix mxGetIr mxGetJc mxGetM mxGetN mxGetName 
  mxGetNzmax mxGetPi mxGetPr mxGetScalar mxGetString mxIsComplex 
  mxIsFull mxIsNumeric mxIsSparse mxIsString mxIsTypeDouble 
  mxSetIr mxSetJc mxSetM mxSetN mxSetName mxSetNzmax mxSetPi mxSetPr NaN 
  nargchk nargin nargout nchoosek newplot nextpow2 nnls nnz nonzeros norm 
  normest null num2str nzmax ode23 ode45 orient orth pack pascal patch path 
  pause pcolor pi pink pinv plot plot3 pol2cart polar poly polyder polyeig 
  polyfit polyval polyvalm pow2 print printopt prism prod pwd qr qrdelete 
  qrinsert quad quad8 quit quiver qz rand randn randperm rank rat rats rbbox 
  rcond real realmax realmin refresh rem reset reshape residue rgb2hsv rgbplot 
  rootobject roots rose rosser rot90 rotate round rref rrefmovie rsf2csf save 
  saxis schur sec sech semilogx semilogy set setstr shading sign sin sinh size 
  slice sort sound spalloc sparse spaugment spconvert spdiags specular speye 
  spfun sph2cart sphere spinmap spline spones spparms sprandn sprandsym sprank 
  sprintf spy sqrt sqrtm sscanf stairs startup std stem str2mat str2num strcmp 
  strings strrep strtok subplot subscribe subspace sum surf surface surfc 
  surfl surfnorm svd symbfact symmmd symrcm tan tanh tempdir tempname terminal 
  text tic title toc toeplitz trace trapz tril triu type uicontrol uigetfile 
  uimenu uiputfile unix unwrap upper vander ver version view viewmtx 
  waitforbuttonpress waterfall wavread wavwrite what whatsnew which white 
  whitebg who whos wilkinson wk1read wk1write xlabel xor ylabel zeros zlabel 
  zoom

\installprettytype [MATLAB]     [MATLAB]
\definetyping      [MATLAB]     [\c!option=MATLAB]
\definepalet [MATLABcolorpretty]    [colorpretty]
\definepalet [MATLABgraypretty]     [graypretty]



\protect \endinput


[-- Attachment #3: Type: text/plain, Size: 139 bytes --]

_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

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

* Re: pretty typesetting for matlab files
  2006-03-17  5:29       ` Aditya Mahajan
@ 2006-03-17  9:16         ` Taco Hoekwater
  0 siblings, 0 replies; 6+ messages in thread
From: Taco Hoekwater @ 2006-03-17  9:16 UTC (permalink / raw)




Aditya Mahajan wrote:
> Actually the explaination in verb-ini.tex is pretty good. I had somehow 
> missed reading it earlier. I vaguely understand how the whole mechanism 
> is working and managed to obtain a partial solution (attached). I have a 

When you feel it is finished, please e-mail it to Patrick for inclusion
in the third party modules section of contextgarden.net (Nikolai, do you
remember your verb-c ? :-))

Greetings, Taco

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

end of thread, other threads:[~2006-03-17  9:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-03-15  6:50 pretty typesetting for matlab files Aditya Mahajan
2006-03-15  9:20 ` Taco Hoekwater
2006-03-15 21:14   ` Aditya Mahajan
2006-03-16  9:50     ` Taco Hoekwater
2006-03-17  5:29       ` Aditya Mahajan
2006-03-17  9:16         ` Taco Hoekwater

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 NNTP newsgroup(s).