From 42c4acd360da700f49bd557af1d913170b0ec95c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 26 Apr 2007 04:56:51 +0000 Subject: [PATCH] Various improvements to html2lrf. Added a demo for html2lrf --- .pydevproject | 1 - src/libprs500/__init__.py | 2 +- src/libprs500/lrf/__init__.py | 10 + src/libprs500/lrf/html/convert_from.py | 297 ++++++++++++++++++------- src/libprs500/lrf/html/demo/demo.html | 73 ++++++ src/libprs500/lrf/html/demo/large.jpg | Bin 0 -> 62809 bytes src/libprs500/lrf/html/demo/medium.jpg | Bin 0 -> 5152 bytes src/libprs500/lrf/html/demo/small.jpg | Bin 0 -> 2055 bytes src/libprs500/lrf/txt/convert_from.py | 3 +- upload | 7 + 10 files changed, 307 insertions(+), 86 deletions(-) create mode 100644 src/libprs500/lrf/html/demo/demo.html create mode 100644 src/libprs500/lrf/html/demo/large.jpg create mode 100644 src/libprs500/lrf/html/demo/medium.jpg create mode 100644 src/libprs500/lrf/html/demo/small.jpg diff --git a/.pydevproject b/.pydevproject index a8ae13b3c5..ce1227533e 100644 --- a/.pydevproject +++ b/.pydevproject @@ -5,6 +5,5 @@ python 2.5 /libprs500/src -/libprs500/libprs500.lrf.txt diff --git a/src/libprs500/__init__.py b/src/libprs500/__init__.py index f7e2463863..bf265bde36 100644 --- a/src/libprs500/__init__.py +++ b/src/libprs500/__init__.py @@ -33,7 +33,7 @@ You may have to adjust the GROUP and the location of the rules file to suit your distribution. """ -__version__ = "0.3.13" +__version__ = "0.3.14" __docformat__ = "epytext" __author__ = "Kovid Goyal " diff --git a/src/libprs500/lrf/__init__.py b/src/libprs500/lrf/__init__.py index df8894183f..127848161e 100644 --- a/src/libprs500/lrf/__init__.py +++ b/src/libprs500/lrf/__init__.py @@ -29,6 +29,16 @@ __author__ = "Kovid Goyal " class ConversionError(Exception): pass +def get_text(elem): + ''' Return the textual content of a pylrs element ''' + txt = '' + if hasattr(elem, 'text'): + txt += elem.text + if hasattr(elem, 'contents'): + for child in elem.contents: + txt += get_text(child) + return txt + def option_parser(usage): parser = OptionParser(usage=usage, version='libprs500 '+VERSION) parser.add_option('--header', action='store_true', default=False, dest='header', diff --git a/src/libprs500/lrf/html/convert_from.py b/src/libprs500/lrf/html/convert_from.py index 00f15b3133..7cf814c5ce 100644 --- a/src/libprs500/lrf/html/convert_from.py +++ b/src/libprs500/lrf/html/convert_from.py @@ -14,14 +14,13 @@ ## You should have received a copy of the GNU General Public License along ## with this program; if not, write to the Free Software Foundation, Inc., ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - """ Code to convert HTML ebooks into LRF ebooks. I am indebted to esperanc for the CSS->Xylog Style conversion routines and to Falstaff for pylrs. """ -import os, re, sys, shutil +import os, re, sys, shutil, traceback from htmlentitydefs import name2codepoint from urllib import urlopen from urlparse import urlparse @@ -31,9 +30,10 @@ from operator import itemgetter from libprs500.lrf.html.BeautifulSoup import BeautifulSoup, Comment, Tag, \ NavigableString, Declaration from libprs500.lrf.pylrs.pylrs import Paragraph, CR, Italic, ImageStream, TextBlock, \ - ImageBlock, JumpButton, CharButton, Page, Bold + ImageBlock, JumpButton, CharButton, \ + Page, Bold, Space, Plot, TextStyle, Image from libprs500.lrf.pylrs.pylrs import Span as _Span -from libprs500.lrf import ConversionError, option_parser, Book +from libprs500.lrf import ConversionError, option_parser, Book, get_text from libprs500 import extract def ImagePage(): @@ -155,6 +155,8 @@ class Span(_Span): ans = font_weight(val) if ans: t['fontweight'] = ans + if ans > 140: + t['wordspace'] = '50' elif key.startswith("margin"): if key == "margin": u = [] @@ -180,20 +182,13 @@ class Span(_Span): if u[0] is not None: t["topskip"] = str(u[0]) if u[1] is not None: - t["sidemargin"] = str(u[1]) - elif key == "text-align" or key == "align": - if val in ["right", "foot"]: - t["align"] = "foot" - elif val == "center": - t["align"] = "center" - else: - t["align"] = "head" + t["sidemargin"] = str(u[1]) else: print >>sys.stderr, 'Unhandled/malformed CSS key:', key, d[key] return t def __init__(self, ns, css, font_delta=0): - src = ns.string + src = ns.string if hasattr(ns, 'string') else str(ns) src = re.sub(r'\s{2,}', ' ', src) # Remove multiple spaces for pat, repl in Span.rules: src = pat.sub(repl, src) @@ -228,18 +223,43 @@ class HTMLConverter(object): i = {"font-style" :"italic"}, em = {"font-style" :"italic"}, small = {'font-size' :'small'}, + pre = {'font-family' :'monospace' }, center = {'text-align' : 'center'} ) processed_files = {} #: Files that have been processed - def __init__(self, book, path, font_delta=0, verbose=False, cover=None): - self.images = {} #: Images referenced in the HTML document - self.targets = {} #: elements - self.links = [] #: elements - self.files = {} #: links that point to other files + def __init__(self, book, path, width=575, height=747, + font_delta=0, verbose=False, cover=None): + ''' + Convert HTML file at C{path} and add it to C{book}. After creating + the object, you must call L{self.process_links} on it to create the links and + then L{self.writeto} to output the LRF/S file. + + @param book: The LRF book + @type book: L{libprs500.lrf.pylrs.Book} + @param path: path to the HTML file to process + @type path: C{str} + @param width: Width of the device on which the LRF file is to be read + @type width: C{int} + @param height: Height of the device on which the LRF file is to be read + @type height: C{int} + @param font_delta: The amount in pts by which all fonts should be changed + @type font_delta: C{int} + @param verbose: Whether processing should be verbose or not + @type verbose: C{bool} + @param cover: Path to an image to use as the cover of this book + @type cover: C{str} + ''' + self.page_width = width #: The width of the page + self.page_height = height #: The height of the page + self.images = {} #: Images referenced in the HTML document + self.targets = {} #: elements + self.links = [] #: elements + self.files = {} #: links that point to other files self.links_processed = False #: Whether links_processed has been called on this object self.font_delta = font_delta self.cover = cover + self.in_ol = False #: Flag indicating we're in an
    element self.book = book #: The Book object representing a BBeB book path = os.path.abspath(path) os.chdir(os.path.dirname(path)) @@ -301,17 +321,18 @@ class HTMLConverter(object): def merge_parent_css(prop, pcss): temp = {} for key in pcss.keys(): - if key.lower().startswith('font'): + chk = key.lower() + if chk.startswith('font') or chk == 'text-align': temp[key] = pcss[key] prop.update(temp) - prop = dict() + prop = dict() if tag.has_key("align"): prop["text-align"] = tag["align"] if self.css.has_key(tag.name): prop.update(self.css[tag.name]) if tag.has_key("class"): - cls = tag["class"].lower() + cls = tag["class"].lower() for classname in ["."+cls, tag.name+"."+cls]: if self.css.has_key(classname): prop.update(self.css[classname]) @@ -330,11 +351,11 @@ class HTMLConverter(object): self.top = self.current_block self.process_children(self.soup, {}) - if self.current_para: + if self.current_para and get_text(self.current_para).strip(): self.current_block.append(self.current_para) - if self.current_block: + if self.current_block and get_text(self.current_block).strip(): self.current_page.append(self.current_block) - if self.current_page: + if self.current_page and get_text(self.current_page).strip(): self.book.append(self.current_page) @@ -356,16 +377,17 @@ class HTMLConverter(object): cwd = os.getcwd() for link in self.links: purl = urlparse(link.tag['href']) - if purl[1]: # Not a local link + if purl[1]: # Not a link to a file on the local filesystem continue path, fragment = purl[2], purl[5] para, tag = link.para, link.tag if not path or os.path.basename(path) == self.file_name: if fragment in self.targets.keys(): - tb = self.targets[fragment] + tb = self.targets[fragment] jb = JumpButton(tb) self.book.append(jb) cb = CharButton(jb, text=self.get_text(tag)) + para.contents = [] para.append(cb) else: if not os.access(path, os.R_OK): @@ -373,12 +395,14 @@ class HTMLConverter(object): print "Skipping", link continue path = os.path.abspath(path) - if not path in HTMLConverter.processed_files.keys(): + if not path in HTMLConverter.processed_files.keys(): try: self.files[path] = HTMLConverter(self.book, path, \ font_delta=self.font_delta, verbose=self.verbose) HTMLConverter.processed_files[path] = self.files[path] - except: + except Exception, e: + print >>sys.stderr, 'Unable to process', path + traceback.print_exc() continue finally: os.chdir(cwd) @@ -389,10 +413,11 @@ class HTMLConverter(object): tb = conv.targets[fragment] else: tb = conv.top - jb = JumpButton(tb) + jb = JumpButton(tb) self.book.append(jb) cb = CharButton(jb, text=self.get_text(tag)) - para.append(cb) + para.contents = [] + para.append(cb) self.links_processed = True @@ -411,13 +436,13 @@ class HTMLConverter(object): End the current page, ensuring that any further content is displayed on a new page. """ - if self.current_para.contents: + if get_text(self.current_para).strip(): self.current_block.append(self.current_para) self.current_para = Paragraph() - if self.current_block.contents: + if get_text(self.current_block).strip(): self.current_page.append(self.current_block) self.current_block = TextBlock() - if self.current_page.contents: + if get_text(self.current_page).strip(): self.book.append(self.current_page) self.current_page = Page() @@ -442,12 +467,37 @@ class HTMLConverter(object): self.add_text(c, pcss) def add_text(self, tag, css): - try: - self.current_para.append(Span(tag, self.sanctify_css(css), \ - font_delta=self.font_delta)) - except ConversionError, err: - if self.verbose: - print >>sys.stderr, err + ''' + Add text to the current paragraph taking CSS into account. + @param tag: Either a BeautifulSoup tag or a string + @param css: + @type css: + ''' + src = tag.string if hasattr(tag, 'string') else str(tag) + if not src.strip(): + self.current_para.append(' ') + else: + align = 'head' + if css.has_key('text-align'): + val = css['text-align'] + if val in ["right", "foot"]: + align = "foot" + elif val == "center": + align = "center" + css.pop('text-align') + if align != self.current_block.textStyle.attrs['align']: + if get_text(self.current_para).strip(): + self.current_block.append(self.current_para) + if get_text(self.current_block).strip(): + self.current_page.append(self.current_block) + self.current_block = TextBlock(TextStyle(align=align)) + self.current_para = Paragraph() + try: + self.current_para.append(Span(src, self.sanctify_css(css), \ + font_delta=self.font_delta)) + except ConversionError, err: + if self.verbose: + print >>sys.stderr, err def sanctify_css(self, css): """ Make css safe for use in a SPAM Xylog tag """ @@ -461,22 +511,21 @@ class HTMLConverter(object): css.pop(key) return css + def end_current_para(self): + ''' + End current paragraph with a paragraph break after it. If the current + paragraph has no non whitespace text in it do nothing. + ''' + if not get_text(self.current_para).strip(): + return + if self.current_para.contents: + self.current_block.append(self.current_para) + self.current_para = Paragraph() + if self.current_block.contents and \ + not isinstance(self.current_block.contents[-1], CR): + self.current_block.append(CR()) def parse_tag(self, tag, parent_css): - - def process_text_tag(tag, tag_css): - if 'page-break-before' in tag_css.keys(): - if tag_css['page-break-before'].lower() != 'avoid': - self.end_page() - tag_css.pop('page-break-before') - end_page = False - if 'page-break-after' in tag_css.keys(): - end_page = True - tag_css.pop('page-break-after') - self.process_children(tag, tag_css) - if end_page: - self.end_page() - try: tagname = tag.name.lower() except AttributeError: @@ -488,17 +537,47 @@ class HTMLConverter(object): return except KeyError: pass + if 'page-break-before' in tag_css.keys(): + if tag_css['page-break-before'].lower() != 'avoid': + self.end_page() + tag_css.pop('page-break-before') + end_page = False + if 'page-break-after' in tag_css.keys() and \ + tag_css['page-break-after'].lower() != 'avoid': + end_page = True + tag_css.pop('page-break-after') + if tagname in ["title", "script", "meta", 'del']: pass elif tagname == 'a': if tag.has_key('name'): - self.current_block.append(self.current_para) - self.current_page.append(self.current_block) + if get_text(self.current_para).strip(): + self.current_block.append(self.current_para) + if get_text(self.current_block).strip(): + self.current_page.append(self.current_block) + previous = self.current_block tb = TextBlock() self.current_block = tb self.current_para = Paragraph() self.targets[tag['name']] = tb self.process_children(tag, tag_css) + if tb.parent == None: + if self.current_block == tb: + if get_text(self.current_para): + self.current_block.append(self.current_para) + self.current_para = Paragraph() + self.current_page.append(self.current_block) + self.current_block = TextBlock() + else: + found, marked = False, False + for item in self.current_page.contents: + if item == previous: + found = True + if found and isinstance(item, TextBlock): + self.targets[tag['name']] = item + marked = True + if not marked: + self.current_page.append(tb) elif tag.has_key('href'): purl = urlparse(tag['href']) path = purl[2] @@ -506,19 +585,18 @@ class HTMLConverter(object): ['png', 'jpg', 'bmp', 'jpeg']: self.add_image_page(path) else: - span = _Span() - self.current_para.append(span) - self.links.append(HTMLConverter.Link(span, tag)) + self.add_text('Link: '+tag['href'], tag_css) + self.links.append(HTMLConverter.Link(self.current_para.contents[-1], tag)) elif tagname == 'img': if tag.has_key('src') and os.access(tag['src'], os.R_OK): - width, height = 600, 800 + width, height = self.page_width, self.page_height try: try: - from PIL import Image + from PIL import Image as PILImage except: pass else: - im = Image.open(tag['src']) + im = PILImage.open(tag['src']) width, height = im.size if tag.has_key('width'): width = int(tag['width']) @@ -526,16 +604,26 @@ class HTMLConverter(object): height = int(tag['height']) except: pass - self.current_block.append(self.current_para) - self.current_page.append(self.current_block) - self.current_para = Paragraph() - self.current_block = TextBlock() path = os.path.abspath(tag['src']) if not self.images.has_key(path): self.images[path] = ImageStream(path) - im = ImageBlock(self.images[path], x1=width, y1=height, - xsize=width, ysize=height) - self.current_page.append(im) + if max(width, height) <= min(self.page_width, self.page_height)/5.: + im = Image(self.images[path], x0=0, y0=0, x1=width, y1=height,\ + xsize=width, ysize=height) + self.current_para.append(Plot(im, xsize=width*10, ysize=width*10)) + elif max(width, height) <= min(self.page_width, self.page_height)/2.: + self.end_current_para() + im = Image(self.images[path], x0=0, y0=0, x1=width, y1=height,\ + xsize=width, ysize=height) + self.current_para.append(Plot(im, xsize=width*10, ysize=width*10)) + else: + self.current_block.append(self.current_para) + self.current_page.append(self.current_block) + self.current_para = Paragraph() + self.current_block = TextBlock() + im = ImageBlock(self.images[path], x1=width, y1=height, + xsize=width, ysize=height) + self.current_page.append(im) else: print >>sys.stderr, "Failed to process", tag @@ -557,30 +645,72 @@ class HTMLConverter(object): f.close() except IOError: pass - elif tagname in ['p', 'div', 'ul', 'ol', 'tr', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']: + elif tagname == 'pre': + self.end_current_para() + src = ''.join([str(i) for i in tag.contents]) + lines = src.split('\n') + for line in lines: + try: + self.current_para.append(Span(line, tag_css)) + except ConversionError: + pass + self.current_para.CR() + elif tagname in ['ul', 'ol']: + self.in_ol = 1 if tagname == 'ol' else 0 + self.end_current_para() + self.process_children(tag, tag_css) + self.in_ol = 0 + self.end_current_para() + elif tagname == 'li': + prepend = str(self.in_ol)+'. ' if self.in_ol else u'\u2022' + ' ' + if get_text(self.current_para).strip(): + self.current_para.append(CR()) + self.current_block.append(self.current_para) + self.current_para = Paragraph() + self.current_para.append(Space(xsize=100)) + self.current_para.append(prepend) + self.process_children(tag, tag_css) + if self.in_ol: + self.in_ol += 1 + elif tagname in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']: + self.end_current_para() + if self.current_block.contents: + self.current_block.append(CR()) + self.process_children(tag, tag_css) + self.end_current_para() + self.current_block.append(CR()) + elif tagname in ['p', 'div']: # TODO: Implement ol - indent = tag_css.pop('text-indent', '') - if indent: + #indent = tag_css.pop('text-indent', '') + #if indent: # TODO: If indent is different from current textblock's parindent # start a new TextBlock - pass - self.current_para.CR() # Put a paragraph end - self.current_block.append(self.current_para) - self.current_para = Paragraph() - process_text_tag(tag, tag_css) + #pass + self.end_current_para() + self.process_children(tag, tag_css) + self.end_current_para() elif tagname in ['b', 'strong', 'i', 'em', 'span']: - process_text_tag(tag, tag_css) + self.process_children(tag, tag_css) elif tagname == 'font': if tag.has_key('face'): tag_css['font-family'] = tag['face'] - process_text_tag(tag, tag_css) - elif tagname == 'br': + self.process_children(tag, tag_css) + elif tagname in ['br', 'tr']: self.current_para.append(CR()) + self.process_children(tag, tag_css) elif tagname == 'hr': - self.current_para.append(CR()) - # TODO: Horizontal line? + if self.current_para.contents: + self.current_block.append(self.current_para) + self.current_para = Paragraph() + self.current_block.append(CR()) + self.current_page.append(self.current_block) + self.current_block = TextBlock() + self.current_page.RuledLine(linelength=self.page_width) else: - self.process_children(tag, tag_css) + self.process_children(tag, tag_css) + + if end_page: + self.end_page() def writeto(self, path, lrs=False): self.book.renderLrs(path) if lrs else self.book.renderLrf(path) @@ -632,6 +762,7 @@ def process_file(path, options): suffix = '.lrs' if options.lrs else '.lrf' name = os.path.splitext(os.path.basename(path))[0] + suffix oname = os.path.join(cwd,name) + oname = os.path.abspath(os.path.expanduser(oname)) conv.writeto(oname, lrs=options.lrs) print 'Output written to', oname finally: @@ -692,7 +823,7 @@ def console_query(dirpath, candidate, docs): def get_path(path, query=console_query): - path = os.path.abspath(path) + path = os.path.abspath(os.path.expanduser(path)) ext = os.path.splitext(path)[1][1:].lower() if ext in ['htm', 'html', 'xhtml']: return None, path diff --git a/src/libprs500/lrf/html/demo/demo.html b/src/libprs500/lrf/html/demo/demo.html new file mode 100644 index 0000000000..8cb52d943b --- /dev/null +++ b/src/libprs500/lrf/html/demo/demo.html @@ -0,0 +1,73 @@ + +

    Demo of html2lrf

    +

    + This file contains a demonstration of the capabilities of html2lrf, the HTML to LRF converter from libprs500. To obtain libprs500 visit https://libprs500.kovidgoyal.net +

    +

    Table of Contents

    + + +

    Lists

    +

    Unordered lists

    +
      +
    • Item 1
    • +
    • Item 2
    • +
    +

    +

    Ordered lists

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    +

    +
    +

    + Note that nested lists are not supported. +

    +

    +


    + Table of Contents +

    + +

    Text formatting

    +

    + A simple paragraph of formatted + text with a ruled line following it. +

    +
    +

    A + similar + paragraph, but now using + CSS + to perform the text formatting.

    +
    +
    A centered phrase
    + A right aligned phrase + A normal phrase +

    +


    + Table of Contents +

    + +

    Inline images

    +

    + Here I demonstrate the use of inline images in the midst of text. Here is a small image embedded in a sentence. Now we have a slightly larger image that is automatically put in its own block and finally we have a large image which is automatically placed on a page by itself and prevented from being autoscaled when the user changes from S to M to L. Try changing sizes and see how the different embedding styles behave. +

    +

    +


    + Table of Contents +

    + +

    Recursive link following

    + html2lrf follows links in HTML files that point to other files, recursively. Thus it can be used to convert a whole tree of HTML files into a single LRF file. +

    +


    + Table of Contents +

    + + diff --git a/src/libprs500/lrf/html/demo/large.jpg b/src/libprs500/lrf/html/demo/large.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db5eb2bf97fabeb93f2cb4d77bc3f56641abdfd3 GIT binary patch literal 62809 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 literal 0 HcmV?d00001 diff --git a/src/libprs500/lrf/html/demo/medium.jpg b/src/libprs500/lrf/html/demo/medium.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50867bc4f649a3e4ed7294776132c704205df6e1 GIT binary patch literal 5152 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 literal 0 HcmV?d00001 diff --git a/src/libprs500/lrf/html/demo/small.jpg b/src/libprs500/lrf/html/demo/small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6dae5fde42430e0b1638c20dccc7c31d0911051c GIT binary patch literal 2055 zcmb79dpy$%8~^Rj5;l{p*~EmEipohzZOFFFWy>v7){PN|xkROe6eTm)mXXWYh{`>V zh%!zQZG;k0Vx``W_asry&UruY`~UlWKF{}`@8$D6E5j=jfHr+UZ9f14fdHy%fR#7E z8pjy!NdRCl01^NIYN}OXtvmv7004%lz5xB_TouC+00gE61%XxSFWLYI0)c=ba3~bf! zac_P`fqFm?4KH=aH^VEVZc03$cWMt^b#XG@T67Dw5OKfwNsiyD%En$J7%vx{i5$3K#!T!8yeQIl5PpI-%1L@!gg%_nLy^B9s1!DV$pse&{y1l?@yAZwjH^*?TPp` z?(?dg2iv|BL#p)dk8P+pEk1nrkCNV&%BXOIq zM5edr3AKnOuu_oN9xnL{`du!c!l$jaw-gIMVn&{%blM;4x9hF_TyyT_*r6&pmQuaD zY($#0%%G&sUv-l$^{DT^Q102c?Cdt#cTFeM^}JA=JT810FRmv*%dhGB>(pgsUI*E7 z8Nu>R4V6qzcQUhSQ_(_zAM>o3N{sjQ*B*x+v!Ow+Yqsq<(tL|u7igVU-8qQZQ-2vL zc=l^7{i1z{AwXl^1+`Q4Z3d2R!8Jb@Om(TllJE=lv6^~;?OBgzoEfPT;g???NZS-+ zPCQPKdwsyl%DPK@B6ry~qTgQGK5e|KF8`9nYB4e0IqlSJJ)gff<-1tFdpg&ypdvC) z$$2(ar2a|9r4zsQsXsI~vuTGe&LD4iKL|XS6TmutQ;@pEY2ON&rRgv9lj&F9n?e^g zVrJT^vhVA8JkuNty@Hlxo}lnAGxg?-Yt|%t3(H$v($H!=4XQ)ZZ&MYX6L&98Cg@Wq2-gCrjh6Fl$2w)b_>u;yZ-iW?1g`+F zAU{k=#1Z*%#YQtRiyQ9{uHcZuxsayPDj#D$0=HD2(HDFTU>G$ z<2vkuPrd(hzyklc)`vA1JXm`0T~9S4ZzSn;^povraGEhlQ_pQ1=-mkFS$vixg+`v8xw$FX62jp($RwWJd}a z6)iBvAvDEL(+mIWD4Rp;wt#0g6_8<_-SP$Yje*esHoM#*bciNqu3NvU)jLZtd_2Z_ zE$s2XcJ>U%MGcuDhehLSY=%k?V;2vfxuBc+2mO4L8#~P{F^2WEM(L@D4bA8bqR;Ek z&*Wm}U4XwgUE%1A|ic6tU9X*#$WBI>~^g{^ibp1Gu( zd$L;But+DS2PaC+{L}kC6eR2U^s9^b&`40rM{TjSnI9ZhGfb_{a^uujG0z>l8rgFn}9AzeZi zEZq~lmGs!h<&;XKjG9SG3&&m-BnWfOzy(V~S{~|F_zTB2pMg&%)>rj(FA^;KvVLgI zuKOr&ZJ6L%PCb~3LapoWprDfsW9QVV?-N{H_2pl;M;~(vNygeUtVI$E9PHG+T7B>& z|Ft7%%zL}~xqlZt{B0wpKFoKZ?BH%1*L9-}lO?*94!KqkE@CivZXIO^r(F>M@livG zRm^gY`;U87(cjMoHg<502}bjU-xZ3%euvG*36jc4h*pa1{> literal 0 HcmV?d00001 diff --git a/src/libprs500/lrf/txt/convert_from.py b/src/libprs500/lrf/txt/convert_from.py index f098aac7a0..181a4b5126 100644 --- a/src/libprs500/lrf/txt/convert_from.py +++ b/src/libprs500/lrf/txt/convert_from.py @@ -40,7 +40,7 @@ def main(): if len(args) != 1: parser.print_help() sys.exit(1) - src = args[0] + src = os.path.abspath(os.path.expanduser(args[0])) if options.title == None: options.title = os.path.splitext(os.path.basename(src))[0] try: @@ -78,6 +78,7 @@ def convert_txt(path, options): buffer = '' basename = os.path.basename(path) oname = options.output + oname = os.path.abspath(os.path.expanduser(oname)) if not oname: oname = os.path.splitext(basename)[0]+'.lrf' try: diff --git a/upload b/upload index 12a5ea1796..86e36ea239 100644 --- a/upload +++ b/upload @@ -7,6 +7,13 @@ DOWNLOADS=$PREFIX/httpdocs/downloads DOCS=$PREFIX/httpdocs/apidocs exe=`cd dist && ls -1 libprs500-*.exe | tail -n1 && cd ..` + +echo "

    The HTML

    " > src/libprs500/lrf/html/demo/demo_ext.html
    +cat src/libprs500/lrf/html/demo/demo.html >> src/libprs500/lrf/html/demo/demo_ext.html
    +echo '
    ' >> src/libprs500/lrf/html/demo/demo_ext.html +html2lrf --title='Demonstration of html2lrf' --author='Kovid Goyal' --header --output=/tmp/html2lrf.lrf src/libprs500/lrf/html/demo/demo.html +scp /tmp/html2lrf.lrf castalia:$DOWNLOADS/ + ssh castalia rm -f $DOWNLOADS/libprs500\*.exe scp dist/$exe castalia:$DOWNLOADS/ ssh castalia chmod a+r $DOWNLOADS/\*