Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for #1669 #1853

Merged
merged 20 commits into from Oct 6, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
5db3714
New boolean attribute 'endSameAsBegin': when set, acts as 'end' match…
egor-rogov Aug 4, 2018
83839ce
Added new language for PostgreSQL SQL dialect and PL/pgSQL
egor-rogov Aug 4, 2018
8f718dc
Merge remote-tracking branch 'upstream/master'
egor-rogov Aug 4, 2018
26f9a8d
Documented endSameAsBegin attribute
egor-rogov Aug 4, 2018
4830d90
Added PostgreSQL to the list of languagaes
egor-rogov Aug 4, 2018
789ff60
Added myself to AUTHORS
egor-rogov Aug 4, 2018
dd99f69
Added to CHANGES
egor-rogov Aug 4, 2018
07be0e0
s/ELSEIF/ELSIF/
egor-rogov Aug 5, 2018
c5ae5f7
More aggressive regexp for compiler options
egor-rogov Aug 5, 2018
ffa6acf
Removed highlighting for function names
egor-rogov Aug 22, 2018
702496d
Added some types from standard extensions
egor-rogov Aug 22, 2018
015ab12
Merge remote-tracking branch 'upstream/master'
egor-rogov Aug 22, 2018
55bdcf3
Resolve merge conflict
egor-rogov Aug 31, 2018
6b4ee1d
Facility to define non-autodetactable languages and 'plain' pseudolan…
egor-rogov Sep 15, 2018
fb29ba4
Merge remote-tracking branch 'upstream/master'
egor-rogov Sep 15, 2018
a9799df
Renamed 'plain' to 'plaintext' for backward compatibility
egor-rogov Sep 17, 2018
04f3d6d
Merge remote-tracking branch 'upstream/master'
egor-rogov Sep 29, 2018
2513b72
Fix for #1669: incorrect handling of transpose operators in Matlab
egor-rogov Sep 29, 2018
d2df1dc
Merge remote-tracking branch 'upstream/master' into 1669
egor-rogov Oct 5, 2018
637931f
Fix for #1669 (matlab): incorrect handling of transpose operators + d…
egor-rogov Oct 5, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
58 changes: 32 additions & 26 deletions src/languages/matlab.js
@@ -1,25 +1,21 @@
/*
Language: Matlab
Author: Denis Bardadym <bardadymchik@gmail.com>
Contributors: Eugene Nizhibitsky <nizhibitsky@ya.ru>
Contributors: Eugene Nizhibitsky <nizhibitsky@ya.ru>, Egor Rogov <e.rogov@postgrespro.ru>
Category: scientific
*/

/*
Formal syntax is not published, helpful link:
https://github.com/kornilova-l/matlab-IntelliJ-plugin/blob/master/src/main/grammar/Matlab.bnf
*/
function(hljs) {
var COMMON_CONTAINS = [
hljs.C_NUMBER_MODE,
{
className: 'string',
begin: '\'', end: '\'',
contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
}
];

var TRANSPOSE_RE = '(\'|\\.\')+';
var TRANSPOSE = {
relevance: 0,
contains: [
{
begin: /('|\.')+/
}
{ begin: TRANSPOSE_RE }
]
};

Expand Down Expand Up @@ -63,34 +59,44 @@ function(hljs) {
]
},
{
begin: /[a-zA-Z_][a-zA-Z_0-9]*('|\.')+/,
returnBegin: true,
className: 'built_in',
begin: /true|false/,
relevance: 0,
contains: [
{begin: /[a-zA-Z_][a-zA-Z_0-9]*/, relevance: 0},
TRANSPOSE.contains[0]
]
starts: TRANSPOSE
},
{
begin: '\\[', end: '\\]',
contains: COMMON_CONTAINS,
begin: '[a-zA-Z][a-zA-Z_0-9]*' + TRANSPOSE_RE,
relevance: 0
},
{
className: 'number',
begin: hljs.C_NUMBER_RE,
relevance: 0,
starts: TRANSPOSE
},
{
begin: '\\{', end: /}/,
contains: COMMON_CONTAINS,
className: 'string',
begin: '\'', end: '\'',
contains: [
hljs.BACKSLASH_ESCAPE,
{begin: '\'\''}]
},
{
begin: /\]|}|\)/,
relevance: 0,
starts: TRANSPOSE
},
{
// transpose operators at the end of a function call
begin: /\)/,
relevance: 0,
className: 'string',
begin: '"', end: '"',
contains: [
hljs.BACKSLASH_ESCAPE,
{begin: '""'}
],
starts: TRANSPOSE
},
hljs.COMMENT('^\\s*\\%\\{\\s*$', '^\\s*\\%\\}\\s*$'),
hljs.COMMENT('\\%', '$')
].concat(COMMON_CONTAINS)
]
};
}
10 changes: 5 additions & 5 deletions test/markup/matlab/block_comment.expect.txt
@@ -1,27 +1,27 @@
<span class="hljs-comment">%{ evaluate_this = false; % Evaluated as regular single-line comment</span>
evaluate_this = true;
evaluate_this = <span class="hljs-built_in">true</span>;
<span class="hljs-comment">%}</span>

evaluate_this = true;
evaluate_this = <span class="hljs-built_in">true</span>;
<span class="hljs-comment">
%{
This is a multi-line comment
evaluate_this = false;
%{
%}
</span>
evaluate_this = true;
evaluate_this = <span class="hljs-built_in">true</span>;
<span class="hljs-comment">
%{
Opening (%{) and closing (%}) block comment markers can be within a comment block
%}
</span>
evaluate_this = true;
evaluate_this = <span class="hljs-built_in">true</span>;
<span class="hljs-comment">
%{
Indented block comments can be indented
or not
and whitespace can be added before or after the %{ and %}
%}
</span>
evaluate_this = true;
evaluate_this = <span class="hljs-built_in">true</span>;
43 changes: 40 additions & 3 deletions test/markup/matlab/transpose.expect.txt
@@ -1,3 +1,40 @@
v' <span class="hljs-comment">% conjugate transpose</span>
v.' <span class="hljs-comment">% transpose</span>
v.''.'.'' <span class="hljs-comment">% several times</span>
<span class="hljs-comment">% This use of ' is for transpose:</span>
mat2x2 = [<span class="hljs-number">1</span> <span class="hljs-number">2</span>; <span class="hljs-number">3</span> <span class="hljs-number">4</span>]'; <span class="hljs-comment">% transpose of a matrix</span>
cell2x2 = {<span class="hljs-number">1</span> <span class="hljs-number">2</span>; <span class="hljs-number">3</span> <span class="hljs-number">4</span>}'; <span class="hljs-comment">% transpose of a cell</span>
v=mat2x2'; <span class="hljs-comment">% transpose of a variable</span>
v2 = (v')'; <span class="hljs-comment">% two transpose operations</span>
foo = <span class="hljs-number">1.</span>'; <span class="hljs-comment">% transpose of scalar 1.</span>

<span class="hljs-comment">% Nonconjugate transpose uses .'</span>
mat2x2 = [<span class="hljs-number">1</span> <span class="hljs-number">2</span>; <span class="hljs-number">3</span> <span class="hljs-number">4</span>].'; <span class="hljs-comment">% of a matrix</span>
cell2x2 = {<span class="hljs-number">1</span> <span class="hljs-number">2</span>; <span class="hljs-number">3</span> <span class="hljs-number">4</span>}.'; <span class="hljs-comment">% of a cell</span>
v=mat2x2.'; <span class="hljs-comment">% of a variable</span>
v2 = (v.').'; <span class="hljs-comment">% two operations</span>
foo = <span class="hljs-number">1.</span>.'; <span class="hljs-comment">% of scalar 1.</span>
bar = v.''.'.''; <span class="hljs-comment">% mix of transpose operations</span>

<span class="hljs-comment">% single quote strings:</span>
sq1 = <span class="hljs-string">'a single quote string'</span>;
sq2 = ...
<span class="hljs-string">' abcd '</span>; <span class="hljs-comment">% single quote string starting at column 1</span>
sq3 = [<span class="hljs-string">'a'</span>,<span class="hljs-string">'bc'</span>]; <span class="hljs-comment">% array of single quote strings</span>
sq4 = {<span class="hljs-string">'a'</span>,<span class="hljs-string">'bc'</span>}; <span class="hljs-comment">% cell of single quote strings</span>

<span class="hljs-comment">% double quote strings</span>
dq1 = <span class="hljs-string">"a double string"</span>;
dq2 = ...
<span class="hljs-string">" abcd "</span>; <span class="hljs-comment">% double quote string starting at column 1</span>
dq3 = [<span class="hljs-string">"a"</span>,<span class="hljs-string">"bc"</span>]; <span class="hljs-comment">% array of double quote strings</span>

<span class="hljs-comment">% Mixture of strings and transpose</span>
c2 = {<span class="hljs-string">'a'</span>,<span class="hljs-string">'bc'</span>}'; <span class="hljs-comment">% transpose of a cell of strings</span>
s = [<span class="hljs-string">'a'</span>,<span class="hljs-string">'bc'</span>]'; <span class="hljs-comment">% you can transpose vectors of strings (they are really 'char' arrays)</span>
s = s'; <span class="hljs-comment">% and transpose back</span>
<span class="hljs-comment">% (s')' is a double transpose of a string</span>
x = [(s')', <span class="hljs-string">' xyz '</span>, <span class="hljs-string">'a single quote in a string'', escape \', two quotes in a string'''''</span>];

s2 = <span class="hljs-string">"abc\"def""ghi"</span>; <span class="hljs-comment">% newer versions of MATLAB support double quoted strings</span>
s3 = ([<span class="hljs-string">"abc"</span>, <span class="hljs-string">"defg"</span>]')'; <span class="hljs-comment">% transpose a vectors of quoted string twice</span>
s4 = <span class="hljs-string">"abc"</span>!; <span class="hljs-comment">% transpose a quoted string</span>

b = <span class="hljs-built_in">true</span>' + <span class="hljs-built_in">false</span>'; <span class="hljs-comment">% boolean constants</span>
43 changes: 40 additions & 3 deletions test/markup/matlab/transpose.txt
@@ -1,3 +1,40 @@
v' % conjugate transpose
v.' % transpose
v.''.'.'' % several times
% This use of ' is for transpose:
mat2x2 = [1 2; 3 4]'; % transpose of a matrix
cell2x2 = {1 2; 3 4}'; % transpose of a cell
v=mat2x2'; % transpose of a variable
v2 = (v')'; % two transpose operations
foo = 1.'; % transpose of scalar 1.

% Nonconjugate transpose uses .'
mat2x2 = [1 2; 3 4].'; % of a matrix
cell2x2 = {1 2; 3 4}.'; % of a cell
v=mat2x2.'; % of a variable
v2 = (v.').'; % two operations
foo = 1..'; % of scalar 1.
bar = v.''.'.''; % mix of transpose operations

% single quote strings:
sq1 = 'a single quote string';
sq2 = ...
' abcd '; % single quote string starting at column 1
sq3 = ['a','bc']; % array of single quote strings
sq4 = {'a','bc'}; % cell of single quote strings

% double quote strings
dq1 = "a double string";
dq2 = ...
" abcd "; % double quote string starting at column 1
dq3 = ["a","bc"]; % array of double quote strings

% Mixture of strings and transpose
c2 = {'a','bc'}'; % transpose of a cell of strings
s = ['a','bc']'; % you can transpose vectors of strings (they are really 'char' arrays)
s = s'; % and transpose back
% (s')' is a double transpose of a string
x = [(s')', ' xyz ', 'a single quote in a string'', escape \', two quotes in a string'''''];

s2 = "abc\"def""ghi"; % newer versions of MATLAB support double quoted strings
s3 = (["abc", "defg"]')'; % transpose a vectors of quoted string twice
s4 = "abc"!; % transpose a quoted string

b = true' + false'; % boolean constants