Esempio n. 1
0
def cambiar_version(cambio=1, mostrar=False):
    diff=utils.load_json(DIFF_JSON)
    window=sublime.active_window()
    view=window.active_view()
    filename=view.file_name()
    folder=get_folder(filename)
    actual=diff[view.file_name()]
    viejo=actual
    lista=os.listdir(folder)
    lista=sorted(lista)
    i=lista.index(actual)
    i+=cambio
    if i<0 or i==len(lista):return
    actual=lista[i]
    diff[filename]=actual
    utils.save_json(DIFF_JSON, diff)
    lines=view.lines(sublime.Region(0, view.size()))
    folder=get_folder(filename)
#    self.view.add_regions("diferentes", self.lista, "comment", "bookmark", sublime.DRAW_OUTLINED)
    if not mostrar:utils.set_text(open(get_folder(filename)+os.sep+actual).read())

    print("\n")
    with open(folder+os.sep+actual, 'r') as one:
        with open(folder+os.sep+viejo, 'r') as two:
            diff = difflib.unified_diff(one.readlines(),two.readlines())
            for line in diff:
                line=line.strip()
                if line.startswith("@@ -"):
#                    line=line[4, line.find(",")]
#                    print(line)
                    utils.go_line(int(line[4:line.find(",")])+3)
                if line.startswith("-") or line.startswith("+") or line.startswith("@@"):
                    print(line.strip()+":")
    print("\n")
    def run(self, edit):
        text=utils.get_text()
        lineas=text.splitlines()
        lineas=list(set(lineas))
        text=""
        for linea in lineas:text+=linea+"\n"
        utils.set_text(text)

                
Esempio n. 3
0
 def create_table(self, value):
     for i in range(1, value + 1):
         self.adc_ls[i - 1].grid(row=i,
                                 column=0,
                                 padx=10,
                                 pady=10,
                                 sticky='W')
         u.set_text(self.int_es[i - 1], '3').grid(row=i,
                                                  column=1,
                                                  padx=10,
                                                  pady=10)
         u.set_text(self.conv_es[i - 1], '0').grid(row=i,
                                                   column=2,
                                                   padx=10,
                                                   pady=10)
         setting = self.dac_settings[i - 1]
         settings = ['Tri', 'Saw', 'Const', 'Off']
         setting.set('Tri')
         for j, s in enumerate(settings):
             tk.Radiobutton(self.ch_frame,
                            text=s,
                            variable=setting,
                            value=s,
                            background=u.green_color).grid(row=i,
                                                           column=j + 3,
                                                           padx=5,
                                                           pady=10,
                                                           sticky='W')
         sample_by = self.sample_settings[i - 1]
         sample_by.set(1)
         tk.OptionMenu(self.ch_frame, sample_by, 1, 2, 4, 8).grid(row=i,
                                                                  column=7)
     tk.Button(self.ch_frame,
               text='Get Settings',
               background=u.green_color,
               command=self.check_values).grid(row=6,
                                               column=1,
                                               columnspan=2,
                                               pady=50,
                                               sticky='S')
     tk.Button(self.ch_frame,
               text='Apply Settings',
               background=u.green_color,
               command=self.set_values).grid(row=6,
                                             column=3,
                                             columnspan=2,
                                             pady=50,
                                             sticky='S')
     tk.Button(self.ch_frame,
               text='Cancel',
               background=u.green_color,
               command=self.check_values).grid(row=6,
                                               column=5,
                                               pady=50,
                                               sticky='S')
     self.ch_frame.pack(padx=20, pady=20)
Esempio n. 4
0
 def read_article(self):
     # 收藏
     while self.collect_counter:
         print('点击收藏')
         star = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ImageView[1]'
         self.collect_counter -= utils.click(self.driver, star)
         time.sleep(random.uniform(1, 2))
         # 可能会有”我知道了“的提示
         if utils.click(self.driver, 'cn.xuexi.android:id/btn_right_text'):
             time.sleep(random.uniform(1, 2))
         # 取消收藏
         print(f'取消收藏')
         utils.click(self.driver, star)
         time.sleep(random.uniform(1, 2))
     while self.share_counter:
         print('点击分享')
         utils.click(
             self.driver,
             '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ImageView[2]'
         )
         time.sleep(random.uniform(1, 2))
         # 分享到微信
         if utils.click(
                 self.driver,
                 '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.support.v4.view.ViewPager/android.widget.GridView/android.widget.RelativeLayout[1]/android.widget.ImageView'
         ):
             self.share_counter -= 1
         self.driver.back()
     while self.comment_counter:
         print('评论')
         if utils.click(
                 self.driver,
                 '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.TextView'
         ):
             # 发评论
             utils.set_text(
                 self.driver,
                 '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.EditText',
                 '中国加油!!')
             utils.click(
                 self.driver,
                 '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.TextView[2]'
             )
             # 删评论
             utils.click(
                 self.driver,
                 '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout[1]/android.view.ViewGroup/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[3]/android.widget.LinearLayout[3]/android.widget.TextView[3]'
             )
             self.comment_counter -= 1
             if self.comment_counter:
                 time.sleep(10)
     print('开始阅读')
     self.wait(read_time := random.uniform(115, 125))
     print(f'读了{round(read_time, 2)}秒', end='\r', flush=True)
     self.article_time -= read_time
     self.driver.back()
Esempio n. 5
0
 def fill_inj_frame(self):
     for r in range(0, 4):
         self.inj_labels[r].grid(row=r,
                                 column=0,
                                 padx=15,
                                 pady=10,
                                 sticky='E')
         u.set_text(self.inj_entries[r], '0').grid(row=r,
                                                   column=1,
                                                   padx=10,
                                                   pady=10,
                                                   sticky='W')
Esempio n. 6
0
 def test_frame_layout(self):
   tk.Button(self.test_frame, text='Enable BMW Test', background=u.green_color, command=self.start_test).grid(
       row=0, column=0, columnspan=2, padx=10, pady=10)
   tk.Button(self.test_frame, text='Toggle Kill Switch', background=u.green_color, command=self.set_kill).grid(
       row=0, column=2, columnspan=2, padx=10, pady=10)
   
   self.bm_test_index.set(0)
   self.bm_test_setting.set(self.button_titles[self.bm_test_index.get()])
   for r in range(0, 2):
     for c in range(0, 4):
       tk.Radiobutton(self.test_frame, text=self.button_titles[r*4+c], variable=self.bm_test_index,
           value=r*4+c, background=u.green_color).grid( row=r+1, column=c, padx=2, pady=2, sticky='W')
       u.set_text(self.test_e, '0').grid(row=3, column=0, padx=3, pady=3, sticky='W')
       tk.Label(self.test_frame, text='Set Point\n(mA or keV)', bg=u.green_color).grid(
           row=3, column=1, padx=5, pady=5, sticky='W')
Esempio n. 7
0
 def fill_rt_spec_frame(self):
   self.samples_rt_spec_l.grid(row=0, column=0, padx=10, pady=5, sticky='W')
   self.gate_rt_spec_l.grid(row=1, column=0, padx=10, pady=5, sticky='W')
   self.blocks_rt_spec_l.grid(row=2, column=0, padx=10, pady=5, sticky='W')
   u.set_text(self.samples_rt_spec_e, '0').grid(row=0, column=1)
   u.set_text(self.gate_rt_spec_e, '0').grid(row=1, column=1)
   u.set_text(self.blocks_rt_spec_e, '0').grid(row=2, column=1)
   tk.Button(self.rt_spec_frame, text='Get Settings', background=u.green_color, command=self.check_values_rt_spec).grid(
       row=3, column=0, pady=10)
   tk.Button(self.rt_spec_frame, text='Apply Settings', background=u.green_color, command=self.set_values_rt_spec).grid(
       row=3, column=1, pady=10)
Esempio n. 8
0
 def fill_ch_frame(self):
     self.samples_ch_l.grid(row=0, column=0, padx=10, pady=5, sticky='W')
     self.gate_ch_l.grid(row=1, column=0, padx=10, pady=5, sticky='W')
     self.blocks_ch_l.grid(row=2, column=0, padx=10, pady=5, sticky='W')
     u.set_text(self.samples_ch_e, '4141').grid(row=0, column=1)
     u.set_text(self.gate_ch_e, '10').grid(row=1, column=1)
     u.set_text(self.blocks_ch_e, '4').grid(row=2, column=1)
     tk.Button(self.ch_frame, text='Get Settings',
               background=u.green_color).grid(row=3, column=0, pady=10)
     tk.Button(self.ch_frame,
               text='Apply Settings',
               background=u.green_color).grid(row=3, column=1, pady=10)
Esempio n. 9
0
  def __init__(self, tab):
    self.ch_frame = tk.LabelFrame(tab, text='CH', background=u.green_color, width=500)
    self.ramp_delay_l = tk.Label(self.ch_frame, text='Ramp Delay', background=u.green_color)
    self.int_time_l = tk.Label(self.ch_frame, text='Integrate Time', background=u.green_color)
    self.oversamp_l = tk.Label(self.ch_frame, text='Oversampling', background=u.green_color)
    self.ramp_delay_e = tk.Entry(self.ch_frame)
    self.int_time_e = tk.Entry(self.ch_frame)
    self.oversamp_e = tk.Entry(self.ch_frame)

    self.ramp_delay_l.grid(row=0, column=0, padx=10, pady=5, sticky='W')
    self.int_time_l.grid(row=1, column=0, padx=10, pady=5, sticky='W')
    self.oversamp_l.grid(row=2, column=0, padx=10, pady=5, sticky='W')
    u.set_text(self.ramp_delay_e, '40').grid(row=0, column=1)
    u.set_text(self.int_time_e, '13200').grid(row=1, column=1)
    u.set_text(self.oversamp_e, '0').grid(row=2, column=1)
    tk.Button(self.ch_frame, text='Get Settings', background=u.green_color).grid(
        row=3, column=0, pady=10)
    tk.Button(self.ch_frame, text='Apply Settings', background=u.green_color).grid(
        row=3, column=1, pady=10)
    self.ch_frame.pack(padx=20, pady=10, anchor='w')
Esempio n. 10
0
    def update_translation(self, lang_code, data):
        print lang_code
        for (source_file, items) in data.iteritems():
            # Skip file if no items
            if len(items) == 0:
                continue

            print source_file
            (source_dir, source_fn) = os.path.split(source_file)
            (source_file_lang_code, 
             source_fn_wo_lang_code) = extract_lang_code(source_fn)
            
            target_file_name = self.target_dir + '/' + source_file
            if source_file_lang_code != lang_code:
                if source_file_lang_code is None:
                    if lang_code and lang_code != self.default_lang_code:
                        (fn, ext) = source_fn.rsplit('.')
                        target_file_name = self.target_dir + '/' + source_dir \
                            + '/' + fn + '.' + lang_code + '.' + ext
                    
            new_doc = False
            try:
                doc = minidom.parse(target_file_name)
            except (IOError, expat.ExpatError):
                impl = minidom.getDOMImplementation()
                doc = impl.createDocument(None, 'root', None)
                new_doc = True

            root_element = doc.documentElement
            if root_element.tagName != 'root':
                raise Exception('Invalid root element')

            no_changes = True

            for item in items:
                if not 'target' in item:
                    continue
                target_text = item['target']
                if not target_text:
                    continue
                if target_text == item['source']:
                    continue
                data_element, created = find_or_create_element(doc, root_element, 'data',
                                                               {'name': item['id']})
                value_element, created = find_or_create_element(doc, data_element, 'value')
                res = set_text(doc, value_element, target_text)
                if res:
                    no_changes = False

            if no_changes:
                continue

            # Make target directory
            try:
                os.makedirs(self.target_dir + '/' + source_dir)
            except OSError:
                pass

            # Create of overwrite xml file
            with io.open(target_file_name, 'w', newline='\r\n') as f:
                if new_doc:
                    PrettyPrint(doc, f)
                else:
                    f.write(u'\ufeff')
                    f.write(u'<?xml version="1.0" encoding="%s"?>\n' % doc.encoding)
                    Print(root_element, f)
Esempio n. 11
0
 def run(self, edit):
     utils.set_text(sublime.encode_value(sublime.decode_value(utils.get_text()), True))
Esempio n. 12
0
    def __init__(self, tab):
        self.ch_frame = tk.LabelFrame(tab,
                                      text='Counting House',
                                      background=u.green_color,
                                      width=500)
        self.inj_frame = tk.LabelFrame(tab,
                                       text='Injector',
                                       background=u.green_color,
                                       width=500)
        self.lft_spec_frame = tk.LabelFrame(tab,
                                            text='Left Spectrometer',
                                            background=u.green_color,
                                            width=500)
        self.rt_spec_frame = tk.LabelFrame(tab,
                                           text='Right Spectrometer',
                                           background=u.green_color,
                                           width=500)
        self.defaults_frame = tk.LabelFrame(tab,
                                            text='Default Controls',
                                            background=u.green_color,
                                            width=1000)

        self.ramp_delay_l = tk.Label(self.ch_frame,
                                     text='Ramp Delay',
                                     background=u.green_color)
        self.int_time_l = tk.Label(self.ch_frame,
                                   text='Integrate Time',
                                   background=u.green_color)
        self.oversamp_l = tk.Label(self.ch_frame,
                                   text='Oversampling',
                                   background=u.green_color)
        self.ramp_delay_e = tk.Entry(self.ch_frame)
        self.int_time_e = tk.Entry(self.ch_frame)
        self.oversamp_e = tk.Entry(self.ch_frame)

        self.ramp_delay_l.grid(row=0, column=0, padx=10, pady=5, sticky='W')
        self.int_time_l.grid(row=1, column=0, padx=10, pady=5, sticky='W')
        self.oversamp_l.grid(row=2, column=0, padx=10, pady=5, sticky='W')
        u.set_text(self.ramp_delay_e, '0').grid(row=0,
                                                column=1,
                                                padx=10,
                                                pady=5,
                                                sticky='W')
        u.set_text(self.int_time_e, '0').grid(row=1,
                                              column=1,
                                              padx=10,
                                              pady=5,
                                              sticky='W')
        u.set_text(self.oversamp_e, '0').grid(row=2,
                                              column=1,
                                              padx=10,
                                              pady=5,
                                              sticky='W')
        tk.Button(self.ch_frame,
                  text='Get Settings',
                  background=u.green_color,
                  command=self.check_values_ch).grid(row=3, column=0, pady=10)
        tk.Button(self.ch_frame,
                  text='Apply Settings',
                  background=u.green_color,
                  command=self.set_values_ch).grid(row=3, column=1, pady=10)
        self.ch_frame.grid(row=0, column=0, padx=20, pady=10)

        self.inj_ramp_delay_l = tk.Label(self.inj_frame,
                                         text='Ramp Delay',
                                         background=u.green_color)
        self.inj_int_time_l = tk.Label(self.inj_frame,
                                       text='Integrate Time',
                                       background=u.green_color)
        self.inj_oversamp_l = tk.Label(self.inj_frame,
                                       text='Oversampling',
                                       background=u.green_color)
        self.inj_ramp_delay_e = tk.Entry(self.inj_frame)
        self.inj_int_time_e = tk.Entry(self.inj_frame)
        self.inj_oversamp_e = tk.Entry(self.inj_frame)

        self.inj_ramp_delay_l.grid(row=0,
                                   column=0,
                                   padx=10,
                                   pady=5,
                                   sticky='W')
        self.inj_int_time_l.grid(row=1, column=0, padx=10, pady=5, sticky='W')
        self.inj_oversamp_l.grid(row=2, column=0, padx=10, pady=5, sticky='W')
        u.set_text(self.inj_ramp_delay_e, '0').grid(row=0,
                                                    column=1,
                                                    padx=10,
                                                    pady=5,
                                                    sticky='W')
        u.set_text(self.inj_int_time_e, '0').grid(row=1,
                                                  column=1,
                                                  padx=10,
                                                  pady=5,
                                                  sticky='W')
        u.set_text(self.inj_oversamp_e, '0').grid(row=2,
                                                  column=1,
                                                  padx=10,
                                                  pady=5,
                                                  sticky='W')
        tk.Button(self.inj_frame,
                  text='Get Settings',
                  background=u.green_color,
                  command=self.check_values_inj).grid(row=3, column=0, pady=10)
        tk.Button(self.inj_frame,
                  text='Apply Settings',
                  background=u.green_color,
                  command=self.set_values_inj).grid(row=3, column=1, pady=10)
        self.inj_frame.grid(row=0, column=1, padx=20, pady=10)

        self.lft_spec_ramp_delay_l = tk.Label(self.lft_spec_frame,
                                              text='Ramp Delay',
                                              background=u.green_color)
        self.lft_spec_int_time_l = tk.Label(self.lft_spec_frame,
                                            text='Integrate Time',
                                            background=u.green_color)
        self.lft_spec_oversamp_l = tk.Label(self.lft_spec_frame,
                                            text='Oversampling',
                                            background=u.green_color)
        self.lft_spec_ramp_delay_e = tk.Entry(self.lft_spec_frame)
        self.lft_spec_int_time_e = tk.Entry(self.lft_spec_frame)
        self.lft_spec_oversamp_e = tk.Entry(self.lft_spec_frame)

        self.lft_spec_ramp_delay_l.grid(row=0,
                                        column=0,
                                        padx=10,
                                        pady=5,
                                        sticky='W')
        self.lft_spec_int_time_l.grid(row=1,
                                      column=0,
                                      padx=10,
                                      pady=5,
                                      sticky='W')
        self.lft_spec_oversamp_l.grid(row=2,
                                      column=0,
                                      padx=10,
                                      pady=5,
                                      sticky='W')
        u.set_text(self.lft_spec_ramp_delay_e, '0').grid(row=0,
                                                         column=1,
                                                         padx=10,
                                                         pady=5,
                                                         sticky='W')
        u.set_text(self.lft_spec_int_time_e, '0').grid(row=1,
                                                       column=1,
                                                       padx=10,
                                                       pady=5,
                                                       sticky='W')
        u.set_text(self.lft_spec_oversamp_e, '0').grid(row=2,
                                                       column=1,
                                                       padx=10,
                                                       pady=5,
                                                       sticky='W')
        tk.Button(self.lft_spec_frame,
                  text='Get Settings',
                  background=u.green_color,
                  command=self.check_values_lft_spec).grid(row=3,
                                                           column=0,
                                                           pady=10)
        tk.Button(self.lft_spec_frame,
                  text='Apply Settings',
                  background=u.green_color,
                  command=self.set_values_lft_spec).grid(row=3,
                                                         column=1,
                                                         pady=10)
        self.lft_spec_frame.grid(row=1, column=0, padx=20, pady=10)

        self.rt_spec_ramp_delay_l = tk.Label(self.rt_spec_frame,
                                             text='Ramp Delay',
                                             background=u.green_color)
        self.rt_spec_int_time_l = tk.Label(self.rt_spec_frame,
                                           text='Integrate Time',
                                           background=u.green_color)
        self.rt_spec_oversamp_l = tk.Label(self.rt_spec_frame,
                                           text='Oversampling',
                                           background=u.green_color)
        self.rt_spec_ramp_delay_e = tk.Entry(self.rt_spec_frame)
        self.rt_spec_int_time_e = tk.Entry(self.rt_spec_frame)
        self.rt_spec_oversamp_e = tk.Entry(self.rt_spec_frame)

        self.rt_spec_ramp_delay_l.grid(row=0,
                                       column=0,
                                       padx=10,
                                       pady=5,
                                       sticky='W')
        self.rt_spec_int_time_l.grid(row=1,
                                     column=0,
                                     padx=10,
                                     pady=5,
                                     sticky='W')
        self.rt_spec_oversamp_l.grid(row=2,
                                     column=0,
                                     padx=10,
                                     pady=5,
                                     sticky='W')
        u.set_text(self.rt_spec_ramp_delay_e, '0').grid(row=0,
                                                        column=1,
                                                        padx=10,
                                                        pady=5,
                                                        sticky='W')
        u.set_text(self.rt_spec_int_time_e, '0').grid(row=1,
                                                      column=1,
                                                      padx=10,
                                                      pady=5,
                                                      sticky='W')
        u.set_text(self.rt_spec_oversamp_e, '0').grid(row=2,
                                                      column=1,
                                                      padx=10,
                                                      pady=5,
                                                      sticky='W')
        tk.Button(self.rt_spec_frame,
                  text='Get Settings',
                  background=u.green_color,
                  command=self.check_values_rt_spec).grid(row=3,
                                                          column=0,
                                                          pady=10)
        tk.Button(self.rt_spec_frame,
                  text='Apply Settings',
                  background=u.green_color,
                  command=self.set_values_rt_spec).grid(row=3,
                                                        column=1,
                                                        pady=10)
        self.rt_spec_frame.grid(row=1, column=1, padx=20, pady=10)

        tk.Button(self.defaults_frame,
                  text='Get All Values From Boards',
                  background=u.green_color,
                  command=self.check_all).grid(row=0,
                                               column=0,
                                               padx=10,
                                               pady=10)
        tk.Button(self.defaults_frame,
                  text='Set All Values to Boards',
                  background=u.green_color,
                  command=self.set_all).grid(row=0, column=1, padx=10, pady=10)
        tk.Button(self.defaults_frame,
                  text='Get Default Values From File',
                  background=u.green_color,
                  command=self.read_defaults).grid(row=1,
                                                   column=0,
                                                   padx=10,
                                                   pady=10)
        tk.Button(self.defaults_frame,
                  text='Write Values to Defaults File',
                  background=u.green_color,
                  command=self.set_defaults).grid(row=1,
                                                  column=1,
                                                  padx=10,
                                                  pady=10)

        self.defaults_frame.grid(row=2,
                                 column=0,
                                 padx=20,
                                 pady=10,
                                 columnspan=2)

        self.read_defaults()
        self.set_all()
        self.check_all()
