MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Add syntax highlighting to own command

  • To: mathgroup at smc.vnet.net
  • Subject: [mg101602] Re: Add syntax highlighting to own command
  • From: Peter Breitfeld <phbrf at t-online.de>
  • Date: Fri, 10 Jul 2009 23:23:38 -0400 (EDT)
  • References: <h340tk$guu$1@smc.vnet.net>

Bastian,

you should make a file Bastian.m (or so) to look like this:

----cut---------8<----start-------8<----------------

(* :Context: Bastian` *)

BeginPackage["Bastian`"]

Let::usage="Let[vars, expr] does ... "

Begin["`Private`"]

Attributes[Let]={HoldAll};
SyntaxInformation[Let]={"ArgumentsPattern"->{_,_}};

Let[vars_, expr_]:= <your code ... >

SetAttributes[Let,ReadProtected]; Protect[Let];

End[]
EndPackage[]

----cut---------8<----end---------8<---------------- 

Put this file in the Folder $UserBaseDirectory/Applications.

Look for the file $UserBaseDirectory/Kernel/init.m
If it doesn't exist, create it.
Open it with an editor and add the line

Get["Bastian`"]

Now, your file will always be loaded on startup.

To your other questions:

1. Yes, it's a bad idea to give your own functions the context System`.
   Better create your own Bastian.m file and put all your functions in
   it; they will have the context Bastian`. (Such a file tends to grow
   over time :-))

2. Syntax Highlighting is done with the line SyntaxInformation above.

3. I can't improve your code.

Bastian Erdnuess wrote:

> I was missing a scoping construct like 'With' but where the local
> variables get assigned linearly.  E. g.
>
>   In[1] := LinearWith[ {
>                a = "Hi, ",
>                b = a <> "there!" },
>              Print[ b ] ]
>
>   Out[1] = "Hi, there!"  .
>
> I'm fairly new to Mathematica, but I know some Lisp, and somehow I got
> it.  I called my new construct Let and defined it as:
>
>   Let[ vars_, expr_ ] :=
>     If[ Length[ Unevaluated[ vars ] ] == 1,
>       With[ vars, expr ],
>     (* else *)
>       Unevaluated[ vars ] /.
>         { a_, b__ } :>
>           With[ { a },
>             Let[ { b }, expr ] ] ]
>
>   SetAttributes[ Let, HoldAll ]
>
> It seems to work fine so far.
>
> Now, I would like to have this construct load always when I start
> Mathematica and I don't want to get it cleared when I use
> 'Clear["Global`*"]'.  So I put it in the System` context and also added
> the attribute 'Protected'.  I wrote all in a file Let.m and now, I
> wonder where to put it that it gets read automatically at each startup
> of Mathematica.
>
> However, my first question: Is it a bad idea to add things to the
> System` context?  And if not, where to put my file?  And if, what would
> be better?
>
> Second, my main question: Is it somehow possible to add this nice syntax
> highlighting to the Let construct like with the With construct, where
> the local variables appear in green?
>
> Third: Can I somehow add a help page?  I have already the Let::usage.
>
> And last: Does anybody know how to make the construct better?  Is there
> something like syntax transformation rules in Mathematica?
>
> Thank you for your answers,
> Bastian
>

-- 
_________________________________________________________________
Peter Breitfeld, Bad Saulgau, Germany -- http://www.pBreitfeld.de


  • Prev by Date: Re: Re: about Implication
  • Next by Date: Re: Calculate n in binomial distribution
  • Previous by thread: Re: question on constructing graphs
  • Next by thread: Re: Add syntax highlighting to own command