예제 #1
0
파일: data.py 프로젝트: rafaqz/citation.vim
 def exists(self):
     try:
         stats = os.stat(self.zotero_database)
     except Exception as e:
         raiseError(u"citation_vim.zotero.data.exists(): %s" % e)
         return False
     
     return True
예제 #2
0
 def __init__(self, context):
     self.context = context
     self.zotero_path = context['zotero_path']
     self.cache_path = context['cache_path']
     self.et_al_limit = context['et_al_limit']
     self.key_format = context['key_format']
     self.html_regex = re.compile('<[^<]+?>')
     if not check_path(os.path.join(self.zotero_path, u"zotero.sqlite")):
         raiseError(u"{} is not a valid zotero path".format(self.zotero_path))
예제 #3
0
 def get_parser(self):
     if self.context.mode == "bibtex":
         from citation_vim.bibtex.parser import bibtexParser
         parser = bibtexParser(self.context)
     elif self.context.mode == "zotero":
         from citation_vim.zotero.parser import zoteroParser
         parser = zoteroParser(self.context)
     else:
         raiseError(u"Citation.vim Error: g:citation_vim_mode must be either 'zotero' or 'bibtex'")
     return parser
예제 #4
0
 def get_mode(self, context):
     context['mode'] = vim.eval("g:citation_vim_mode")
     if context['mode'] == "bibtex":
         context = self.get_bibtex_context(context)
     elif context['mode'] == "zotero":
         context = self.get_zotero_context(context)
     else:
         raiseError(
             u"'g:citation_vim_mode' must be set to 'zotero' or 'bibtex'")
     return context
예제 #5
0
 def __init__(self, context):
     self.context = context
     self.zotero_path = context['zotero_path']
     self.cache_path = context['cache_path']
     self.et_al_limit = context['et_al_limit']
     self.key_format = context['key_format']
     self.clean_regex = re.compile(
         "[^A-Za-z0-9\ \!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+")
     self.html_regex = re.compile('<[^<]+?>')
     if not check_path(os.path.join(self.zotero_path, u"zotero.sqlite")):
         raiseError(u"{} is not a valid zotero path".format(
             self.zotero_path))
예제 #6
0
    def load(self):

        """
        Returns:
        A zotero database as an array of Items.
        """

        if not check_path(os.path.join(self.zotero_path, u"zotero.sqlite")):
            raiseError(u"Citation.vim Error:", self.zotero_path, u"is not a valid zotero path")
            return []

        zotero = zoteroData(self.context)
        zot_data = zotero.load()
        bb = betterBibtex(self.zotero_path, self.cache_path)
        citekeys = bb.load_citekeys()

        items = []
        for zot_id, zot_item in zot_data:
            item = Item()
            item.abstract    = zot_item.abstract
            item.author      = self.format_author(zot_item)
            item.collections = zot_item.collections
            item.date        = zot_item.date
            item.doi         = zot_item.doi
            item.file        = self.format_fulltext(zot_item)
            item.isbn        = zot_item.isbn
            item.publication = zot_item.publication
            item.key         = self.format_key(zot_item, citekeys)
            item.language    = zot_item.language
            item.issue       = zot_item.issue
            item.notes       = self.format_notes(zot_item)
            item.pages       = zot_item.pages
            item.publisher   = zot_item.publisher
            item.tags        = self.format_tags(zot_item)
            item.title       = zot_item.title
            item.type        = zot_item.type
            item.url         = zot_item.url
            item.volume      = zot_item.volume
            item.combine()
            items.append(item)
        return items
