[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-3-0' - 2 commits - loleaflet/build loleaflet/main.js loleaflet/src loleaflet/unocommands.js scripts/unocommands.py

Jan Holesovsky kendy at collabora.com
Fri Dec 8 09:29:38 UTC 2017


 loleaflet/build/build.js                     |    1 
 loleaflet/main.js                            |    1 
 loleaflet/src/control/Control.ContextMenu.js |    3 
 loleaflet/src/control/Control.Menubar.js     |  249 +++++++++++++--------------
 loleaflet/unocommands.js                     |  173 ++++++++++++++++--
 scripts/unocommands.py                       |  136 ++++++++++++++
 6 files changed, 422 insertions(+), 141 deletions(-)

New commits:
commit 5b87f2fca5d6f84d0ac637021e87e2dc41dd13c7
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Wed Dec 6 20:20:46 2017 +0100

    l10n: Don't repeat the strings in the menu definition, use the uno commands.
    
    Change-Id: If8ccd753cd88056c64c10e3f9f7b951208fafdb8
    Reviewed-on: https://gerrit.libreoffice.org/45983
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Tested-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/build/build.js b/loleaflet/build/build.js
index 33f782dc..2c5baa0c 100644
--- a/loleaflet/build/build.js
+++ b/loleaflet/build/build.js
@@ -13,6 +13,7 @@ var JSBundleFiles = [
 	'main.js',
 	'dist/leaflet-src.js',
 	'dist/errormessages.js',
+	'unocommands.js',
 	'dist/plugins/draw-0.2.4/dist/leaflet.draw.js'
 ];
 
diff --git a/loleaflet/main.js b/loleaflet/main.js
index ca143017..4b0894ee 100644
--- a/loleaflet/main.js
+++ b/loleaflet/main.js
@@ -40,6 +40,7 @@ vex.defaultOptions.className = 'vex-theme-plain';
 global.vex = vex;
 
 var errorMessages = require('./dist/errormessages');
+require('./unocommands');
 
 function getParameterByName(name) {
     name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index 5a77aea5..07e69bdc 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -2,7 +2,7 @@
 * Control.Menubar
 */
 
-/* global $ _ map vex revHistoryEnabled closebutton L */
+/* global $ _ _UNO map vex revHistoryEnabled closebutton L */
 L.Control.Menubar = L.Control.extend({
 	// TODO: Some mechanism to stop the need to copy duplicate menus (eg. Help)
 	options: {
@@ -26,26 +26,26 @@ L.Control.Menubar = L.Control.extend({
 					{name: _('Microsoft Word (.docx)'), id: 'downloadas-docx', type: 'action'}]}]
 			},
 			{name: _('Edit'), type: 'menu', menu: [
-				{name: _('Undo'), type: 'unocommand', uno: '.uno:Undo'},
-				{name: _('Redo'), type: 'unocommand', uno: '.uno:Redo'},
+				{type: 'unocommand', uno: '.uno:Undo'},
+				{type: 'unocommand', uno: '.uno:Redo'},
 				{name: _('Repair'), id: 'repair',  type: 'action'},
 				{type: 'separator'},
-				{name: _('Cut'), type: 'unocommand', uno: '.uno:Cut'},
-				{name: _('Copy'), type: 'unocommand', uno: '.uno:Copy'},
-				{name: _('Paste'), type: 'unocommand', uno: '.uno:Paste'},
-				{name: _('Select all'), type: 'unocommand', uno: '.uno:SelectAll'},
+				{type: 'unocommand', uno: '.uno:Cut'},
+				{type: 'unocommand', uno: '.uno:Copy'},
+				{type: 'unocommand', uno: '.uno:Paste'},
+				{type: 'unocommand', uno: '.uno:SelectAll'},
 				{type: 'separator'},
 				{name: _('Find & Replace...'), uno: '.uno:SearchDialog', type: 'unocommand'},
 				{type: 'separator'},
 				{name: _('Track Changes'), type: 'menu', menu: [
-					{name: _('Record'), type: 'unocommand', uno: '.uno:TrackChanges'},
-					{name: _('Show'), type: 'unocommand', uno: '.uno:ShowTrackedChanges'},
+					{type: 'unocommand', uno: '.uno:TrackChanges'},
+					{type: 'unocommand', uno: '.uno:ShowTrackedChanges'},
 					{type: 'separator'},
 					{name: _('Manage Changes...'), uno: '.uno:AcceptTrackedChanges', type: 'unocommand'},
-					{name: _('Accept All'), type: 'unocommand', uno: '.uno:AcceptAllTrackedChanges'},
-					{name: _('Reject All'), type: 'unocommand', uno: '.uno:RejectAllTrackedChanges'},
-					{name: _('Previous'), type: 'unocommand', uno: '.uno:PreviousTrackedChange'},
-					{name: _('Next'), type: 'unocommand', uno: '.uno:NextTrackedChange'}
+					{type: 'unocommand', uno: '.uno:AcceptAllTrackedChanges'},
+					{type: 'unocommand', uno: '.uno:RejectAllTrackedChanges'},
+					{type: 'unocommand', uno: '.uno:PreviousTrackedChange'},
+					{type: 'unocommand', uno: '.uno:NextTrackedChange'}
 				]},
 				{name: _('Edit Style...'), uno: '.uno:EditStyle', type: 'unocommand'},
 			]},
@@ -56,106 +56,106 @@ L.Control.Menubar = L.Control.extend({
 				{name: _('Zoom out'), id: 'zoomout', type: 'action'},
 				{name: _('Reset zoom'), id: 'zoomreset', type: 'action'},
 				{type: 'separator'},
-				{name: _('Formatting Marks'), type: 'unocommand', uno: '.uno:ControlCodes'},
+				{type: 'unocommand', uno: '.uno:ControlCodes'},
 			]
 			},
 			{name: _('Insert'), type: 'menu', menu: [
 				{name: _('Image'), id: 'insertgraphic', type: 'action'},
 				{name: _('Comment...'), id: 'insertcomment', type: 'action'},
 				{type: 'separator'},
-				{name: _('Footnote'), type: 'unocommand', uno: '.uno:InsertFootnote'},
-				{name: _('Endnote'), type: 'unocommand', uno: '.uno:InsertEndnote'},
+				{type: 'unocommand', uno: '.uno:InsertFootnote'},
+				{type: 'unocommand', uno: '.uno:InsertEndnote'},
 				{type: 'separator'},
-				{name: _('Page break'), type: 'unocommand', uno: '.uno:InsertPageBreak'},
-				{name: _('Column break'), type: 'unocommand', uno: '.uno:InsertColumnBreak'},
+				{type: 'unocommand', uno: '.uno:InsertPageBreak'},
+				{type: 'unocommand', uno: '.uno:InsertColumnBreak'},
 				{type: 'separator'},
 				{name: _('Hyperlink...'), uno: '.uno:HyperlinkDialog', type: 'unocommand'},
 				{name: _('Special character...'), id: 'specialcharacter', type: 'action'},
 				{name: _('Formatting mark'), type: 'menu', menu: [
-					{name: _('Non-breaking space'), type: 'unocommand', uno: '.uno:InsertNonBreakingSpace'},
-					{name: _('Non-breaking hyphen'), type: 'unocommand', uno: '.uno:InsertHardHyphen'},
-					{name: _('Soft hyphen'), type: 'unocommand', uno: '.uno:InsertSoftHyphen'},
-					{name: _('No-width optional break'), type: 'unocommand', uno: '.uno:InsertZWSP'},
-					{name: _('No-width no break'), type: 'unocommand', uno: '.uno:InsertZWNBSP'},
-					{name: _('Left-to-right mark'), type: 'unocommand', uno: '.uno:InsertLRM'},
-					{name: _('Right-to-left mark'), type: 'unocommand', uno: '.uno:InsertRLM'}]},
+					{type: 'unocommand', uno: '.uno:InsertNonBreakingSpace'},
+					{type: 'unocommand', uno: '.uno:InsertHardHyphen'},
+					{type: 'unocommand', uno: '.uno:InsertSoftHyphen'},
+					{type: 'unocommand', uno: '.uno:InsertZWSP'},
+					{type: 'unocommand', uno: '.uno:InsertZWNBSP'},
+					{type: 'unocommand', uno: '.uno:InsertLRM'},
+					{type: 'unocommand', uno: '.uno:InsertRLM'}]},
 				{name: _('Index Entry...'), uno: '.uno:InsertIndexesEntry', type: 'unocommand'}
 			]
 			},
 			{name: _('Format'), type: 'menu', menu: [
 				{name: _('Text'), type: 'menu', menu: [
-					{name: _('Bold'), type: 'unocommand', uno: '.uno:Bold'},
-					{name: _('Italic'), type: 'unocommand', uno: '.uno:Italic'},
-					{name: _('Underline'), type: 'unocommand', uno: '.uno:Underline'},
-					{name: _('Double underline'), type: 'unocommand', uno: '.uno:UnderlineDouble'},
-					{name: _('Strikethrough'), type: 'unocommand', uno: '.uno:Strikeout'},
-					{name: _('Overline'), type: 'unocommand', uno: '.uno:Overline'},
+					{type: 'unocommand', uno: '.uno:Bold'},
+					{type: 'unocommand', uno: '.uno:Italic'},
+					{type: 'unocommand', uno: '.uno:Underline'},
+					{type: 'unocommand', uno: '.uno:UnderlineDouble'},
+					{type: 'unocommand', uno: '.uno:Strikeout'},
+					{type: 'unocommand', uno: '.uno:Overline'},
 					{type: 'separator'},
-					{name: _('Superscript'), type: 'unocommand', uno: '.uno:SuperScript'},
-					{name: _('Subscript'), type: 'unocommand', uno: '.uno:SubScript'},
-					{name: _('ꜱᴍᴀʟʟ ᴄᴀᴘꜱ'), type: 'unocommand', uno: '.uno:SmallCaps'},
+					{type: 'unocommand', uno: '.uno:SuperScript'},
+					{type: 'unocommand', uno: '.uno:SubScript'},
+					{type: 'unocommand', uno: '.uno:SmallCaps'},
 					{type: 'separator'},
-					{name: _('Shadow'), type: 'unocommand', uno: '.uno:Shadowed'},
-					{name: _('Outline'), type: 'unocommand', uno: '.uno:OutlineFont'},
+					{type: 'unocommand', uno: '.uno:Shadowed'},
+					{type: 'unocommand', uno: '.uno:OutlineFont'},
 					{type: 'separator'},
-					{name: _('Increase size'), type: 'unocommand', uno: '.uno:Grow'},
-					{name: _('Decrease size'), type: 'unocommand', uno: '.uno:Shrink'},
+					{type: 'unocommand', uno: '.uno:Grow'},
+					{type: 'unocommand', uno: '.uno:Shrink'},
 					{type: 'separator'},
-					{name: _('UPPERCASE'), type: 'unocommand', uno: '.uno:ChangeCaseToUpper'},
-					{name: _('lowercase'), type: 'unocommand', uno: '.uno:ChangeCaseToLower'},
-					{name: _('Cycle case'), type: 'unocommand', uno: '.uno:ChangeCaseRotateCase'},
+					{type: 'unocommand', uno: '.uno:ChangeCaseToUpper'},
+					{type: 'unocommand', uno: '.uno:ChangeCaseToLower'},
+					{type: 'unocommand', uno: '.uno:ChangeCaseRotateCase'},
 					{type: 'separator'},
-					{name: _('Sentence case'), type: 'unocommand', uno: '.uno:ChangeCaseToSentenceCase'},
-					{name: _('Capitalize Every Word'), type: 'unocommand', uno: '.uno:ChangeCaseToTitleCase'},
-					{name: _('tOGGLE cASE'), type: 'unocommand', uno: '.uno:ChangeCaseToToggleCase'}]},
+					{type: 'unocommand', uno: '.uno:ChangeCaseToSentenceCase'},
+					{type: 'unocommand', uno: '.uno:ChangeCaseToTitleCase'},
+					{type: 'unocommand', uno: '.uno:ChangeCaseToToggleCase'}]},
 				{name: _('Text orientation'), type: 'menu', menu: [
-					{name: _('Set paragraph left-to-right'), type: 'unocommand', uno: '.uno:ParaLeftToRight'},
-					{name: _('Set paragraph right-to-left'), type: 'unocommand', uno: '.uno:ParaRightToLeft'}]},
+					{type: 'unocommand', uno: '.uno:ParaLeftToRight'},
+					{type: 'unocommand', uno: '.uno:ParaRightToLeft'}]},
 				{name: _('Spacing'), type: 'menu', menu: [
-					{name: _('Line spacing: 1'), type: 'unocommand', uno: '.uno:SpacePara1'},
-					{name: _('Line spacing: 1.5'), type: 'unocommand', uno: '.uno:SpacePara15'},
-					{name: _('Line spacing: 2'), type: 'unocommand', uno: '.uno:SpacePara2'},
+					{type: 'unocommand', uno: '.uno:SpacePara1'},
+					{type: 'unocommand', uno: '.uno:SpacePara15'},
+					{type: 'unocommand', uno: '.uno:SpacePara2'},
 					{type: 'separator'},
-					{name: _('Increase paragraph spacing'), type: 'unocommand', uno: '.uno:ParaspaceIncrease'},
-					{name: _('Decrease paragraph spacing'), type: 'unocommand', uno: '.uno:ParaspaceDecrease'},
+					{type: 'unocommand', uno: '.uno:ParaspaceIncrease'},
+					{type: 'unocommand', uno: '.uno:ParaspaceDecrease'},
 					{type: 'separator'},
-					{name: _('Increase indent'), type: 'unocommand', uno: '.uno:IncrementIndent'},
-					{name: _('Decrease indent'), type: 'unocommand', uno: '.uno:DecrementIndent'}]},
+					{type: 'unocommand', uno: '.uno:IncrementIndent'},
+					{type: 'unocommand', uno: '.uno:DecrementIndent'}]},
 				{name: _('Align'), type: 'menu', menu: [
-					{name: _('Left'), type: 'unocommand', uno: '.uno:CommonAlignLeft'},
-					{name: _('Centered'), type: 'unocommand', uno: '.uno:CommonAlignHorizontalCenter'},
-					{name: _('Right'), type: 'unocommand', uno: '.uno:CommonAlignRight'},
-					{name: _('Justified'), type: 'unocommand', uno: '.uno:CommonAlignJustified'},
+					{type: 'unocommand', uno: '.uno:CommonAlignLeft'},
+					{type: 'unocommand', uno: '.uno:CommonAlignHorizontalCenter'},
+					{type: 'unocommand', uno: '.uno:CommonAlignRight'},
+					{type: 'unocommand', uno: '.uno:CommonAlignJustified'},
 					{type: 'separator'},
-					{name: _('Top'), type: 'unocommand', uno: '.uno:CommonAlignTop'},
-					{name: _('Center'), type: 'unocommand', uno: '.uno:CommonAlignVerticalcenter'},
-					{name: _('Bottom'), type: 'unocommand', uno: '.uno:CommonAlignBottom'}]},
+					{type: 'unocommand', uno: '.uno:CommonAlignTop'},
+					{type: 'unocommand', uno: '.uno:CommonAlignVerticalcenter'},
+					{type: 'unocommand', uno: '.uno:CommonAlignBottom'}]},
 				{name: _('Lists'), type: 'menu', menu: [
-					{name: _('Bullets on/off'), type: 'unocommand', uno: '.uno:DefaultBullet'},
-					{name: _('Numbering on/off'), type: 'unocommand', uno: '.uno:DefaultNumbering'},
+					{type: 'unocommand', uno: '.uno:DefaultBullet'},
+					{type: 'unocommand', uno: '.uno:DefaultNumbering'},
 					{type: 'separator'},
-					{name: _('Demote one level'), type: 'unocommand', uno: '.uno:DecrementLevel'},
-					{name: _('Promote one level'), type: 'unocommand', uno: '.uno:IncrementLevel'},
-					{name: _('Demote one level with subpoints'), type: 'unocommand', uno: '.uno:DecrementSublevels'},
-					{name: _('Promote one level with subpoints'), type: 'unocommand', uno: '.uno:IncrementSubLevels'},
+					{type: 'unocommand', uno: '.uno:DecrementLevel'},
+					{type: 'unocommand', uno: '.uno:IncrementLevel'},
+					{type: 'unocommand', uno: '.uno:DecrementSublevels'},
+					{type: 'unocommand', uno: '.uno:IncrementSubLevels'},
 					{type: 'separator'},
-					{name: _('Move down'), type: 'unocommand', uno: '.uno:MoveDown'},
-					{name: _('Move up'), type: 'unocommand', uno: '.uno:MoveUp'},
-					{name: _('Move down with subpoints'), type: 'unocommand', uno: '.uno:MoveDownSubItems'},
-					{name: _('Move up with subpoints'), type: 'unocommand', uno: '.uno:MoveUpSubItems'},
+					{type: 'unocommand', uno: '.uno:MoveDown'},
+					{type: 'unocommand', uno: '.uno:MoveUp'},
+					{type: 'unocommand', uno: '.uno:MoveDownSubItems'},
+					{type: 'unocommand', uno: '.uno:MoveUpSubItems'},
 					{type: 'separator'},
-					{name: _('Insert unnumbered entry'), type: 'unocommand', uno: '.uno:InsertNeutralParagraph'},
-					{name: _('Restart numbering'), type: 'unocommand', uno: '.uno:NumberingStart'},
+					{type: 'unocommand', uno: '.uno:InsertNeutralParagraph'},
+					{type: 'unocommand', uno: '.uno:NumberingStart'},
 					{type: 'separator'},
-					{name: _('To next paragraph in level'), type: 'unocommand', uno: '.uno:JumpDownThisLevel'},
-					{name: _('To previous paragraph in level'), type: 'unocommand', uno: '.uno:JumpUpThisLevel'},
-					{name: _('Continue previous numbering'), type: 'unocommand', uno: '.uno:ContinueNumbering'}]},
+					{type: 'unocommand', uno: '.uno:JumpDownThisLevel'},
+					{type: 'unocommand', uno: '.uno:JumpUpThisLevel'},
+					{type: 'unocommand', uno: '.uno:ContinueNumbering'}]},
 				{type: 'separator'},
 				{name: _('Character...'), uno: '.uno:FontDialog', type: 'unocommand'},
 				{name: _('Paragraph...'), uno: '.uno:ParagraphDialog', type: 'unocommand'},
 				{name: _('Bullets and Numbering...'), uno: '.uno:OutlineBullet', type: 'unocommand'},
 				{type: 'separator'},
