forked from mgumz/xliffer
/
merge.go
71 lines (56 loc) · 1.45 KB
/
merge.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// This file is part of *xliffer*
//
// Copyright (C) 2015, Travelping GmbH <copyright@travelping.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package main
import (
"encoding/xml"
"flag"
"fmt"
"io"
)
// mergeConv is converter which merges 2 .xliff files
type mergeConv struct {
aFile string
bFile string
}
func init() {
registeredConverters["merge"] = new(mergeConv)
}
func (m *mergeConv) Description() string {
return "Merge two XLIFF files"
}
func (m *mergeConv) ParseArgs(base string, args []string) error {
var fs = flag.NewFlagSet(base+" merge", flag.ExitOnError)
fs.StringVar(&m.aFile, "a", "", "a file")
fs.StringVar(&m.bFile, "b", "", "b file")
return fs.Parse(args)
}
func (m *mergeConv) Prepare() error {
return nil
}
func (m *mergeConv) Convert(w io.Writer) error {
var (
err error
aDoc *xliffDoc
bDoc *xliffDoc
out []byte
)
if aDoc, err = xliffFromFile(m.aFile); err != nil {
return fmt.Errorf("%s: %s", m.aFile, err)
}
if bDoc, err = xliffFromFile(m.bFile); err != nil {
return fmt.Errorf("%s: %s", m.bFile, err)
}
// TODO: check uniqueness of keys|translation unit ids?
aDoc.File = append(aDoc.File, bDoc.File...)
if out, err = xml.MarshalIndent(aDoc, "", " "); err != nil {
return err
}
io.WriteString(w, xml.Header)
w.Write(out)
return nil
}