Esempio n. 13
0
 def run(self, edit):
     texto=""
     for linea in reversed(utils.get_text().splitlines())  :
         texto+=linea+"\n"
     utils.set_text(texto)
Esempio n. 14
0
 def load(self, item):
     if item==-1:return
     key=self.keys[item]
     text=self.samples[key]
     utils.set_text(text)
Esempio n. 15
0
    def update_translation(self, lang_code, file, source_file, data):
        #print file
        #print lang_code
        if lang_code is None:
            target_lang_dir = self.target_dir + '/' + self.default_lang_code
        else:
            target_lang_dir = self.target_dir + '/' + lang_code
        
        (relative_dir, file_name) = os.path.split(file)
        
        #Make target directory
        try:
            os.makedirs(target_lang_dir + '/' + relative_dir)
        except OSError:
            pass

        target_file_name = target_lang_dir + '/' + file + '.xlf'
        print target_file_name
        
        new_doc = False
        try:
            doc = minidom.parse(target_file_name)
        except (IOError, expat.ExpatError):
            impl = minidom.getDOMImplementation()
            doc = impl.createDocument(None, 'xliff', None)
            new_doc = True

        xliff = doc.documentElement
        if xliff.tagName != 'xliff':
            raise Exception('Invalid root element')

        file_element, created = find_or_create_element(doc, xliff, 
                                                       'file', {'original': source_file})
        file_element.setAttribute('source-language', self.default_lang_code)
        file_element.setAttribute('target-language', 
                                  lang_code or self.default_lang_code)

        body_element, created = find_or_create_element(doc, file_element, 'body')

        ids = set([])
        for item in data:
            ids.add(item['name'])
            tu_element, created = find_or_create_element(doc, body_element, 
                                                         'trans-unit', {'id': item['name']})
            source_text = self.find_source_text(file, item['name'])
            source_element, created = find_or_create_element(doc, tu_element, 'source')
            source_element.setAttribute('xml:lang', self.default_lang_code)
            set_text(doc, source_element, source_text)
            target_element, created = find_or_create_element(doc, tu_element, 'target')
            target_element.setAttribute('xml:lang', 
                                        lang_code or self.default_lang_code)
            target_text = u''
            if 'value' in item:
                target_text = item['value']

            # try to suggest translation
            if not target_text:
                if source_text in self.suggestions and \
                        lang_code in self.suggestions[source_text]:
                    target_text = self.suggestions[source_text][lang_code]
                    print "Suggested: " + source_text + " -> " + target_text

            set_text(doc, target_element, target_text)

        # from original file
        source_data = self.translations[None][file]['data']
        for item in source_data:
            if item['name'] in ids:
                continue
            if not 'value' in item:
                continue
            tu_element, created = find_or_create_element(doc, body_element, 
                                                         'trans-unit', {'id': item['name']})
            source_element, created = find_or_create_element(doc, tu_element, 'source')
            source_element.setAttribute('xml:lang', self.default_lang_code)
            set_text(doc, source_element, item['value'])
            target_element, created = find_or_create_element(doc, tu_element, 'target')
            target_element.setAttribute('xml:lang', 
                                        lang_code or self.default_lang_code)

            # try to suggest translation
            if item['value'] in self.suggestions:
                source_text = item['value']
                if lang_code in self.suggestions[source_text]:
                    target_text = self.suggestions[source_text][lang_code]
                    set_text(doc, target_element, target_text)
                    print "Suggested: " + source_text + " -> " + target_text

        with open(target_file_name, 'w') as f:
            if new_doc:
                f.write(doc.toprettyxml().encode('utf-8'))
            else:
                f.write('<?xml version="1.0" encoding="%s"?>\n' % doc.encoding)
                f.write(xliff.toxml('utf-8'))
                f.write('\n')