-				{name: _('Clear direct formatting'), type: 'unocommand', uno: '.uno:ResetAttributes'},
+				{type: 'unocommand', uno: '.uno:ResetAttributes'},
 				{name: _('Page'), type: 'menu', menu: [
 					{name: 'A4, ' + _('Portrait'), type: 'action', id: 'a4portrait'},
 					{name: 'A4, ' + _('Landscape'), type: 'action', id: 'a4landscape'},
@@ -168,27 +168,27 @@ L.Control.Menubar = L.Control.extend({
 			},
 			{name: _('Tables'), type: 'menu', menu: [
 				{name: _('Insert'), type: 'menu', menu: [
-					{name: _('Rows before'), type: 'unocommand', uno: '.uno:InsertRowsBefore'},
-					{name: _('Rows after'), type: 'unocommand', uno: '.uno:InsertRowsAfter'},
+					{type: 'unocommand', uno: '.uno:InsertRowsBefore'},
+					{type: 'unocommand', uno: '.uno:InsertRowsAfter'},
 					{type: 'separator'},
-					{name: _('Columns left'), type: 'unocommand', uno: '.uno:InsertColumnsBefore'},
-					{name: _('Columns right'), type: 'unocommand', uno: '.uno:InsertColumnsAfter'}]},
+					{type: 'unocommand', uno: '.uno:InsertColumnsBefore'},
+					{type: 'unocommand', uno: '.uno:InsertColumnsAfter'}]},
 				{name: _('Delete'), type: 'menu', menu: [
-					{name: _('Rows'), type: 'unocommand', uno: '.uno:DeleteRows'},
-					{name: _('Columns'), type: 'unocommand', uno: '.uno:DeleteColumns'},
-					{name: _('Table'), type: 'unocommand', uno: '.uno:DeleteTable'}]},
+					{type: 'unocommand', uno: '.uno:DeleteRows'},
+					{type: 'unocommand', uno: '.uno:DeleteColumns'},
+					{type: 'unocommand', uno: '.uno:DeleteTable'}]},
 				{name: _('Select'), type: 'menu', menu: [
-					{name: _('Table'), type: 'unocommand', uno: '.uno:SelectTable'},
-					{name: _('Row'), type: 'unocommand', uno: '.uno:EntireRow'},
-					{name: _('Column'), type: 'unocommand', uno: '.uno:EntireColumn'},
-					{name: _('Cell'), type: 'unocommand', uno: '.uno:EntireCell'}]},
-				{name: _('Merge cells'), type: 'unocommand', uno: '.uno:MergeCells'},
+					{type: 'unocommand', uno: '.uno:SelectTable'},
+					{type: 'unocommand', uno: '.uno:EntireRow'},
+					{type: 'unocommand', uno: '.uno:EntireColumn'},
+					{type: 'unocommand', uno: '.uno:EntireCell'}]},
+				{type: 'unocommand', uno: '.uno:MergeCells'},
 				{type: 'separator'},
 				{name: _('Properties...'), uno: '.uno:TableDialog', type: 'unocommand'}
 			]},
 			{name: _('Tools'), id: 'tools', type: 'menu', menu: [
 				{name: _('Spelling...'), uno: '.uno:SpellingAndGrammarDialog', type: 'unocommand'},
-				{name: _('Automatic spell checking'), type: 'unocommand', uno: '.uno:SpellOnline'},
+				{type: 'unocommand', uno: '.uno:SpellOnline'},
 				{name: _('Language for selection'), type: 'menu', menu: [
 					{name: _('None (Do not check spelling)'), id: 'noneselection', type: 'unocommand', uno: '.uno:LanguageStatus?Language:string=Current_LANGUAGE_NONE'}]},
 				{name: _('Language for paragraph'), type: 'menu', menu: [
@@ -217,14 +217,14 @@ L.Control.Menubar = L.Control.extend({
 					{name: _('Microsoft Powerpoint (.pptx)'), id: 'downloadas-pptx', type: 'action'}]}]
 			},
 			{name: _('Edit'), type: 'menu', menu: [
-				{name: _('Undo'), type: 'unocommand', uno: '.uno:Undo'},
-				{name: _('Redo'), type: 'unocommand', uno: '.uno:Redo'},
+				{type: 'unocommand', uno: '.uno:Undo'},
+				{type: 'unocommand', uno: '.uno:Redo'},
 				{name: _('Repair'), id: 'repair',  type: 'action'},
 				{type: 'separator'},
-				{name: _('Cut'), type: 'unocommand', uno: '.uno:Cut'},
-				{name: _('Copy'), type: 'unocommand', uno: '.uno:Copy'},
-				{name: _('Paste'), type: 'unocommand', uno: '.uno:Paste'},
-				{name: _('Select all'), type: 'unocommand', uno: '.uno:SelectAll'},
+				{type: 'unocommand', uno: '.uno:Cut'},
+				{type: 'unocommand', uno: '.uno:Copy'},
+				{type: 'unocommand', uno: '.uno:Paste'},
+				{type: 'unocommand', uno: '.uno:SelectAll'},
 				{type: 'separator'},
 				{name: _('Find & Replace...'), uno: '.uno:SearchDialog', type: 'unocommand'}
 			]},
@@ -246,15 +246,15 @@ L.Control.Menubar = L.Control.extend({
 			]},
 			{name: _('Tables'), type: 'menu', menu: [
 				{name: _('Insert'), type: 'menu', menu: [
-					{name: _('Rows before'), type: 'unocommand', uno: '.uno:InsertRowsBefore'},
-					{name: _('Rows after'), type: 'unocommand', uno: '.uno:InsertRowsAfter'},
+					{type: 'unocommand', uno: '.uno:InsertRowsBefore'},
+					{type: 'unocommand', uno: '.uno:InsertRowsAfter'},
 					{type: 'separator'},
-					{name: _('Columns left'), type: 'unocommand', uno: '.uno:InsertColumnsBefore'},
-					{name: _('Columns right'), type: 'unocommand', uno: '.uno:InsertColumnsAfter'}]},
+					{type: 'unocommand', uno: '.uno:InsertColumnsBefore'},
+					{type: 'unocommand', uno: '.uno:InsertColumnsAfter'}]},
 				{name: _('Delete'), type: 'menu', menu: [
-					{name: _('Rows'), type: 'unocommand', uno: '.uno:DeleteRows'},
-					{name: _('Columns'), type: 'unocommand', uno: '.uno:DeleteColumns'}]},
-				{name: _('Merge cells'), type: 'unocommand', uno: '.uno:MergeCells'}]
+					{type: 'unocommand', uno: '.uno:DeleteRows'},
+					{type: 'unocommand', uno: '.uno:DeleteColumns'}]},
+				{type: 'unocommand', uno: '.uno:MergeCells'}]
 			},
 			{name: _('Slide'), type: 'menu', menu: [
 				{name: _('New slide'), id: 'insertpage', type: 'action'},
@@ -264,7 +264,7 @@ L.Control.Menubar = L.Control.extend({
 				{name: _('Fullscreen presentation'), id: 'fullscreen-presentation', type: 'action'}]
 			},
 			{name: _('Tools'), id: 'tools', type: 'menu', menu: [
-				{name: _('Automatic spell checking'), type: 'unocommand', uno: '.uno:SpellOnline'},
+				{type: 'unocommand', uno: '.uno:SpellOnline'},
 				{name: _('Language'), type: 'menu', menu: [
 					{name: _('None (Do not check spelling)'), id: 'nonelanguage', type: 'unocommand', uno: '.uno:LanguageStatus?Language:string=Default_LANGUAGE_NONE'}]}
 			]},
@@ -288,14 +288,14 @@ L.Control.Menubar = L.Control.extend({
 					{name: _('Microsoft Excel (.xlsx)'), id: 'downloadas-xlsx', type: 'action'}]}
 			]},
 			{name: _('Edit'), type: 'menu', menu: [
-				{name: _('Undo'), type: 'unocommand', uno: '.uno:Undo'},
-				{name: _('Redo'), type: 'unocommand', uno: '.uno:Redo'},
+				{type: 'unocommand', uno: '.uno:Undo'},
+				{type: 'unocommand', uno: '.uno:Redo'},
 				{name: _('Repair'), id: 'repair',  type: 'action'},
 				{type: 'separator'},
-				{name: _('Cut'), type: 'unocommand', uno: '.uno:Cut'},
-				{name: _('Copy'), type: 'unocommand', uno: '.uno:Copy'},
-				{name: _('Paste'), type: 'unocommand', uno: '.uno:Paste'},
-				{name: _('Select all'), type: 'unocommand', uno: '.uno:SelectAll'},
+				{type: 'unocommand', uno: '.uno:Cut'},
+				{type: 'unocommand', uno: '.uno:Copy'},
+				{type: 'unocommand', uno: '.uno:Paste'},
+				{type: 'unocommand', uno: '.uno:SelectAll'},
 				{type: 'separator'},
 				{name: _('Find & Replace...'), uno: '.uno:SearchDialog', type: 'unocommand'}
 			]},
@@ -306,33 +306,33 @@ L.Control.Menubar = L.Control.extend({
 				{name: _('Image'), id: 'insertgraphic', type: 'action'},
 				{name: _('Comment...'), id: 'insertcomment', type: 'action'},
 				{type: 'separator'},
-				{name: _('Row'), type: 'unocommand', uno: '.uno:InsertRows'},
-				{name: _('Column'), type: 'unocommand', uno: '.uno:InsertColumns'},
+				{type: 'unocommand', uno: '.uno:InsertRows'},
+				{type: 'unocommand', uno: '.uno:InsertColumns'},
 				{type: 'separator'},
 				{name: _('Special character...'), id: 'specialcharacter', type: 'action'}
 			]},
 			{name: _('Format'), type: 'menu', menu: [
-				{name: _('Clear direct formatting'), type: 'unocommand', uno: '.uno:ResetAttributes'},
+				{type: 'unocommand', uno: '.uno:ResetAttributes'},
 				{name: _('Cells...'), type: 'unocommand', uno: '.uno:FormatCellDialog'}
 			]},
 			{name: _('Sheet'), type: 'menu', menu: [
-				{name: _('Insert row'), type: 'unocommand', uno: '.uno:InsertRows'},
-				{name: _('Insert column'), type: 'unocommand', uno: '.uno:InsertColumns'},
+				{type: 'unocommand', uno: '.uno:InsertRows'},
+				{type: 'unocommand', uno: '.uno:InsertColumns'},
 				{type: 'separator'},
-				{name: _('Delete row'), type: 'unocommand', uno: '.uno:DeleteRows'},
-				{name: _('Delete column'), type: 'unocommand', uno: '.uno:DeleteColumns'}
+				{type: 'unocommand', uno: '.uno:DeleteRows'},
+				{type: 'unocommand', uno: '.uno:DeleteColumns'}
 			]},
 			{name: _('Data'), type: 'menu', menu: [
-				{name: _('Group'), type: 'unocommand', uno: '.uno:Group'},
-				{name: _('Ungroup'), type: 'unocommand', uno: '.uno:Ungroup'},
+				{type: 'unocommand', uno: '.uno:Group'},
+				{type: 'unocommand', uno: '.uno:Ungroup'},
 				{type: 'separator'},
-				{name: _('Remove Outline'), type: 'unocommand', uno: '.uno:ClearOutline'},
+				{type: 'unocommand', uno: '.uno:ClearOutline'},
 				{type: 'separator'},
-				{name: _('Show Details'), type: 'unocommand', uno: '.uno:ShowDetail'},
-				{name: _('Hide Details'), type: 'unocommand', uno: '.uno:HideDetail'}
+				{type: 'unocommand', uno: '.uno:ShowDetail'},
+				{type: 'unocommand', uno: '.uno:HideDetail'}
 			]},
 			{name: _('Tools'), id: 'tools', type: 'menu', menu: [
-				{name: _('Automatic spell checking'), type: 'unocommand', uno: '.uno:SpellOnline'},
+				{type: 'unocommand', uno: '.uno:SpellOnline'},
 				{name: _('Language'), type: 'menu', menu: [
 					{name: _('None (Do not check spelling)'), id: 'nonelanguage', type: 'unocommand', uno: '.uno:LanguageStatus?Language:string=Default_LANGUAGE_NONE'}]}
 			]},
@@ -506,6 +506,11 @@ L.Control.Menubar = L.Control.extend({
 			if (map._permission === 'edit') {
 				if (type === 'unocommand') { // enable all depending on stored commandStates
 					var unoCommand = $(aItem).data('uno');
+					if ($(aItem).data('name') === undefined) {
+						var text = _UNO(unoCommand);
+						$(aItem).data('name', text);
+						aItem.innerHTML = text;
+					}
 					var itemState = map['stateChangeHandler'].getItemValue(unoCommand);
 					if (itemState === 'disabled') {
 						$(aItem).addClass('disabled');
diff --git a/loleaflet/unocommands.js b/loleaflet/unocommands.js
index 4f9e0053..eb81e92a 100644
--- a/loleaflet/unocommands.js
+++ b/loleaflet/unocommands.js
@@ -1,19 +1,154 @@
-var CopyHyperlinkLocation = _('Copy Hyperlink');
-var DecrementLevel = _('Down One Level');
-var IncrementLevel = _('Up One Level');
-var EditAnnotation = _('Edit Comment');
-var InsertAnnotation = _('Insert Comment');
-var Merge = _('Merge');
-var MergeCells = _('Merge Cells...');
-var ObjectBackOne = _('Bring Forward');
-var ObjectForwardOne = _('Send Backward');
-var PasteSpecial = _('Paste Special');
-var PasteUnformatted = _('Unformatted Text');
-var NoWrap = _('No Wrap');
-var WrapBefore = _('Wrap Before');
-var WrapAfter = _('Wrap After');
-var EnableContour = _('Enable Contour');
-var UpdateTOC = _('Update Index or Table of Contents');
-var DeleteTOC = _('Delete Index or Table of Contents');
-var ReplyToComment = _('Reply');
-var RecalcPivotTable = _('Refresh');
+// Don't modify, generated using unocommands.py
+
+var unoCommandsArray = {
+    AcceptAllTrackedChanges: _('Accept All'),
+    AcceptTrackedChanges: _('~Manage...'),
+    AnchorMenu: _('Change Anchor'),
+    ArrangeFrameMenu: _('Arrange'),
+    ArrangeMenu: _('A~rrange'),
+    Bold: _('Bold'),
+    BringToFront: _('~Bring to Front'),
+    ChangeCaseRotateCase: _('Cycle Case (Title Case, UPPERCASE, lowercase)'),
+    ChangeCaseToLower: _('~lowercase'),
+    ChangeCaseToSentenceCase: _('~Sentence case'),
+    ChangeCaseToTitleCase: _('~Capitalize Every Word'),
+    ChangeCaseToToggleCase: _('~tOGGLE cASE'),
+    ChangeCaseToUpper: _('~UPPERCASE'),
+    ClearOutline: _('~Remove Outline'),
+    CommonAlignBottom: _('Bottom'),
+    CommonAlignHorizontalCenter: _('Centered'),
+    CommonAlignJustified: _('Justified'),
+    CommonAlignLeft: _('Left'),
+    CommonAlignRight: _('Right'),
+    CommonAlignTop: _('Top'),
+    ContinueNumbering: _('Continue previous numbering'),
+    ControlCodes: _('Formatting Marks'),
+    Copy: _('~Copy'),
+    CopyHyperlinkLocation: _('Copy Link Location'),
+    Cut: _('~Cut'),
+    DecrementIndent: _('Decrease'),
+    DecrementLevel: _('Demote One Level'),
+    DefaultBullet: _('Bullets'),
+    DefaultNumbering: _('Numbering'),
+    DeleteAllNotes: _('Delete All Comments'),
+    DeleteAuthor: _('Delete All Comments by This Author'),
+    DeleteColumns: _('Delete Columns'),
+    DeleteComment: _('Delete Comment'),
+    DeleteRows: _('Delete Rows'),
+    DeleteTable: _('Delete Table'),
+    EditStyle: _('E~dit Style...'),
+    EntireCell: _('Select Cell'),
+    EntireColumn: _('Select Column'),
+    EntireRow: _('Select Rows'),
+    FontDialog: _('Character...'),
+    FormatCellDialog: _('Format ~Cells...'),
+    Group: _('~Group...'),
+    Grow: _('Increase'),
+    HideDetail: _('~Hide Details'),
+    HyperlinkDialog: _('~Link...'),
+    IncrementIndent: _('Increase'),
+    IncrementLevel: _('Promote One Level'),
+    IncrementSubLevels: _('Promote One Level With Subpoints'),
+    InsertColumnBreak: _('Insert ~Column Break'),
+    InsertColumns: _('Insert Co~lumns Left'),
+    InsertColumnsAfter: _('Insert Co~lumns Right'),
+    InsertColumnsBefore: _('Insert Co~lumns Left'),
+    InsertEndnote: _('~Endnote'),
+    InsertFootnote: _('~Footnote'),
+    InsertHardHyphen: _('Non-br~eaking hyphen'),
+    InsertIndexesEntry: _('~Index Entry...'),
+    InsertLRM: _('~Left-to-right mark'),
+    InsertNeutralParagraph: _('Insert Unnumbered Entry'),
+    InsertNonBreakingSpace: _('~Non-breaking space'),
+    InsertRLM: _('~Right-to-left mark'),
+    InsertRows: _('Insert ~Rows Above'),
+    InsertRowsAfter: _('Insert ~Rows Below'),
+    InsertRowsBefore: _('Insert ~Rows Above'),
+    InsertSoftHyphen: _('S~oft hyphen'),
+    InsertZWNBSP: _('No-width no ~break'),
+    InsertZWSP: _('No-~width optional break'),
+    Italic: _('Italic'),
+    JumpDownThisLevel: _('To Next Paragraph in Level'),
+    JumpUpThisLevel: _('To Previous Paragraph in Level'),
+    MergeCells: _('Merge Cells'),
+    MoveDown: _('Move Down'),
+    MoveDownSubItems: _('Move Down with Subpoints'),
+    MoveUp: _('Move Up'),
+    MoveUpSubItems: _('Move Up with Subpoints'),
+    NextTrackedChange: _('Next'),
+    NumberingStart: _('Restart Numbering'),
+    ObjectBackOne: _('Back One'),
+    ObjectForwardOne: _('Forward One'),
+    OpenHyperlinkOnCursor: _('Open Link'),
+    OutlineBullet: _('~Bullets and Numbering...'),
+    OutlineFont: _('Outline'),
+    Overline: _('Overline'),
+    ParaLeftToRight: _('Left-To-Right'),
+    ParaRightToLeft: _('Right-To-Left'),
+    ParagraphDialog: _('P~aragraph...'),
+    ParaspaceDecrease: _('Decrease'),
+    ParaspaceIncrease: _('Increase'),
+    Paste: _('~Paste'),
+    PasteSpecialMenu: _('Paste ~Special'),
+    PasteUnformatted: _('Paste Unformatted Text'),
+    PreviousTrackedChange: _('Pr~evious'),
+    RecalcPivotTable: _('~Refresh Pivot Table'),
+    Redo: _('~Redo'),
+    RejectAllTrackedChanges: _('Reject All'),
+    RemoveHyperlink: _('Remove Link'),
+    RemoveTableOf: _('Delete index'),
+    ReplyComment: _('Reply Comment'),
+    ResetAttributes: _('Clear ~Direct Formatting'),
+    RotateLeft: _('Rotate 90° ~Left'),
+    RotateMenu: _('Rot~ate'),
+    RotateRight: _('Rotate 90° ~Right'),
+    SearchDialog: _('Find & Rep~lace...'),
+    SelectAll: _('Select ~All'),
+    SelectTable: _('Select Table'),
+    SendToBack: _('~Send to Back'),
+    SetAnchorAtChar: _('Anchor to Character'),
+    SetAnchorToChar: _('Anchor as Character'),
+    SetAnchorToFrame: _('Anchor To Frame'),
+    SetAnchorToPage: _('Anchor: To P~age'),
+    SetAnchorToPara: _('Anchor To Paragraph'),
+    SetOptimalColumnWidth: _('~Optimal Column Width...'),
+    Shadowed: _('Shadow'),
+    ShowDetail: _('~Show Details'),
+    ShowTrackedChanges: _('~Show'),
+    Shrink: _('Decrease'),
+    SmallCaps: _('Small capitals'),
+    SpacePara1: _('Line Spacing: 1'),
+    SpacePara15: _('Line Spacing: 1.5'),
+    SpacePara2: _('Line Spacing: 2'),
+    SpellOnline: _('Auto Spellcheck'),
+    SpellingAndGrammarDialog: _('Spelling'),
+    Strikeout: _('Strikethrough'),
+    SubScript: _('Subscript'),
+    SuperScript: _('Superscript'),
+    TableDeleteMenu: _('~Delete'),
+    TableDialog: _('Ta~ble Properties...'),
+    TableInsertMenu: _('~Insert'),
+    TrackChanges: _('~Record'),
+    Underline: _('Underline'),
+    UnderlineDouble: _('Underline: Double'),
+    Undo: _('Undo'),
+    Ungroup: _('~Ungroup...'),
+    UpdateCurIndex: _('Update Index'),
+    WordCountDialog: _('~Word Count'),
+    WrapAnchorOnly: _('Wrap First Paragraph'),
+    WrapContour: _('Wrap Contour On'),
+    WrapIdeal: _('~Optimal Page Wrap'),
+    WrapLeft: _('Wrap Left'),
+    WrapMenu: _('~Wrap'),
+    WrapOff: _('Wrap Off'),
+    WrapOn: _('~Page Wrap'),
+    WrapRight: _('Wrap Right'),
+    WrapThrough: _('~Wrap Through'),
+    WrapThroughTransparent: _('In ~Background'),
+};
+
+global._UNO = function(string) {
+        var text = unoCommandsArray[string.substr(5)];
+        text = text.replace('~', '');
+        return text;
+}
diff --git a/scripts/unocommands.py b/scripts/unocommands.py
index 0a91b348..4f88ceb4 100755
--- a/scripts/unocommands.py
+++ b/scripts/unocommands.py
@@ -1,4 +1,12 @@
 #!/usr/bin/env python
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# 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/.
+#
 
 import os
 import re
@@ -20,7 +28,7 @@ def commandsFromLine(line):
             inCommand = not inCommand
             # command ended, collect it
             if not inCommand and command != '':
-                commands += [ '.uno:' + command ]
+                commands += [ command ]
                 command = ''
         elif inCommand:
             command += c
@@ -31,7 +39,7 @@ def commandsFromLine(line):
 def commandFromMenuLine(line):
     commands = []
 
-    m = re.search(r"\buno: *'([^']*)'", line)
+    m = re.search(r"\buno: *'\.uno:([^']*)'", line)
     if m:
         commands = [ m.group(1) ]
 
@@ -67,7 +75,7 @@ def extractCommands(path):
 
 # Create mapping between the commands and appropriate strings
 def printCommandsFromXCU(xcu, commands):
-    usedCommands = []
+    descriptions = {}
 
     root = etree.parse(xcu)
     nodes = root.xpath("/oor:component-data/node/node/node", namespaces = {
@@ -76,6 +84,7 @@ def printCommandsFromXCU(xcu, commands):
     for node in nodes:
         # extract the uno command name
         unoCommand = node.get('{http://openoffice.org/2001/registry}name')
+        unoCommand = unoCommand[5:]
 
         if unoCommand in commands:
             textElement = node.xpath('prop[@oor:name="Label"]/value', namespaces = {
@@ -85,11 +94,9 @@ def printCommandsFromXCU(xcu, commands):
             if len(textElement) == 1:
                 # extract the uno command's English text
                 text = ''.join(textElement[0].itertext())
-                print ('    ' + unoCommand[5:] + ": _('" + text + "'),").encode('utf-8')
+                descriptions[unoCommand] = text
 
-		usedCommands += [ unoCommand ]
-
-    return usedCommands
+    return descriptions
 
 if __name__ == "__main__":
     if len(sys.argv) != 3:
@@ -98,19 +105,32 @@ if __name__ == "__main__":
 
     commands = extractCommands(sys.argv[2])
 
+    # build the uno descriptions from all the xcu files
+    descriptions = {}
+    dir = sys.argv[1] + '/officecfg/registry/data/org/openoffice/Office/UI'
+    for file in os.listdir(dir):
+        if file.endswith(".xcu"):
+            descriptions.update(printCommandsFromXCU(os.path.join(dir, file), commands))
+
+    # output the unocommands.js
     print '''// Don't modify, generated using unocommands.py
 
 var unoCommandsArray = {'''
 
-    # try all xcu files
-    usedCommands = []
-    dir = sys.argv[1] + '/officecfg/registry/data/org/openoffice/Office/UI'
-    for file in os.listdir(dir):
-        if file.endswith(".xcu"):
-            usedCommands += printCommandsFromXCU(os.path.join(dir, file), commands)
+    for key in sorted(descriptions.keys()):
+        print ('    ' + key + ": _('" + descriptions[key] + "'),").encode('utf-8')
 
-    print '};'
+    print '''};
 
-    dif = commands - set(usedCommands)
+global._UNO = function(string) {
+        var text = unoCommandsArray[string.substr(5)];
+        text = text.replace('~', '');
+        return text;
+}'''
+
+    # check that we have translations for everything
+    dif = commands - set(descriptions.keys())
     if len(dif) > 0:
-	sys.stderr.write("ERROR: The following commands are not covered:\n\n" + '\n'.join(dif) + "\n")
+        sys.stderr.write("ERROR: The following commands are not covered:\n\n.uno:" + '\n.uno:'.join(dif) + "\n")
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
commit 99161841dcee3b066153a7f7af0e98d6ef7f8a2c
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Wed Dec 6 18:36:14 2017 +0100

    l10n: New script for collecting the used .uno: commands.
    
    Change-Id: I9c6f3f03a4042f8e5ba1f258ce468fc0f4abd169
    Reviewed-on: https://gerrit.libreoffice.org/45981
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Tested-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/control/Control.ContextMenu.js b/loleaflet/src/control/Control.ContextMenu.js
index a2e407f5..743c7f3f 100644
--- a/loleaflet/src/control/Control.ContextMenu.js
+++ b/loleaflet/src/control/Control.ContextMenu.js
@@ -10,6 +10,8 @@ L.Control.ContextMenu = L.Control.extend({
 		 * Enter UNO commands that should appear in the context menu.
 		 * Entering a UNO command under `general' would enable it for all types
 		 * of documents. If you do not want that, whitelist it in document specific filter.
+		 *
+		 * UNOCOMMANDS_EXTRACT_START <- don't remove this line, it's used by unocommands.py
 		 */
 		whitelist: {
 			/*
@@ -40,6 +42,7 @@ L.Control.ContextMenu = L.Control.extend({
 			presentation: ['EditStyle'],
 			drawing: []
 		}
+		// UNOCOMMANDS_EXTRACT_END <- don't remove this line, it's used by unocommands.py
 	},
 
 
diff --git a/scripts/unocommands.py b/scripts/unocommands.py
new file mode 100755
index 00000000..0a91b348
--- /dev/null
+++ b/scripts/unocommands.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+import os
+import re
+import sys
+from lxml import etree
+
+def usage():
+    message = """usage: {program} loffice_srcdir online_srcdir"""
+    print(message.format(program = os.path.basename(sys.argv[0])))
+
+# Extract uno commands name from lines like "  'Command1', 'Command2',"
+def commandsFromLine(line):
+    commands = []
+
+    inCommand = False
+    command = ''
+    for c in line:
+        if c == "'":
+            inCommand = not inCommand
+            # command ended, collect it
+            if not inCommand and command != '':
+                commands += [ '.uno:' + command ]
+                command = ''
+        elif inCommand:
+            command += c
+
+    return commands
+
+# Extract uno commands name from lines like "  type: 'unocommand', uno: '.uno:Command3',"
+def commandFromMenuLine(line):
+    commands = []
+
+    m = re.search(r"\buno: *'([^']*)'", line)
+    if m:
+        commands = [ m.group(1) ]
+
+    return commands
+
+# Extract all the uno commands we are using in the Online
+def extractCommands(path):
+    commands = []
+
+    #files = { path + '/loleaflet/src/control/Control.ContextMenu.js',
+    #    path + '/loleaflet/src/control/Control.Menubar.js'
+    #}
+
+    # extract from the comments whitelist
+    f = open(path + '/loleaflet/src/control/Control.ContextMenu.js', 'r')
+    readingCommands = False
+    for line in f:
+        if line.find('UNOCOMMANDS_EXTRACT_START') >= 0:
+            readingCommands = True
+        elif line.find('UNOCOMMANDS_EXTRACT_END') >= 0:
+            readingCommands = False
+        elif readingCommands:
+            commands += commandsFromLine(line)
+
+    # extract from the menu specifications
+    f = open(path + '/loleaflet/src/control/Control.Menubar.js', 'r')
+    for line in f:
+        if line.find("'unocommand'") >= 0:
+            commands += commandFromMenuLine(line)
+
+    # may the list unique
+    return set(commands)
+
+# Create mapping between the commands and appropriate strings
+def printCommandsFromXCU(xcu, commands):
+    usedCommands = []
+
+    root = etree.parse(xcu)
+    nodes = root.xpath("/oor:component-data/node/node/node", namespaces = {
+        'oor': 'http://openoffice.org/2001/registry',
+        })
+    for node in nodes:
+        # extract the uno command name
+        unoCommand = node.get('{http://openoffice.org/2001/registry}name')
+
+        if unoCommand in commands:
+            textElement = node.xpath('prop[@oor:name="Label"]/value', namespaces = {
+                'oor': 'http://openoffice.org/2001/registry',
+                })
+
+            if len(textElement) == 1:
+                # extract the uno command's English text
+                text = ''.join(textElement[0].itertext())
+                print ('    ' + unoCommand[5:] + ": _('" + text + "'),").encode('utf-8')
+
+		usedCommands += [ unoCommand ]
+
+    return usedCommands
+
+if __name__ == "__main__":
+    if len(sys.argv) != 3:
+        usage()
+        exit(1)
+
+    commands = extractCommands(sys.argv[2])
+
+    print '''// Don't modify, generated using unocommands.py
+
+var unoCommandsArray = {'''
+
+    # try all xcu files
+    usedCommands = []
+    dir = sys.argv[1] + '/officecfg/registry/data/org/openoffice/Office/UI'
+    for file in os.listdir(dir):
+        if file.endswith(".xcu"):
+            usedCommands += printCommandsFromXCU(os.path.join(dir, file), commands)
+
+    print '};'
+
+    dif = commands - set(usedCommands)
+    if len(dif) > 0:
+	sys.stderr.write("ERROR: The following commands are not covered:\n\n" + '\n'.join(dif) + "\n")


More information about the Libreoffice-commits mailing list