[TxMt] Re: Unnecessary commenting line in modern fortran mode
Mark Livingstone
livingstonemark at gmail.com
Mon Sep 26 06:17:12 UTC 2011
Hello!
Apologies for dragging up an old message. For my Uni Thesis work, I am
going to translate some Fortran code to C++ or Python. My knowledge of
Fortran, Regex and tmbundles is essentially zero beyond recent Kindle
book reads. Because I did not think to search for a fortran bundle, I
wrote my own primitive one which used the following for comments which
seems to better colourise fortran code even if it is not 100% as per specs:
{ name = 'comment.line.character.fortran';
match = '^([\S]{1,}[\s]{1,})*';
},
{ name = 'comment.line.character.fortran';
match = '!([\S\s]{1,})';
},
Testing in Textmate / Sublime, you can see my results in the left hand
side of the image in this URL:
http://skitch.com/mlivingstone/f5h1w/tmscore.f
The right hand side is the existing Textmate fortran bundle colourising
(shown in a Sublime window).
Could someone with SVN access please fix the spelling of "intrinsic"
which the bundle author keeps using other dyslexic spelling? ;-)
This was my first attempt which worked quite well seeing I didn't know
anything about what I was doing before commencing!
{ scopeName = 'source.fortran';
comment = '
This has only been tested against two classic column delimited Fortran
77 code files, and I have never written a Fortran program before, so
buyer beware ;-) That said, it colourises code by other experienced
Fortran code as I would expect.
--- livingstonemark at gmail.com
';
fileTypes = ( 'f', 'for', 'f77' );
foldingStartMarker = '/\*\*|\{\s*$';
foldingStopMarker = '\*\*/|^\s*\}';
patterns = (
{ name = 'comment.line.character.fortran';
match = '^([\S]{1,}[\s]{1,})*';
},
{ name = 'comment.line.character.fortran';
match = '!([\S\s]{1,})';
},
{ name = 'constant.language.fortran';
match = '(?i)([.](true|false)[.])';
},
{ name = 'entity.name.function.fortran';
match = '(?i)\b(getarg|iargc|read|print|format|close|open|write)\b';
},
{ name = 'entity.name.tag.fortran';
match =
'(?i)\b(unit=|file=|status=|end=|err=|fmt=|access=|form=|recl=)\b';
},
{ name = 'keyword.control.fortran';
match =
'(?i)\b(if|then|while|for|return|continue|stop|call|elseif|else
if|else|[e][n][d][i][f]|do|enddo|goto|continue)\b';
},
{ name = 'keyword.operator.fortran';
match = '(?i)([.](gt|ge|eq|lt|le|or|ne|and|eqv|neqv|not)[.])';
},
{ name = 'keyword.other.fortran';
match =
'(?i)\b(abs|acos|aint|anint|asin|atan|cos|cosh|dabs|datan2|dcos|dim|dsin|exp|int|log|log10|max|min|mod|nint|real|sign|sin|sinh|sqrt|tan|tanh|dsqrt)\b';
},
{ name = 'storage.type.fortran';
match =
'(?i)\b(program|parameter|subroutine|function|end|dimension|data|save|integer|external|intrinsic|implicit|implicit
none|logical|character|real|double|float|precision|complex|equivalence|common|block
data)\b';
},
{ name = 'string.quoted.single.fortran';
begin = "'";
end = "'";
patterns = (
{ name = 'constant.character.escape.fortran';
match = '\\.';
},
);
},
);
}
The first language I was formally taught was Cobol in the early 80s so
this all takes me back! :-D
Cheers,
MarkL
On 1/04/11 12:32 AM, Steve King wrote:
> On 2011-03-30 18:52, Kaster Might wrote:
>> If some variable starts with "C", the whole line which contains that
>> variable and where it at the very first place highlighted as comment.
>> I suppose it comes from old F77 style, where C denotes comment, but
>> it's not necessary now. Is there any way to fix it? My current
>> way-around is to put single space before that variable, but in this
>> case overall code doesn't look as nice as before.
>
> The 'Fortran - Modern' bundle inherits this behavior from 'Fortran -
> Punchcard'. Modern makes an attempt to flag lines beginning with 'C' as
> invalid, but only if the 'C' is followed by whitespace. Punchcard treats
> any line beginning with 'C' as a comment.
>
> I think the easiest way to work around this is to edit the Punchcard
> language definition to change the 'begin' expression for
> 'comment.line.c.fortran' from '^[Cc]' to '^[Cc]\s+', which requires
> comments to start with 'C' followed by whitespace.. This may not
> strictly adhere to the language spec, but it probably matches common
> practice. And if you're not using the older F77 style it won't matter
> anyway.
>
> { name = 'comment.line.c.fortran';
> begin = '^[Cc]\s+';
> end = '$\n?';
> beginCaptures = { 0 = { name =
> 'punctuation.definition.comment.fortran'; }; };
> patterns = ( { match = '\\\s*\n'; } );
> },
>
> (Wow, FORTRAN... That takes me back to 1984 and the start of college.
> That was the first year the freshman FORTRAN class was taught using an
> interactive terminal instead of on punch cards. Of course, it was on
> VM/CMS which implemented a virtual card punch/reader system, but at
> least we had the glorified virtual card punch that was XEDIT.)
>
More information about the textmate
mailing list