def __init__(self): self.template = os.path.join(os.path.dirname(__file__), 'spellchecker.html') self.NWORDS = None self.lang = None self.dictionaries = {} self.response = SilpaResponse(self.template)
def serve(self, environ, start_response): """ The method to serve all the requests. """ request = SilpaRequest(environ) request_uri = environ.get('PATH_INFO', '').lstrip('/') #JSON RPC requests if request_uri == "JSONRPC": data = request.get_body() start_response('200 OK', [('Content-Type', 'application/json')]) jsonreponse = self._jsonrpc_handler.handleRequest(data) return [jsonreponse.encode('utf-8')] #Check if the action is defined. if self._module_manager.find_module(request_uri): module_instance = self._module_manager.get_module_instance( request_uri) if (module_instance): module_instance.set_request(request) module_instance.set_start_response(start_response) #if this is a json request if request.get('json'): jsonreponse = module_instance.get_json_result() start_response('200 OK', [('Content-Type', 'application/json')]) return [jsonreponse.encode('utf-8')] response = module_instance.get_response() start_response(response.response_code, response.header) return [str(response.content).encode('utf-8')] response = SilpaResponse() if (request_uri == "index.html" or request_uri == ""): start_response('200 OK', [('Content-Type', 'text/html')]) response.content.content = get_index_page() else: response.content.content = 'Requested URL not found.' start_response('404 Not found', [('Content-Type', 'text/html')]) return [str(response.content).encode('utf-8')]
def __init__(self): self.template = os.path.join(os.path.dirname(__file__), "render.html") self.tmp_folder = os.path.join(os.path.dirname(__file__), "tmp") self.response = SilpaResponse(self.template)
class Render(SilpaModule): def __init__(self): self.template = os.path.join(os.path.dirname(__file__), "render.html") self.tmp_folder = os.path.join(os.path.dirname(__file__), "tmp") self.response = SilpaResponse(self.template) def set_request(self,request): self.request=request self.response.populate_form(self.request) self.file_type= self.request.get('type') self.wiki_url= self.request.get('wiki') self.text = self.request.get('text') self.font = self.request.get('font') self.font_size = self.request.get('font_size') self.color = self.request.get('color') self.file_type = self.request.get('file_type') def set_start_response(self,start_response): self.start_response = start_response def get_response(self): if self.text != None: if self.file_type==None: self.file_type = "png" if self.font==None: self.font = "Serif" if self.font_size==None: self.font_size = 12 if self.color==None: self.color = "Black" image_url = self.render_text(self.text, self.file_type, 0, 0 ,self.color, self.font, self.font_size) self.response.response_code = "303 see other" self.response.header = [('Location', image_url)] if self.wiki_url != None: pdf_url = self.wiki2pdf(self.wiki_url, self.font) self.response.response_code = "303 see other" self.response.header = [('Location', pdf_url)] return self.response @ServiceMethod def wiki2pdf(self, url, font='Serif'): m = hashlib.md5() m.update(url.encode("utf-8")) filename = m.hexdigest()[0:5]+".pdf" #if not os.path.exists(os.path.join(os.path.dirname(__file__), "tmp",filename)): parser = Wikiparser(url,filename, font) parser.parse() #else: # print ("File already exists.") return ("modules/render/tmp/"+filename) @ServiceMethod def wiki2book(self,inputfile="test.txt", font='Serif'): m = hashlib.md5() m.update(inputfile.encode("utf-8")) filename = m.hexdigest()[0:5]+".pdf" #if not os.path.exists(os.path.join(os.path.dirname(__file__), "tmp",filename)): parser = Wikiparser2(inputfile,filename, font) parser.parse() #else: # print ("File already exists.") return ("modules/render/tmp/"+filename) @ServiceMethod def render_text(self, text, file_type='png', width=0, height=0, color="Black", font='Serif', font_size=12): surface = None width=int(width) height=int(height) font_size=int(font_size) text= text.decode("utf-8") m = hashlib.md5() m.update(text.encode("utf-8")) filename = m.hexdigest()[0:5]+"."+file_type outputfile = os.path.join(self.tmp_folder, filename ) if file_type == 'png': surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(width), int(height)) if file_type == 'svg': surface = cairo.SVGSurface(outputfile,int(width),int(height)) if file_type == 'pdf': surface = cairo.PDFSurface(outputfile,int(width),int(height)) context = cairo.Context(surface) try: text = hyphenator.getInstance().hyphenate(text,u'\u00AD') except: print("error while hyphenating. Proceeding without Hyphenation") width = int(width) left_margin = 10 top_margin = 20 bottom_margin = 50 position_x = left_margin position_y = top_margin rgba = get_color(color) context.set_source_rgba (float(rgba.red),float(rgba.green),float(rgba.blue),float(rgba.alpha)) pc = pangocairo.CairoContext(context) paragraph_layout = pc.create_layout() paragraph_font_description = pango.FontDescription() paragraph_font_description.set_family(font) paragraph_font_description.set_size((int)(int(font_size) * pango.SCALE)) paragraph_layout.set_font_description(paragraph_font_description) if width>0: paragraph_layout.set_width((int)((width-2*left_margin) * pango.SCALE)) paragraph_layout.set_justify(True) paragraph_layout.set_text(text+"\n") context.move_to(position_x, position_y) pango_layout_iter = paragraph_layout.get_iter(); line_width = 0 while not pango_layout_iter.at_last_line(): first_line = True context.move_to(position_x, position_y) while not pango_layout_iter.at_last_line() : ink_rect, logical_rect = pango_layout_iter.get_line_extents() line = pango_layout_iter.get_line_readonly() has_next_line=pango_layout_iter.next_line() # Decrease paragraph spacing if ink_rect[2] == 0 : #It is para break dy = font_size / 2 position_y += dy if not first_line: self.context.rel_move_to(0, dy) else: xstart = 1.0 * logical_rect[0] / pango.SCALE context.rel_move_to(xstart, 0) if width >0 and height > 0 : pc.show_layout_line( line) line_height = (int)(logical_rect[3] / pango.SCALE) line_width = (int)(logical_rect[2] / pango.SCALE) context.rel_move_to(-xstart, line_height ) position_y += line_height first_line = False if width==0 or height==0: if width==0: width = line_width if height==0: height = position_y return self.render_text(text,file_type, width + 2.5*left_margin, height,color,font, font_size) if file_type == 'png': surface.write_to_png(str(outputfile)) else: context.show_page() return "modules/render/tmp/"+filename def get_module_name(self): return "Script Renderer" def get_info(self): return "Provides rendered images for Complex scripts"
def __init__(self): self.template = os.path.join(os.path.dirname(__file__), 'index.html') self.font = None #List of available fonts self.available_fonts=fonts.fonts self.response = SilpaResponse(self.template)
class Render(SilpaModule): def __init__(self): self.template = os.path.join(os.path.dirname(__file__), "render.html") self.tmp_folder = os.path.join(os.path.dirname(__file__), "tmp") self.response = SilpaResponse(self.template) def set_request(self,request): self.request=request self.response.populate_form(self.request) self.file_type= self.request.get('type') self.wiki_url= self.request.get('wiki') self.text = self.request.get('text') def set_start_response(self,start_response): self.start_response = start_response def get_response(self): if self.text != None: if self.file_type==None: self.file_type = "png" image_url = self.render_text(self.text, self.file_type) self.response.response_code = "303 see other" self.response.header = [('Location', image_url)] if self.wiki_url != None: pdf_url = self.wiki2pdf(self.wiki_url) self.response.response_code = "303 see other" self.response.header = [('Location', pdf_url)] return self.response @ServiceMethod def wiki2pdf(self, url): filename = str(uuid.uuid1())[0:5] +".pdf" parser = Wikiparser(url,filename) #"http://ml.wikipedia.org/wiki/Computer" parser.parse() return ("modules/render/tmp/"+filename) @ServiceMethod def render_text(self, text,file_type='png', width=0, height=0,color="Black"): surface = None width=int(width) height=int(height) text= text.decode("utf-8") filename = str(uuid.uuid1())[0:5]+"."+file_type outputfile = os.path.join(self.tmp_folder, filename ) if file_type == 'png': surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(width), int(height)) if file_type == 'svg': surface = cairo.SVGSurface(outputfile,int(width),int(height)) if file_type == 'pdf': surface = cairo.PDFSurface(outputfile,int(width),int(height)) context = cairo.Context(surface) text = hyphenator.getInstance().hyphenate(text,u'\u00AD') width = int(width) font_size = 10 left_margin = 10 top_margin = 10 position_x = left_margin position_y = top_margin rgba = get_color(color) context.set_source_rgba (rgba.red,rgba.green,rgba.blue,rgba.alpha) pc = pangocairo.CairoContext(context) paragraph_layout = pc.create_layout() paragraph_font_description = pango.FontDescription() paragraph_font_description.set_family("Serif") paragraph_font_description.set_size((int)(int(font_size) * pango.SCALE)) paragraph_layout.set_font_description(paragraph_font_description) if width>0: paragraph_layout.set_width((int)((width-2*left_margin) * pango.SCALE)) paragraph_layout.set_justify(True) paragraph_layout.set_text(text+"\n") context.move_to(position_x, position_y) pango_layout_iter = paragraph_layout.get_iter(); line_width = 0 while not pango_layout_iter.at_last_line(): first_line = True context.move_to(position_x, position_y) while not pango_layout_iter.at_last_line() : ink_rect, logical_rect = pango_layout_iter.get_line_extents() line = pango_layout_iter.get_line_readonly() has_next_line=pango_layout_iter.next_line() # Decrease paragraph spacing if ink_rect[2] == 0 : #It is para break dy = font_size / 2 position_y += dy if not first_line: self.context.rel_move_to(0, dy) else: xstart = 1.0 * logical_rect[0] / pango.SCALE context.rel_move_to(xstart, 0) if width >0 and height > 0 : pc.show_layout_line( line) line_height = (int)(logical_rect[3] / pango.SCALE) line_width = (int)(logical_rect[2] / pango.SCALE) context.rel_move_to(-xstart, line_height ) position_y += line_height first_line = False if width==0 or height==0: if width==0: width = line_width if height==0: height = position_y return self.render_text(text,file_type, width + 2.5*left_margin, height,color) if file_type == 'png': surface.write_to_png(outputfile) else: context.show_page() return "modules/render/tmp/"+filename def get_module_name(self): return "Script Renderer" def get_info(self): return "Provides rendered images for Complex scripts"
def __init__(self): self.template = os.path.join(os.path.dirname(__file__), "tts.html") self.response = SilpaResponse(self.template)
def __init__(self): self.dh = dhvani.dhvani_init() self.template = os.path.join(os.path.dirname(__file__), "tts.html") self.tmp_folder = os.path.join(os.path.dirname(__file__), "tmp") self.response = SilpaResponse(self.template)
class Render(SilpaModule): def __init__(self): self.template = os.path.join(os.path.dirname(__file__), "render.html") self.tmp_folder = os.path.join(os.path.dirname(__file__), "tmp") self.response = SilpaResponse(self.template) def set_request(self,request): self.request=request self.response.populate_form(self.request) self.file_type= self.request.get('type') self.wiki_url= self.request.get('wiki') self.text = self.request.get('text') def set_start_response(self,start_response): self.start_response = start_response def get_response(self): if self.text != None: if self.file_type==None: self.file_type = "png" image_url = self.render_text(self.text, self.file_type) self.response.response_code = "303 see other" self.response.header = [('Location', image_url)] if self.wiki_url != None: pdf_url = self.wiki2pdf(self.wiki_url) self.response.response_code = "303 see other" self.response.header = [('Location', pdf_url)] return self.response @ServiceMethod def wiki2pdf(self, url): filename = str(uuid.uuid1())[0:5] +".pdf" parser = Wikiparser(url,filename) #"http://ml.wikipedia.org/wiki/Computer" parser.parse() return ("modules/render/tmp/"+filename) @ServiceMethod def render_text(self, text,file_type='png', width=0, height=0,color="Black"): surface = None width=int(width) height=int(height) text= text.decode("utf-8") filename = str(uuid.uuid1())[0:5]+"."+file_type outputfile = os.path.join(self.tmp_folder, filename ) if file_type == 'png': surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(width), int(height)) if file_type == 'svg': surface = cairo.SVGSurface(outputfile,int(width),int(height)) if file_type == 'pdf': surface = cairo.PDFSurface(outputfile,int(width),int(height)) context = cairo.Context(surface) try: text = hyphenator.getInstance().hyphenate(text,u'\u00AD') except: print("error while hyphenating. Proceeding without Hyphenation") width = int(width) font_size = 10 left_margin = 10 top_margin = 10 position_x = left_margin position_y = top_margin rgba = get_color(color) context.set_source_rgba (rgba.red,rgba.green,rgba.blue,rgba.alpha) pc = pangocairo.CairoContext(context) paragraph_layout = pc.create_layout() paragraph_font_description = pango.FontDescription() paragraph_font_description.set_family("Serif") paragraph_font_description.set_size((int)(int(font_size) * pango.SCALE)) paragraph_layout.set_font_description(paragraph_font_description) if width>0: paragraph_layout.set_width((int)((width-2*left_margin) * pango.SCALE)) paragraph_layout.set_justify(True) paragraph_layout.set_text(text+"\n") context.move_to(position_x, position_y) pango_layout_iter = paragraph_layout.get_iter(); line_width = 0 while not pango_layout_iter.at_last_line(): first_line = True context.move_to(position_x, position_y) while not pango_layout_iter.at_last_line() : ink_rect, logical_rect = pango_layout_iter.get_line_extents() line = pango_layout_iter.get_line_readonly() has_next_line=pango_layout_iter.next_line() # Decrease paragraph spacing if ink_rect[2] == 0 : #It is para break dy = font_size / 2 position_y += dy if not first_line: self.context.rel_move_to(0, dy) else: xstart = 1.0 * logical_rect[0] / pango.SCALE context.rel_move_to(xstart, 0) if width >0 and height > 0 : pc.show_layout_line( line) line_height = (int)(logical_rect[3] / pango.SCALE) line_width = (int)(logical_rect[2] / pango.SCALE) context.rel_move_to(-xstart, line_height ) position_y += line_height first_line = False if width==0 or height==0: if width==0: width = line_width if height==0: height = position_y return self.render_text(text,file_type, width + 2.5*left_margin, height,color) if file_type == 'png': surface.write_to_png(outputfile) else: context.show_page() return "modules/render/tmp/"+filename def get_module_name(self): return "Script Renderer" def get_info(self): return "Provides rendered images for Complex scripts"