예제 #7
0
    def load(self):

        """
        Returns:
        A bibtex file as an array of Items.
        """

        items = []
        try:
            bib_data = self._read_file(self.bibtex_file)
        except Exception as e:
            raiseError(u"Failed to read {}".format(self.bibtex_file, '\r', u"Message: {}".format(str(e))))

        for key in bib_data.entries:
            bib_entry = bib_data.entries[key]

            item = Item()
            item.abstract  = self.get_field(bib_entry, "abstract")
            item.author    = self.format_author(bib_entry)
            item.collections  = []
            item.date      = self.get_field(bib_entry, "year")
            item.doi       = self.get_field(bib_entry, "doi")
            item.file      = self.format_file(bib_entry)
            item.isbn      = self.get_field(bib_entry, "isbn")
            item.publication = self.get_field(bib_entry, "journal")
            item.key       = key
            item.language  = self.get_field(bib_entry, "language")
            item.issue     = self.get_field(bib_entry, "number")
            item.notes     = self.get_field(bib_entry, "annote")
            item.pages     = self.get_field(bib_entry, "pages")
            item.publisher = self.get_field(bib_entry, "publisher")
            item.tags      = self.get_field(bib_entry, "keyword")
            item.title     = self.get_field(bib_entry, "title")
            item.type      = bib_entry.type
            item.url       = self.format_url(bib_entry)
            item.volume    = self.get_field(bib_entry, "volume")
            item.combine()
            items.append(item)
        return items
예제 #8
0
    def connect():
        import vim
        script_path = os.path.join(vim.eval('s:script_path'), '../../../python')
        sys.path.insert(0, script_path)
        from citation_vim.utils import raiseError

        context = Context()
        context.mode = vim.eval("g:citation_vim_mode")
        if context.mode == "bibtex":
            try:
                file = vim.eval("g:citation_vim_bibtex_file")
                context.bibtex_file  = os.path.expanduser(file)
            except:
                raiseError(u"Citation.vim Error: global variable 'g:citation_vim_bibtex_file' is not set")
        elif context.mode == "zotero":
            try:
                file = vim.eval("g:citation_vim_zotero_path")
                context.zotero_path = os.path.expanduser(file)
            except:
                raise(u"Citation.vim Error: global variable 'g:citation_vim_zotero_path' is not set")
        else:
            raiseError(u"Citation.vim Error: global variable 'g:citation_vim_mode' must be set to 'zotero' or 'bibtex'")

        try:
            context.cache_path = os.path.expanduser(vim.eval("g:citation_vim_cache_path"))
        except:
            raiseError(u"Citation.vim Error: global variable 'g:citation_vim_cache_path' is not set")

        context.collection   = vim.eval("g:citation_vim_collection")
        context.desc_format  = vim.eval("g:citation_vim_description_format")
        context.desc_fields  = vim.eval("g:citation_vim_description_fields")
        context.wrap_chars   = vim.eval("g:citation_vim_source_wrap")
        context.et_al_limit  = vim.eval("g:citation_vim_et_al_limit")
        context.source       = vim.eval("a:source")
        context.source_field = vim.eval("a:field")
        searchkeys = vim.eval("l:searchkeys")
        if len(searchkeys) > 0:
            context.searchkeys = searchkeys.split()
        else:
            context.searchkeys = []

        builder = Builder(context)
        return builder.build_list()
        return []
예제 #9
0
 def __init__(self, context):
     self.context = context
     if not check_path(self.context['bibtex_file']):
         raiseError(u"{} does not exist".format(
             self.context['bibtex_file']))
         return []
예제 #10
0
 def write_cache(self, itemlist):
     try:
         with open(self.cache_file, 'wb') as out_file:
             pickle.dump(itemlist, out_file)
     except Exception as e:
         raiseError(u"citation_vim.citation.write_cache(): %s" % e)
예제 #11
0
 def read_cache(self):
     try:
         with open(self.cache_file, 'rb') as in_file:
             return pickle.load(in_file)
     except Exception as e:
         raiseError(u"citation_vim.citation.write_cache(): %s" % e)
예제 #12
0
 def check_mode(self):
     if not self.context['mode'] in ["bibtex", "zotero"]:
         raiseError(u"g:citation_vim_mode must be either 'zotero' or 'bibtex', but is set to {}".format(self.context['mode']))