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:
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')
844: language = string.replace(language,'-','_')
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: