Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fs = require 'fs-plus'
- path = require 'path'
- {CompositeDisposable} = require 'atom'
- Utility = require './utility'
- module.exports =
- class Interlink
- constructor: ->
- Interlink.loadGrammarSync()
- @subscriptions = new CompositeDisposable
- @subscriptions.add atom.commands.add 'atom-workspace', 'nvatom:openInterlink': => Interlink.openInterlink()
- @subscriptions.add atom.workspace.observeTextEditors (editor) ->
- if Utility.isNote(editor.getPath())
- editor.setGrammar(atom.grammars.grammarForScopeName('text.md'))
- destroy: ->
- @subscriptions.dispose()
- @loadGrammarSync: ->
- unless atom.grammars.grammarForScopeName('text.md')
- grammarPath = path.join(atom.packages.resolvePackagePath('language-markdown'), 'grammars', 'language-markdown.json')
- atom.grammars.loadGrammarSync(grammarPath)
- @openInterlink: ->
- editor = atom.workspace.getActiveTextEditor()
- return unless editor?
- return unless Utility.isNote(editor.getPath())
- noteTitle = Interlink.getInterlinkUnderCursor(editor)
- return unless noteTitle?
- return unless noteTitle.length
- notePath = Utility.getNotePath(noteTitle)
- unless fs.existsSync(notePath)
- fs.writeFileSync(notePath, '')
- atom.workspace.open(notePath)
- @getInterlinkUnderCursor: (editor) ->
- cursorPosition = editor.getCursorBufferPosition()
- token = editor.tokenForBufferPosition(cursorPosition)
- return unless token
- return unless token.value
- return unless token.scopes.indexOf('markup.underline.link.interlink.md') > -1
- interlink = Utility.trim(token.value)
- return unless interlink.length
- return interlink
- # Second part
- 'name': 'nvAtom'
- 'scopeName': 'text.md.nvatom'
- 'patterns': [
- {
- 'include': 'text.md'
- }
- {
- 'match': '(?<!\\[)(\\[\\[)([^\\[\\]\|]+)(\\]\\])(?!\\])'
- 'name': 'interlink'
- 'captures':
- '1':
- 'name': 'punctuation.definition.begin.md'
- '2':
- 'name': 'markup.underline.link.interlink.md'
- '3':
- 'name': 'punctuation.definition.begin.md'
- }
- ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement