Support for brackets \langle,\rangle (didn't parse before), \lVert,\rVert (new).
diff --git a/src/commands/math/commands.js b/src/commands/math/commands.js
index 37c00bf..6153881 100644
--- a/src/commands/math/commands.js
+++ b/src/commands/math/commands.js
@@ -658,7 +658,9 @@
'⟩': '⟨',
'\\langle ': '\\rangle ',
'\\rangle ': '\\langle ',
- '|': '|'
+ '|': '|',
+ '\\lVert' : '\\rVert',
+ '\\rVert' : '\\lVert',
};
function bindCharBracketPair(open, ctrlSeq) {
@@ -672,6 +674,8 @@
LatexCmds.langle = bind(Bracket, L, '⟨', '⟩', '\\langle ', '\\rangle ');
LatexCmds.rangle = bind(Bracket, R, '⟨', '⟩', '\\langle ', '\\rangle ');
CharCmds['|'] = bind(Bracket, L, '|', '|', '|', '|');
+LatexCmds.lVert = bind(Bracket, L, '∥', '∥', '\\lVert ', '\\rVert ');
+LatexCmds.rVert = bind(Bracket, R, '∥', '∥', '\\lVert ', '\\rVert ');
LatexCmds.left = P(MathCommand, function(_) {
_.parser = function() {
@@ -680,13 +684,17 @@
var succeed = Parser.succeed;
var optWhitespace = Parser.optWhitespace;
- return optWhitespace.then(regex(/^(?:[([|]|\\\{)/))
- .then(function(ctrlSeq) { // TODO: \langle, \rangle
+ return optWhitespace.then(regex(/^(?:[([|]|\\\{|\\langle|\\lVert)/))
+ .then(function(ctrlSeq) {
var open = (ctrlSeq.charAt(0) === '\\' ? ctrlSeq.slice(1) : ctrlSeq);
+ if (ctrlSeq=="\\langle") open = '⟨';
+ if (ctrlSeq=="\\lVert") open = '∥';
return latexMathParser.then(function (block) {
return string('\\right').skip(optWhitespace)
- .then(regex(/^(?:[\])|]|\\\})/)).map(function(end) {
+ .then(regex(/^(?:[\])|]|\\\}|\\rangle|\\rVert)/)).map(function(end) {
var close = (end.charAt(0) === '\\' ? end.slice(1) : end);
+ if (end=="\\rangle") close = '⟩';
+ if (end=="\\rVert") close = '∥';
var cmd = Bracket(0, open, close, ctrlSeq, end);
cmd.blocks = [ block ];
block.adopt(cmd, 0, 0);
diff --git a/test/unit/latex.test.js b/test/unit/latex.test.js
index 7cfa094..bd60403 100644
--- a/test/unit/latex.test.js
+++ b/test/unit/latex.test.js
@@ -85,6 +85,24 @@
assert.equal(tree.join('latex'), '\\left(123\\right)');
});
+ test('langle/rangle (issue #508)', function() {
+ var tree = latexMathParser.parse('\\left\\langle 123\\right\\rangle)');
+
+ assert.ok(tree.ends[L] instanceof Bracket);
+ var contents = tree.ends[L].ends[L].join('latex');
+ assert.equal(contents, '123');
+ assert.equal(tree.join('latex'), '\\left\\langle123\\right\\rangle)');
+ });
+
+ test('lVert/rVert', function() {
+ var tree = latexMathParser.parse('\\left\\lVert 123\\right\\rVert)');
+
+ assert.ok(tree.ends[L] instanceof Bracket);
+ var contents = tree.ends[L].ends[L].join('latex');
+ assert.equal(contents, '123');
+ assert.equal(tree.join('latex'), '\\left\\lVert123\\right\\rVert)');
+ });
+
test('parens with whitespace', function() {
assertParsesLatex('\\left ( 123 \\right ) ', '\\left(123\\right)');
});