Add handler for emacs org-mode files
This commit is contained in:
parent
901e1798db
commit
b2f0e2e657
84
src/filters/rclorgmode.py
Executable file
84
src/filters/rclorgmode.py
Executable file
@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
# Read an org-mode file, break it into "documents" along the separator lines
|
||||||
|
# and interface with recoll execm
|
||||||
|
|
||||||
|
import rclexecm
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
class OrgModeExtractor:
|
||||||
|
def __init__(self, em):
|
||||||
|
self.file = ""
|
||||||
|
self.contents = []
|
||||||
|
self.em = em
|
||||||
|
|
||||||
|
def extractone(self, index):
|
||||||
|
if index >= len(self.docs):
|
||||||
|
return(False, "", "", True)
|
||||||
|
docdata = self.docs[index]
|
||||||
|
#self.em.rclog(docdata)
|
||||||
|
|
||||||
|
iseof = rclexecm.RclExecM.noteof
|
||||||
|
if self.currentindex >= len(self.docs) -1:
|
||||||
|
iseof = rclexecm.RclExecM.eofnext
|
||||||
|
self.em.setmimetype("text/plain")
|
||||||
|
try:
|
||||||
|
self.em.setfield("title", docdata.splitlines()[0])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return (True, docdata, str(index), iseof)
|
||||||
|
|
||||||
|
###### File type handler api, used by rclexecm ---------->
|
||||||
|
def openfile(self, params):
|
||||||
|
self.file = params["filename"]
|
||||||
|
|
||||||
|
try:
|
||||||
|
data = open(self.file, "rb").read()
|
||||||
|
except Exception as e:
|
||||||
|
self.em.rclog("Openfile: open: %s" % str(e))
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.currentindex = -1
|
||||||
|
|
||||||
|
res = rb'''^\* '''
|
||||||
|
self.docs = re.compile(res, flags=re.MULTILINE).split(data)
|
||||||
|
self.docs = self.docs[1:]
|
||||||
|
#self.em.rclog("openfile: Entry count: %d" % len(self.docs))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def getipath(self, params):
|
||||||
|
try:
|
||||||
|
if params["ipath"] == b'':
|
||||||
|
index = 0
|
||||||
|
else:
|
||||||
|
index = int(params["ipath"])
|
||||||
|
except:
|
||||||
|
return (False, "", "", True)
|
||||||
|
return self.extractone(index)
|
||||||
|
|
||||||
|
def getnext(self, params):
|
||||||
|
|
||||||
|
if self.currentindex == -1:
|
||||||
|
# Return "self" doc
|
||||||
|
self.currentindex = 0
|
||||||
|
self.em.setmimetype(b'text/plain')
|
||||||
|
if len(self.docs) == 0:
|
||||||
|
eof = rclexecm.RclExecM.eofnext
|
||||||
|
else:
|
||||||
|
eof = rclexecm.RclExecM.noteof
|
||||||
|
return (True, "", "", eof)
|
||||||
|
|
||||||
|
if self.currentindex >= len(self.docs):
|
||||||
|
self.em.rclog("getnext: EOF hit")
|
||||||
|
return (False, "", "", rclexecm.RclExecM.eofnow)
|
||||||
|
else:
|
||||||
|
ret= self.extractone(self.currentindex)
|
||||||
|
self.currentindex += 1
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
proto = rclexecm.RclExecM()
|
||||||
|
extract = OrgModeExtractor(proto)
|
||||||
|
rclexecm.main(proto, extract)
|
||||||
@ -222,6 +222,7 @@ text/x-java = internal text/plain
|
|||||||
text/x-lua = internal
|
text/x-lua = internal
|
||||||
text/x-mail = internal
|
text/x-mail = internal
|
||||||
text/x-man = exec rclman
|
text/x-man = exec rclman
|
||||||
|
text/x-orgmode = execm rclorgmode.py
|
||||||
text/x-perl = internal text/plain
|
text/x-perl = internal text/plain
|
||||||
text/x-purple-html-log = internal text/html
|
text/x-purple-html-log = internal text/html
|
||||||
text/x-purple-log = exec rclpurple
|
text/x-purple-log = exec rclpurple
|
||||||
|
|||||||
@ -15,12 +15,13 @@
|
|||||||
.rst = text/plain
|
.rst = text/plain
|
||||||
.md = text/plain
|
.md = text/plain
|
||||||
.gv = text/plain
|
.gv = text/plain
|
||||||
.org = text/plain
|
|
||||||
.srt = text/x-srt
|
.srt = text/x-srt
|
||||||
.ini = text/x-ini
|
.ini = text/x-ini
|
||||||
.csv = text/x-csv
|
.csv = text/x-csv
|
||||||
.bib = text/x-bibtex
|
.bib = text/x-bibtex
|
||||||
|
|
||||||
|
.org = text/x-orgmode
|
||||||
|
|
||||||
# Source files.
|
# Source files.
|
||||||
# Defining them with specific types allows using a specific ext viewer (in
|
# Defining them with specific types allows using a specific ext viewer (in
|
||||||
# mimeview). You can in general use rcltext to wrap them in html for
|
# mimeview). You can in general use rcltext to wrap them in html for
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user