ported rclkar to python3
This commit is contained in:
parent
c68e6679ad
commit
fead7bb491
@ -43,6 +43,16 @@ htmltemplate = '''
|
|||||||
</html>
|
</html>
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
PY3 = sys.version > '3'
|
||||||
|
if PY3:
|
||||||
|
nlbytes = bytes('\n', encoding='iso-8859-1')
|
||||||
|
bsbytes = bytes('\\', encoding='iso-8859-1')
|
||||||
|
nullchar = 0
|
||||||
|
else:
|
||||||
|
nlbytes = '\n'
|
||||||
|
bsbytes = '\\'
|
||||||
|
nullchar = chr(0)
|
||||||
|
|
||||||
class KarTextExtractor:
|
class KarTextExtractor:
|
||||||
# Afaik, the only charset encodings with null bytes are variations on
|
# Afaik, the only charset encodings with null bytes are variations on
|
||||||
# utf-16 and utf-32 and iso relatives. A hopefully comprehensive
|
# utf-16 and utf-32 and iso relatives. A hopefully comprehensive
|
||||||
@ -91,11 +101,12 @@ class KarTextExtractor:
|
|||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
return data
|
return data
|
||||||
|
try:
|
||||||
firstnull = data.find(chr(0))
|
firstnull = data.index(nullchar)
|
||||||
if firstnull != -1:
|
|
||||||
self.hadnulls = True
|
self.hadnulls = True
|
||||||
data = data[0 : firstnull]
|
data = data[0 : firstnull]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
@ -117,8 +128,7 @@ class KarTextExtractor:
|
|||||||
self.em.rclog("Encode failed: " + str(err))
|
self.em.rclog("Encode failed: " + str(err))
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
data = self.em.htmlescape(data).replace("\n", "<br>\n")
|
data = self.em.htmlescape(data).decode('utf-8').replace('\n', '<br>\n')
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
@ -208,29 +218,29 @@ class KarTextExtractor:
|
|||||||
title = None
|
title = None
|
||||||
author = None
|
author = None
|
||||||
language = None
|
language = None
|
||||||
lyrics = ""
|
lyrics = b""
|
||||||
lyricsN = ""
|
lyricsN = b""
|
||||||
self.hadnulls = False
|
self.hadnulls = False
|
||||||
|
|
||||||
for event in stream.iterevents():
|
for event in stream.iterevents():
|
||||||
edata = ""
|
edata = b""
|
||||||
if isinstance(event, midi.TextMetaEvent):
|
if isinstance(event, midi.TextMetaEvent):
|
||||||
if not event.data:
|
if not event.data:
|
||||||
continue
|
continue
|
||||||
elif event.data[0] == '/' or event.data[0] == '\\':
|
elif event.data[0] == b'/'[0] or event.data[0] == bsbytes[0]:
|
||||||
edata = "\n" + event.data[1:]
|
edata = nlbytes + event.data[1:]
|
||||||
elif event.data[0] == '[' or event.data[0] == ']':
|
elif event.data[0] == b'['[0] or event.data[0] == b']'[0]:
|
||||||
edata = event.data[1:]
|
edata = event.data[1:]
|
||||||
elif event.data[0] == '@':
|
elif event.data[0] == b'@'[0]:
|
||||||
if len(event.data) == 1:
|
if len(event.data) == 1:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
if event.data[1] == 'I':
|
if event.data[1] == b'I'[0]:
|
||||||
edata = event.data[2:] + '\n'
|
edata = event.data[2:] + nlbytes
|
||||||
elif event.data[1] == 'L':
|
elif event.data[1] == b'L'[0]:
|
||||||
language = self.nulltrunc(event.data[2:])
|
language = self.nulltrunc(event.data[2:])
|
||||||
languageN = event.data[2:]
|
languageN = event.data[2:]
|
||||||
elif event.data[1] == 'T':
|
elif event.data[1] == b'T'[0]:
|
||||||
if title is None:
|
if title is None:
|
||||||
title = self.nulltrunc(event.data[2:])
|
title = self.nulltrunc(event.data[2:])
|
||||||
titleN = event.data[2:]
|
titleN = event.data[2:]
|
||||||
@ -241,13 +251,13 @@ class KarTextExtractor:
|
|||||||
edata = event.data
|
edata = event.data
|
||||||
elif isinstance(event, midi.LryricsEvent) or \
|
elif isinstance(event, midi.LryricsEvent) or \
|
||||||
isinstance(event, midi.TrackNameEvent):
|
isinstance(event, midi.TrackNameEvent):
|
||||||
space = ""
|
space = b""
|
||||||
if isinstance(event, midi.TrackNameEvent):
|
if isinstance(event, midi.TrackNameEvent):
|
||||||
nl = "\n"
|
nl = nlbytes
|
||||||
if not event.data:
|
if not event.data:
|
||||||
continue
|
continue
|
||||||
elif event.data[0] == '/' or event.data[0] == '\\':
|
elif event.data[0] == b'/'[0] or event.data[0] == bsbytes[0]:
|
||||||
edata = "\n" + event.data[1:] + nl
|
edata = nlbytes + event.data[1:] + nl
|
||||||
else:
|
else:
|
||||||
edata = event.data + nl
|
edata = event.data + nl
|
||||||
|
|
||||||
@ -295,7 +305,8 @@ class KarTextExtractor:
|
|||||||
title = self.reencode(title)
|
title = self.reencode(title)
|
||||||
author = self.reencode(author)
|
author = self.reencode(author)
|
||||||
lyrics = self.reencode(lyrics)
|
lyrics = self.reencode(lyrics)
|
||||||
|
language = self.reencode(language)
|
||||||
|
|
||||||
self.em.setmimetype("text/html")
|
self.em.setmimetype("text/html")
|
||||||
docdata = htmltemplate % (title, author, language, lyrics)
|
docdata = htmltemplate % (title, author, language, lyrics)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user