6.23.10.2.21. Tangler Constructors

These are convenience functions that construct tanglers and associated sinks. The argument is a filename which is used to construct a sink to which the tangler is linked. The tanglers are linked to the current weaver.
Comienzo python section to interscript/frames/inputf.py[30 /41 ] Siguiente Previo Primero Ăšltimo
   808: #line 1103 "input_frame.ipk"
   809:   def data_output(self,f): return self.tangler(f,'data')
   810:   def c_output(self,f): return self.tangler(f,'c')
   811:   def cpp_output(self,f): return self.tangler(f,'cpp')
   812:   def python_output(self,f): return self.tangler(f,'python')
   813:   def perl_output(self,f): return self.tangler(f,'perl')
   814: 
   815:   # temporarily, we'll use a data tangler
   816:   def interscript_output(self,f):
   817:     filename = self.master.tangler_directory+f
   818:     sink = named_file_sink(self.pass_frame,filename,self.master.tangler_prefix)
   819:     return self.tangler(sink,'data')
   820: 
   821:   def tangler(self,device, language=deduce, *args, **kwds):
   822:     if has_protocol(device, 'filename'):
   823:       filename = self.master.tangler_directory+str(device)
   824:       sink = named_file_sink(
   825:         self.pass_frame,
   826:         filename,
   827:         self.master.tangler_prefix)
   828:     elif has_protocol(device, 'sink'):
   829:       sink = device
   830:     else: raise TypeError,'tangler device argument must be string or sink'
   831: 
   832:     if language is None: language = 'data'
   833:     if language is deduce:
   834:       try:
   835:         splitup = string.split(sink.name,'.')
   836:         if len(splitup)>1:
   837:           extension = splitup[-1]
   838:           language = extension_table [extension]
   839:         else: language = 'data'
   840:       except KeyError: language = 'data'
   841:       except IndexError: language = 'data'
   842:     language = string.lower(language)
   843:     language = string.replace(language,'++','pp') # C++ hack
   844:     language = string.replace(language,'-','_') # obj-C etc
   845:     cmd = 'from interscript.tanglers.'+language+' import '+language+'_tangler\n'
   846:     cmd = cmd + 't=apply('+language+'_tangler,(sink,self.current_weaver)+args,kwds)'
   847:     try:
   848:       exec cmd
   849:     except:
   850:       print 'Unable to load',language,'tangler: using data'
   851:       t=data_tangler(sink,self.current_weaver)
   852:     return t
   853: 
End python section to interscript/frames/inputf.py[30]