Fixed issue #3086: merge-doc.js: Merge document in word >=2010 leaves three open...
[TortoiseGit.git] / contrib / diff-scripts / merge-doc.js
blob144c99ce1c8e1aa2bdab248b47becca1241c5b0c
1 // extensions: doc;docx;docm\r
2 //\r
3 // TortoiseSVN Merge script for Word Doc files\r
4 //\r
5 // Copyright (C) 2004-2008, 2011 the TortoiseSVN team\r
6 // This file is distributed under the same license as TortoiseSVN\r
7 //\r
8 // Last commit by:\r
9 // $Author$\r
10 // $Date$\r
11 // $Rev$\r
12 //\r
13 // Authors:\r
14 // Dan Sheridan, 2008\r
15 // Davide Orlandi and Hans-Emil Skogh, 2005\r
16 // Richard Horton, 2011\r
17 // Paolo Nesti Poggi, 2017\r
18 //\r
20 var objArgs, num, sTheirDoc, sMyDoc, sBaseDoc, sMergedDoc,\r
21     objScript, word, baseDoc, myDoc, theirDoc, WSHShell;\r
23 // Microsoft Office versions for Microsoft Windows OS\r
24 var vOffice2000 = 9;\r
25 var vOffice2002 = 10;\r
26 //var vOffice2003 = 11;\r
27 var vOffice2007 = 12;\r
28 var vOffice2010 = 14;\r
29 // WdCompareTarget\r
30 var wdCompareTargetSelected = 0;\r
31 //var wdCompareTargetCurrent = 1;\r
32 var wdCompareTargetNew = 2;\r
33 var wdMergeTargetCurrent = 1;\r
35 objArgs = WScript.Arguments;\r
36 num = objArgs.length;\r
37 if (num < 4)\r
38 {\r
39     WScript.Echo("Usage: [CScript | WScript] merge-doc.js merged.doc theirs.doc mine.doc base.doc");\r
40     WScript.Quit(1);\r
41 }\r
43 sMergedDoc = objArgs(0);\r
44 sTheirDoc = objArgs(1);\r
45 sMyDoc = objArgs(2);\r
46 sBaseDoc = objArgs(3);\r
48 objScript = new ActiveXObject("Scripting.FileSystemObject");\r
50 if (!objScript.FileExists(sTheirDoc))\r
51 {\r
52     WScript.Echo("File " + sTheirDoc + " does not exist.  Cannot compare the documents.", vbExclamation, "File not found");\r
53     WScript.Quit(1);\r
54 }\r
56 if (!objScript.FileExists(sMergedDoc))\r
57 {\r
58     WScript.Echo("File " + sMergedDoc + " does not exist.  Cannot compare the documents.", vbExclamation, "File not found");\r
59     WScript.Quit(1);\r
60 }\r
62 objScript = null;\r
64 try\r
65 {\r
66     word = WScript.CreateObject("Word.Application");\r
67 }\r
68 catch (e)\r
69 {\r
70     WScript.Echo("You must have Microsoft Word installed to perform this operation.");\r
71     WScript.Quit(1);\r
72 }\r
74 word.visible = true;\r
76 // Anticipate creation of shell object\r
77 WSHShell = WScript.CreateObject("WScript.Shell");\r
79 // Show usage hint message\r
80 WSHShell.Popup("After you click 'OK' we'll create a merge document. Please wait.\nThen reject or accept changes and save the document renaming it to the original conflicting filename.", 0, "TortoiseGit Word Merge", 64);\r
82 // Open the base document\r
83 baseDoc = word.Documents.Open(sTheirDoc);\r
85 // Merge into the "My" document\r
86 if (parseInt(word.Version, 10) < vOffice2000)\r
87 {\r
88     baseDoc.Compare(sMergedDoc);\r
89 }\r
90 else if (parseInt(word.Version, 10) < vOffice2007)\r
91 {\r
92     baseDoc.Compare(sMergedDoc, "Comparison", wdCompareTargetNew, true, true);\r
93 }\r
94 else\r
95 {\r
96     // this implements the three-way comparison for versions >= 2007\r
97     theirDoc = baseDoc;\r
98     baseDoc = word.Documents.Open(sBaseDoc);\r
99     myDoc = word.Documents.Open(sMyDoc);\r
101     baseDoc.Activate(); //required otherwise it compares the wrong docs !!!\r
102     baseDoc.Compare(sTheirDoc, "theirs", wdCompareTargetSelected, true, true);\r
104     baseDoc.Activate(); //required otherwise it compares the wrong docs !!!\r
105     baseDoc.Compare(sMyDoc, "mine", wdCompareTargetSelected, true, true);\r
107     myDoc.Activate(); //required? just in case\r
108     myDoc.Merge(sTheirDoc, wdMergeTargetCurrent);\r
109     theirDoc.close();\r
111     // bring focus to the window, for accept/reject buttons to be active.\r
112     WSHShell.AppActivate(word.windows.Item(1).caption);\r
115 // Show the merge result\r
116 if (parseInt(word.Version, 10) < vOffice2007)\r
118     word.ActiveDocument.Windows(1).Visible = 1;\r
121 // Close the first document\r
122 if (parseInt(word.Version, 10) >= vOffice2002)\r
124     baseDoc.Close();\r