Begin work on autocomplete for includegraphics

This commit is contained in:
Shane Kilkelly 2017-07-27 11:57:01 +01:00
parent 8e55b77055
commit eaf9ae5b94
5 changed files with 71 additions and 5 deletions

View file

@ -11,6 +11,7 @@ define [
"ide/editor/directives/aceEditor/track-changes/TrackChangesManager"
"ide/editor/directives/aceEditor/labels/LabelsManager"
"ide/labels/services/labels"
"ide/graphics/services/graphics"
], (App, Ace, SearchBox, ModeList, UndoManager, AutoCompleteManager, SpellCheckManager, HighlightsManager, CursorPositionManager, TrackChangesManager, LabelsManager) ->
EditSession = ace.require('ace/edit_session').EditSession
ModeList = ace.require('ace/ext/modelist')
@ -33,9 +34,8 @@ define [
url = ace.config._moduleUrl(args...) + "?fingerprint=#{window.aceFingerprint}"
return url
App.directive "aceEditor", ($timeout, $compile, $rootScope, event_tracking, localStorage, $cacheFactory, labels) ->
App.directive "aceEditor", ($timeout, $compile, $rootScope, event_tracking, localStorage, $cacheFactory, labels, graphics) ->
monkeyPatchSearch($rootScope, $compile)
return {
scope: {
@ -102,7 +102,7 @@ define [
cursorPositionManager = new CursorPositionManager(scope, editor, element, localStorage)
trackChangesManager = new TrackChangesManager(scope, editor, element)
labelsManager = new LabelsManager(scope, editor, element, labels)
autoCompleteManager = new AutoCompleteManager(scope, editor, element, labelsManager)
autoCompleteManager = new AutoCompleteManager(scope, editor, element, labelsManager, graphics)
# Prevert Ctrl|Cmd-S from triggering save dialog

View file

@ -17,7 +17,7 @@ define [
commandFragment?.match(/\\(\w+)\{/)?[1]
class AutoCompleteManager
constructor: (@$scope, @editor, @element, @labelsManager) ->
constructor: (@$scope, @editor, @element, @labelsManager, @graphics) ->
@suggestionManager = new SuggestionManager()
@monkeyPatchAutocomplete()
@ -44,6 +44,36 @@ define [
SnippetCompleter = new SnippetManager()
Graphics = @graphics
GraphicsCompleter =
getCompletions: (editor, session, pos, prefix, callback) ->
upToCursorRange = new Range(pos.row, 0, pos.row, pos.column)
lineUpToCursor = editor.getSession().getTextRange(upToCursorRange)
commandFragment = getLastCommandFragment(lineUpToCursor)
if commandFragment
match = commandFragment.match(/^~?\\(includegraphics(?:\[.*])?){([^}]*, *)?(\w*)/)
if match
beyondCursorRange = new Range(pos.row, pos.column, pos.row, 99999)
lineBeyondCursor = editor.getSession().getTextRange(beyondCursorRange)
needsClosingBrace = !lineBeyondCursor.match(/^[^{]*}/)
commandName = match[1]
currentArg = match[3]
result = []
# result.push {
# caption: "\\#{commandName}{}",
# snippet: "\\#{commandName}{}",
# meta: "graphic",
# score: 60
# }
for graphic in Graphics.getGraphicsFiles()
result.push {
caption: "\\#{commandName}{#{graphic.path}#{if needsClosingBrace then '}' else ''}",
value: "\\#{commandName}{#{graphic.path}#{if needsClosingBrace then '}' else ''}",
meta: "graphic",
score: 50
}
callback null, result
labelsManager = @labelsManager
LabelsCompleter =
getCompletions: (editor, session, pos, prefix, callback) ->
@ -112,7 +142,13 @@ define [
else
callback null, result
@editor.completers = [@suggestionManager, SnippetCompleter, ReferencesCompleter, LabelsCompleter]
@editor.completers = [
@suggestionManager,
SnippetCompleter,
ReferencesCompleter,
LabelsCompleter,
GraphicsCompleter
]
disable: () ->
@editor.setOptions({

View file

@ -202,6 +202,8 @@ define [
childPath = path + "/" + entity.name
else
childPath = entity.name
# FIXME: this is a hack
entity.path = childPath
callback(entity, folder, childPath)
if entity.children?
@_forEachEntityInFolder(entity, childPath, callback)

View file

@ -0,0 +1,16 @@
define [
"base"
], (App) ->
App.factory 'graphics', (ide) ->
graphics = {
getGraphicsFiles: () ->
graphicsFiles = []
ide.fileTreeManager.forEachEntity (f) ->
if f?.name?.match?(/.*\.(png|jpg|jpeg)/)
graphicsFiles.push f
return graphicsFiles
}
return graphics

View file

@ -0,0 +1,12 @@
define [
"base"
], (App) ->
App.factory 'preamble', (ide) ->
Preamble = {
getPreambleText: () ->
}
return Preamble