Skip to content

Commit 325690b

Browse files
committed
copty misc/cells to lib_src
1 parent e3724e3 commit 325690b

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

lib_src/misc/cells.js

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
'use babel'
2+
3+
import { get as weaveGet,
4+
moveNext as weaveMoveNext,
5+
movePrev as weaveMovePrev } from './weave.js'
6+
7+
import { getLine } from './blocks.js'
8+
9+
import { Point } from 'atom'
10+
11+
export function getRange (ed) {
12+
// Cell range is:
13+
// Start of line below top delimiter (and/or start of top row of file) to
14+
// End of line before end delimiter
15+
var buffer = ed.getBuffer()
16+
var start = buffer.getFirstPosition()
17+
var end = buffer.getEndPosition()
18+
var regexString = '^(' + atom.config.get('julia-client.uiOptions.cellDelimiter').join('|') + ')'
19+
var regex = new RegExp(regexString)
20+
var cursor = ed.getCursorBufferPosition()
21+
cursor.column = Infinity // cursor on delimiter line means eval cell below
22+
23+
24+
let foundDelim = false
25+
for (let i = cursor.row + 1; i <= ed.getLastBufferRow(); i++) {
26+
let {line, scope} = getLine(ed, i)
27+
foundDelim = regex.test(line) && scope.join('.').indexOf('comment.line') > -1
28+
end.row = i
29+
if (foundDelim) break
30+
}
31+
32+
if (foundDelim) {
33+
end.row -= 1
34+
if (end.row < 0) end.row = 0
35+
end.column = Infinity
36+
}
37+
38+
foundDelim = false
39+
if (cursor.row > 0) {
40+
for (let i = end.row; i >= 0; i--) {
41+
let {line, scope} = getLine(ed, i)
42+
foundDelim = regex.test(line) && scope.join('.').indexOf('comment.line') > -1
43+
start.row = i
44+
if (foundDelim) {
45+
break
46+
}
47+
}
48+
start.column = 0
49+
}
50+
51+
return [start, end]
52+
}
53+
54+
export function get (ed) {
55+
if (ed.getGrammar().scopeName.indexOf('source.julia') > -1) {
56+
return jlGet(ed)
57+
} else {
58+
return weaveGet(ed)
59+
}
60+
}
61+
62+
function jlGet (ed) {
63+
var range = getRange(ed)
64+
var text = ed.getTextInBufferRange(range)
65+
if (text.trim() === '') text = ' '
66+
var res = {
67+
range: [[range[0].row, range[0].column], [range[1].row, range[1].column]],
68+
selection: ed.getSelections()[0],
69+
line: range[0].row,
70+
text: text
71+
}
72+
return [res]
73+
}
74+
75+
export function moveNext (ed) {
76+
if (ed == null) {
77+
ed = atom.workspace.getActiveTextEditor()
78+
}
79+
if (ed.getGrammar().scopeName.indexOf('source.julia') > -1) {
80+
return jlMoveNext(ed)
81+
} else {
82+
return weaveMoveNext(ed)
83+
}
84+
}
85+
86+
function jlMoveNext (ed) {
87+
var range = getRange(ed)
88+
var sel = ed.getSelections()[0]
89+
var nextRow = range[1].row + 2 // 2 = 1 to get to delimiter line + 1 more to go past it
90+
return sel.setBufferRange([[nextRow, 0], [nextRow, 0]])
91+
}
92+
93+
export function movePrev (ed) {
94+
if (ed == null) {
95+
ed = atom.workspace.getActiveTextEditor()
96+
}
97+
if (ed.getGrammar().scopeName.indexOf('source.weave') > -1) {
98+
return weaveMovePrev(ed)
99+
} else {
100+
return jlMovePrev(ed)
101+
}
102+
}
103+
104+
function jlMovePrev (ed) {
105+
var range = getRange(ed)
106+
var prevRow = range[0].row - 2 // 2 = 1 to get to delimiter line + 1 more to go past it
107+
var sel = ed.getSelections()[0]
108+
return sel.setBufferRange([[prevRow, 0], [prevRow, 0]])
109+
}

0 commit comments

Comments
 (0)