[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-2-0' - 31 commits - .clang-tidy common/Common.hpp common/IoUtil.cpp common/Png.hpp common/Session.cpp common/Unit.cpp common/UnitHTTP.hpp kit/ChildSession.cpp kit/Kit.cpp loleaflet/dist loleaflet/po loleaflet/src test/UnitPrefork.cpp wsd/ClientSession.cpp wsd/ClientSession.hpp wsd/DocumentBroker.cpp wsd/LOOLWSD.cpp wsd/protocol.txt wsd/Storage.cpp wsd/TileCache.cpp wsd/TraceFile.hpp

Pranav Kant pranavk at collabora.co.uk
Tue Dec 13 10:41:49 UTC 2016


 .clang-tidy                                   |    2 
 common/Common.hpp                             |    2 
 common/IoUtil.cpp                             |    1 
 common/Png.hpp                                |    4 
 common/Session.cpp                            |    1 
 common/Unit.cpp                               |    2 
 common/UnitHTTP.hpp                           |    1 
 kit/ChildSession.cpp                          |   22 
 kit/Kit.cpp                                   |    2 
 loleaflet/dist/loleaflet.css                  |    9 
 loleaflet/dist/toolbar/toolbar.js             |   89 -
 loleaflet/po/ui-pt_BR.po                      | 2119 +++++++++++++++++++++-----
 loleaflet/src/control/Control.ColumnHeader.js |   10 
 loleaflet/src/control/Control.ContextMenu.js  |    4 
 loleaflet/src/control/Control.Header.js       |    2 
 loleaflet/src/control/Control.RowHeader.js    |   11 
 loleaflet/src/core/Socket.js                  |    6 
 loleaflet/src/layer/Popup.js                  |   10 
 loleaflet/src/layer/tile/CalcTileLayer.js     |    4 
 loleaflet/src/layer/tile/GridLayer.js         |   12 
 loleaflet/src/layer/tile/ImpressTileLayer.js  |    4 
 loleaflet/src/layer/tile/TileLayer.js         |   38 
 loleaflet/src/layer/tile/WriterTileLayer.js   |    4 
 loleaflet/src/map/Map.js                      |   10 
 test/UnitPrefork.cpp                          |    6 
 wsd/ClientSession.cpp                         |   27 
 wsd/ClientSession.hpp                         |    4 
 wsd/DocumentBroker.cpp                        |    1 
 wsd/LOOLWSD.cpp                               |   16 
 wsd/Storage.cpp                               |    1 
 wsd/TileCache.cpp                             |    2 
 wsd/TraceFile.hpp                             |    3 
 wsd/protocol.txt                              |    6 
 33 files changed, 1928 insertions(+), 507 deletions(-)

New commits:
commit 538bce12b7e9c24f4ca3da2c1c0a5b6357b87a0d
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Mon Dec 12 14:55:50 2016 +0530

    loleaflet: Remove troublesome extra argument to replace()
    
    This errors out in firefox (in some versions).
    
    Change-Id: I4c1d77249ec6883b70c961ffe8239157a0d6466c
    (cherry picked from commit 6b795ae54df0d16fdc01e438f9887e452f34312b)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 5bb9f6c..010a795 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -77,7 +77,7 @@ L.Socket = L.Class.extend({
 			if (typeof msg === 'string') {
 				L.Log.log(msg, L.OUTGOING, coords);
 				if (this._map._docLayer && this._map._docLayer._debug) {
-					console.log(+new Date() + ' %cOUTGOING%c: ' + msg.concat(' ').replace(' ', '%c ', 1), 'background:#fbb;color:black', 'color:red', 'color:black');
+					console.log(+new Date() + ' %cOUTGOING%c: ' + msg.concat(' ').replace(' ', '%c '), 'background:#fbb;color:black', 'color:red', 'color:black');
 				}
 			}
 		}
@@ -92,7 +92,7 @@ L.Socket = L.Class.extend({
 		if (typeof msg === 'string') {
 			L.Log.log(msg, L.OUTGOING, coords);
 			if (this._map._docLayer && this._map._docLayer._debug) {
-				console.log(+new Date() + ' %cOUTGOING%c: ' + msg.concat(' ').replace(' ', '%c ', 1), 'background:#fbb;color:black', 'color:red', 'color:black');
+				console.log(+new Date() + ' %cOUTGOING%c: ' + msg.concat(' ').replace(' ', '%c '), 'background:#fbb;color:black', 'color:red', 'color:black');
 			}
 		}
 
@@ -157,7 +157,7 @@ L.Socket = L.Class.extend({
 		}
 
 		if (this._map._docLayer && this._map._docLayer._debug) {
-			console.log(+new Date() + ' %cINCOMING%c: ' + textMsg.concat(' ').replace(' ', '%c ', 1), 'background:#ddf;color:black', 'color:blue', 'color:black');
+			console.log(+new Date() + ' %cINCOMING%c: ' + textMsg.concat(' ').replace(' ', '%c '), 'background:#ddf;color:black', 'color:blue', 'color:black');
 		}
 
 		var command = this.parseServerCmd(textMsg);
commit 9d47d4e31155790f401aa30be35943582d3c2e79
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Mon Dec 12 13:49:04 2016 +0530

    loleaflet: Don't use w2ui directly from loleaflet
    
    Use events, 'hidebusy', 'showbusy' to interact with toolbar.
    In some cases, it may happen that w2ui usage in loleaflet happens
    before browser loads w2ui.js (as it is in <script> tag after the
    one which loads loleaflet).
    
    Change-Id: I9b1b249ede72ed01f97cf31fd3f93780312530bc
    (cherry picked from commit fda2f26df4dbd33541192b4df7dc69a799fee38d)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index e58d1b2..ee1e304 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -2,7 +2,7 @@
  * LibreOffice Online toolbar
  */
 
-/* global $ map closebutton w2ui vex _ */
+/* global $ map closebutton w2ui w2utils vex _ */
 
 function onDelete(e) {
 	if (e !== false) {
@@ -752,6 +752,17 @@ function onFormulaBarBlur() {
 	}, 250);
 }
 
+map.on('hidebusy', function() {
+	// If locked, unlock
+	if (w2ui['toolbar-down'].box.firstChild.className === 'w2ui-lock') {
+		w2utils.unlock(w2ui['toolbar-down'].box);
+	}
+});
+
+map.on('showbusy', function(e) {
+	w2utils.lock(w2ui['toolbar-down'].box, e.label, true);
+});
+
 map.on('wopiprops', function(e) {
 	if (e.HideSaveOption) {
 		w2ui['toolbar-up'].hide('save');
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 682f246..b53c2d7 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -2,7 +2,7 @@
  * L.Map is the central class of the API - it is used to create a map.
  */
 
-/* global vex $ w2ui w2utils */
+/* global vex $ */
 L.Map = L.Evented.extend({
 
 	options: {
@@ -156,7 +156,7 @@ L.Map = L.Evented.extend({
 		// If document is already loaded, ask the toolbar widget to show busy
 		// status on the bottom statusbar
 		if (this._docLayer) {
-			w2utils.lock(w2ui['toolbar-down'].box, label, true);
+			this.fire('showbusy', {label: label});
 			return;
 		}
 
@@ -170,9 +170,7 @@ L.Map = L.Evented.extend({
 	},
 
 	hideBusy: function () {
-		if (w2ui['toolbar-down'].box.firstChild.className === 'w2ui-lock') {
-			w2utils.unlock(w2ui['toolbar-down'].box);
-		}
+		this.fire('hidebusy');
 
 		if (this.hasLayer(this._progressBar)) {
 			this.removeLayer(this._progressBar);
commit 28be052b2221de735a8ec6324f1b4725d0968966
Author: László Németh <laszlo.nemeth at collabora.com>
Date:   Thu Dec 8 23:21:22 2016 +0100

    loleaflet: fix footnote insertion
    
    Ctrl-Alt-F (insert footnote) activated the Search bar (Ctrl-F), too.
    
    Change-Id: I681156f703bc044417c9b47aad8b3ebce5f259f6
    (cherry picked from commit 076e7796493bf0f50819353bcdf12d7a0f174888)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index e8c573a..e58d1b2 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -1316,7 +1316,7 @@ map.on('statusindicator', function (e) {
 });
 
 map.on('keydown', function (e) {
-	if (e.originalEvent.ctrlKey &&
+	if (e.originalEvent.ctrlKey && !e.originalEvent.altKey &&
 	   (e.originalEvent.key === 'f' || e.originalEvent.key === 'F')) {
 		L.DomUtil.get('search-input').focus();
 		e.originalEvent.preventDefault();
commit 673ccf4e54c29fdf3ff22af44ae3779a59f8cbf5
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Dec 8 22:15:15 2016 +0530

    loleaflet: Use same loleaflet font for color picker
    
    Change-Id: I4e8235a913db81f3d270a23a95e1b3144de47d08
    (cherry picked from commit 01d91642f10941438d63590a6f8f61ec35540df7)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index 1f77cb0..e8c573a 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -179,12 +179,18 @@ function onClick(id, item, subItem) {
 	else if (id === 'fontcolor') {
 		// absolutely no idea why, but without the timeout, the popup is
 		// closed as soon as it is opend
-		setTimeout(function () {$('#fontColorPicker').colorpicker('showPalette');}, 0);
+		setTimeout(function () {
+			$('#fontColorPicker').colorpicker('showPalette');
+			$('.ui-widget-content').addClass('loleaflet-font');
+		}, 0);
 	}
 	else if (id === 'backcolor') {
 		// absolutely no idea why, but without the timeout, the popup is
 		// closed as soon as it is opend
-		setTimeout(function () {$('#backColorPicker').colorpicker('showPalette');}, 0);
+		setTimeout(function () {
+			$('#backColorPicker').colorpicker('showPalette');
+			$('.ui-widget-content').addClass('loleaflet-font');
+		}, 0);
 	}
 	else if (id === 'sum') {
 		map.sendUnoCommand('.uno:AutoSum');
commit 0d986445233fe2cae8217158cce32d459dd13fdd
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Dec 8 21:58:22 2016 +0530

    loleaflet: Check boxes against checked items in context menu
    
    Change-Id: I1a51fec67ba79dc2e82cccb54731bfabb9731470
    (cherry picked from commit 33ce6f38e4d2711f9a5a57e8e09a4ac957c16f97)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/dist/loleaflet.css b/loleaflet/dist/loleaflet.css
index fe40839..a0f3ef7 100644
--- a/loleaflet/dist/loleaflet.css
+++ b/loleaflet/dist/loleaflet.css
@@ -57,3 +57,12 @@ body {
 .loleaflet-scrolled {
 	overflow: auto;
 }
+
+/* Important to override context-menu-icon's font-family here otherwise, jquery-contextmenu.css
+ * will try to load its own font file which is not available in dist/ */
+.context-menu-icon::before {
+	font-family: "Segoe UI", Tahoma, Arial, Helvetica, sans-serif !important;
+}
+.context-menu-icon-lo-checkmark:before {
+	content: '\2713';
+}
diff --git a/loleaflet/src/control/Control.ContextMenu.js b/loleaflet/src/control/Control.ContextMenu.js
index 60c4a32..1780060 100644
--- a/loleaflet/src/control/Control.ContextMenu.js
+++ b/loleaflet/src/control/Control.ContextMenu.js
@@ -134,11 +134,11 @@ L.Control.ContextMenu = L.Control.extend({
 
 				if (item.checktype === 'checkmark') {
 					if (item.checked === 'true') {
-						contextMenu[item.command.icon] = 'checkmark';
+						contextMenu[item.command]['icon'] = 'lo-checkmark';
 					}
 				} else if (item.checktype === 'radio') {
 					if (item.checked === 'true') {
-						contextMenu[item.command.icon] = 'radio';
+						contextMenu[item.command]['icon'] = 'radio';
 					}
 				}
 
commit defe16396df4add7e9a12df15353fc963ac1e8a7
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Thu Dec 8 19:20:28 2016 +0530

    loleaflet: Improved search
    
    Start searching as you type
    Press enter to search forward
    Shift + enter to search backwards
    Esc to get back to editing
    
    Change-Id: Id366069aea9eb0e96e8d73fa4b57f972b0ce78e5
    (cherry picked from commit cba45fce4293f173be5534fa37b33ff7721a143e)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/dist/toolbar/toolbar.js b/loleaflet/dist/toolbar/toolbar.js
index 5373a7a..1f77cb0 100644
--- a/loleaflet/dist/toolbar/toolbar.js
+++ b/loleaflet/dist/toolbar/toolbar.js
@@ -52,6 +52,16 @@ function resizeToolbar() {
 	}
 }
 
+function _cancelSearch() {
+	var toolbar = w2ui['toolbar-down'];
+	map.resetSelection();
+	toolbar.hide('cancelsearch');
+	toolbar.disable('searchprev');
+	toolbar.disable('searchnext');
+	L.DomUtil.get('search-input').value = '';
+	map.focus();
+}
+
 function onClick(id, item, subItem) {
 	if (w2ui['toolbar-up'].get(id) !== null) {
 		var toolbar = w2ui['toolbar-up'];
@@ -130,11 +140,7 @@ function onClick(id, item, subItem) {
 		map.search(L.DomUtil.get('search-input').value);
 	}
 	else if (id === 'cancelsearch') {
-		map.resetSelection();
-		toolbar.hide('cancelsearch');
-		toolbar.disable('searchprev');
-		toolbar.disable('searchnext');
-		L.DomUtil.get('search-input').value = '';
+		_cancelSearch();
 	}
 	else if (id === 'presentation' && map.getDocType() === 'presentation') {
 		map.fire('fullscreen');
@@ -452,7 +458,7 @@ $(function () {
 			{type: 'html',  id: 'search',
 			 html: '<div style="padding: 3px 10px;" class="loleaflet-font">' +
 			 ' ' + _('Search:') +
-			 '    <input size="10" id="search-input" onkeypress="onSearch(event)"' +
+			 '    <input size="10" id="search-input" oninput="onSearch(event)" onkeypress="onSearchKeyPress(event)" ' +
 			 'style="padding: 3px; border-radius: 2px; border: 1px solid silver"/>' +
 			 '</div>'
 			},
@@ -571,15 +577,23 @@ function selectItem(item, func)
 }
 
 function onSearch(e) {
-	if (e.keyCode === 13) {
-		var toolbar = w2ui['toolbar-down'];
-		map.search(L.DomUtil.get('search-input').value);
-		toolbar.enable('searchprev');
-		toolbar.enable('searchnext');
-		toolbar.show('cancelsearch');
-	}
-	else {
-		map.fire('requestloksession');
+	var toolbar = w2ui['toolbar-down'];
+	map.search(L.DomUtil.get('search-input').value);
+	toolbar.enable('searchprev');
+	toolbar.enable('searchnext');
+	toolbar.show('cancelsearch');
+}
+
+function onSearchKeyPress(e) {
+	if (e.keyCode === 13) { // Enter key
+		if (e.shiftKey) {
+			// search backwards
+			map.search(L.DomUtil.get('search-input').value, true);
+		} else {
+			map.search(L.DomUtil.get('search-input').value);
+		}
+	} else if (e.keyCode === 27) { // Escape key
+		_cancelSearch();
 	}
 }
 
commit 7ced7c3150248de49f5de3f0fa276c471984dd31
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Dec 8 09:33:24 2016 +0100

    Storage: make sure matrix is initialized before read
    
    Change-Id: I967ab34c0f0430900b4be4424fa4493386c96c33
    (cherry picked from commit cb8564b17f7767b56f2a57c8c5a064ad86928fad)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 21800ae..a2ca75b 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -283,6 +283,7 @@ Poco::Net::HTTPClientSession* getHTTPClientSession(const Poco::URI& uri)
 
 int getLevenshteinDist(const std::string& string1, const std::string& string2) {
     int matrix[string1.size() + 1][string2.size() + 1];
+    std::memset(matrix, 0, sizeof(matrix[0][0]) * (string1.size() + 1) * (string2.size() + 1));
 
     for (size_t i = 0; i < string1.size() + 1; i++)
     {
commit ca64e875948356e2c8c80b016dbfa76297a96881
Author: László Németh <laszlo.nemeth at collabora.com>
Date:   Thu Dec 8 00:34:17 2016 +0100

    loleaflet: better user tooltip layout in Calc and Impress
    
    Now it is similar to Writer user tooltip coloring.
    
    Change-Id: I68ae24145a199957c506491d38ff50472abcf1bb
    (cherry picked from commit 7bf2bec78f3c4140cdf4614acd15916e7a4ff757)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/layer/Popup.js b/loleaflet/src/layer/Popup.js
index 9e8f0cf..5acc296 100644
--- a/loleaflet/src/layer/Popup.js
+++ b/loleaflet/src/layer/Popup.js
@@ -168,10 +168,14 @@ L.Popup = L.Layer.extend({
 		this._tipContainer = L.DomUtil.create('div', prefix + '-tip-container', container);
 		this._tip = L.DomUtil.create('div', prefix + '-tip', this._tipContainer);
 
-		if (this.options.borderColor) {
-			this._tip.style['border'] = this._wrapper.style['border'] = '2px solid ' + this.options.borderColor;
-			this._closeButton.style['color'] = this.options.borderColor;
+		if (this.options.backgroundColor) {
+			this._tip.style['background-color'] = this._wrapper.style['background-color'] = this.options.backgroundColor;
 		}
+
+		if (this.options.color) {
+			this._wrapper.style['color'] = this.options.color;
+		}
+
 	},
 
 	_updateContent: function () {
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index e06c68b..07b4b09 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -718,10 +718,10 @@ L.TileLayer = L.GridLayer.extend({
 
 		if (!this._isEmptyRectangle(this._cellViewCursors[viewId].bounds) && this._selectedPart === viewPart) {
 			if (!cellViewCursorMarker) {
-				var borderColor = L.LOUtil.rgbToHex(this._map.getViewColor(viewId));
-				cellViewCursorMarker = L.rectangle(this._cellViewCursors[viewId].bounds, {fill: false, color: borderColor, weight: 2});
+				var backgroundColor = L.LOUtil.rgbToHex(this._map.getViewColor(viewId));
+				cellViewCursorMarker = L.rectangle(this._cellViewCursors[viewId].bounds, {fill: false, color: backgroundColor, weight: 2});
 				this._cellViewCursors[viewId].marker = cellViewCursorMarker;
-				cellViewCursorMarker.bindPopup(this._map.getViewName(viewId), {autoClose: false, autoPan: false, borderColor: borderColor});
+				cellViewCursorMarker.bindPopup(this._map.getViewName(viewId), {autoClose: false, autoPan: false, backgroundColor: backgroundColor, color: 'white', closeButton: false});
 			}
 			else {
 				cellViewCursorMarker.setBounds(this._cellViewCursors[viewId].bounds);
@@ -765,8 +765,8 @@ L.TileLayer = L.GridLayer.extend({
 				}
 			}
 
-			var borderColor = L.LOUtil.rgbToHex(this._map.getViewColor(viewId));
-			this._cellViewCursors[viewId].marker.bindPopup(this._map.getViewName(viewId), {autoClose: false, autoPan: false, borderColor: borderColor});
+			var backgroundColor = L.LOUtil.rgbToHex(this._map.getViewColor(viewId));
+			this._cellViewCursors[viewId].marker.bindPopup(this._map.getViewName(viewId), {autoClose: false, autoPan: false, backgroundColor: backgroundColor, color: 'white', closeButton: false});
 		}
 	},
 
@@ -1430,7 +1430,7 @@ L.TileLayer = L.GridLayer.extend({
 					color: color
 				});
 				// Disable autoPan, so the graphic view selection doesn't make the view jump to the popup.
-				viewMarker.bindPopup(this._map.getViewName(viewId), {autoClose: false, autoPan: false, borderColor: color});
+				viewMarker.bindPopup(this._map.getViewName(viewId), {autoClose: false, autoPan: false, backgroundColor: color, color: 'white', closeButton: false});
 				this._graphicViewMarkers[viewId].marker = viewMarker;
 			}
 			else {
commit bc538646cc5f033d7acd5e2e2cc3714772fb11d0
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Wed Dec 7 20:54:26 2016 +0530

    loleaflet: Request higher pixel density tiles on retina display
    
    Change-Id: I418f0db47239c915d8f12c07979306a814370b65
    (cherry picked from commit fbb26d0d137ae8020328d4ba3b5350c8e681acc7)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js
index b66a657..5d6e6e4 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -83,8 +83,8 @@ L.CalcTileLayer = L.TileLayer.extend({
 		{
 			var message = 'tilecombine ' +
 				'part=' + command.part + ' ' +
-				'width=' + this._tileSize + ' ' +
-				'height=' + this._tileSize + ' ' +
+				'width=' + this._tileWidthPx + ' ' +
+				'height=' + this._tileHeightPx + ' ' +
 				'tileposx=' + tilePositionsX + ' ' +
 				'tileposy=' + tilePositionsY + ' ' +
 				'tilewidth=' + this._tileWidthTwips + ' ' +
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index a704b42..9f675d1 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -684,8 +684,8 @@ L.GridLayer = L.Layer.extend({
 			if (tilePositionsX !== '' && tilePositionsY !== '') {
 				var message = 'tilecombine ' +
 					'part=' + this._selectedPart + ' ' +
-					'width=' + this._tileSize + ' ' +
-					'height=' + this._tileSize + ' ' +
+					'width=' + this._tileWidthPx + ' ' +
+					'height=' + this._tileHeightPx + ' ' +
 					'tileposx=' + tilePositionsX + ' ' +
 					'tileposy=' + tilePositionsY + ' ' +
 					'tilewidth=' + this._tileWidthTwips + ' ' +
@@ -916,8 +916,8 @@ L.GridLayer = L.Layer.extend({
 				twips = this._coordsToTwips(coords);
 				msg = 'tile ' +
 					'part=' + coords.part + ' ' +
-					'width=' + this._tileSize + ' ' +
-					'height=' + this._tileSize + ' ' +
+					'width=' + this._tileWidthPx + ' ' +
+					'height=' + this._tileHeightPx + ' ' +
 					'tileposx=' + twips.x + ' '	+
 					'tileposy=' + twips.y + ' ' +
 					'tilewidth=' + this._tileWidthTwips + ' ' +
@@ -946,8 +946,8 @@ L.GridLayer = L.Layer.extend({
 				twips = this._coordsToTwips(coords);
 				msg = 'tilecombine ' +
 					'part=' + coords.part + ' ' +
-					'width=' + this._tileSize + ' ' +
-					'height=' + this._tileSize + ' ' +
+					'width=' + this._tileWidthPx + ' ' +
+					'height=' + this._tileHeightPx + ' ' +
 					'tileposx=' + tilePositionsX + ' '	+
 					'tileposy=' + tilePositionsY + ' ' +
 					'tilewidth=' + this._tileWidthTwips + ' ' +
diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js b/loleaflet/src/layer/tile/ImpressTileLayer.js
index 07bb75c..da0166c 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -67,8 +67,8 @@ L.ImpressTileLayer = L.TileLayer.extend({
 		{
 			var message = 'tilecombine ' +
 				'part=' + command.part + ' ' +
-				'width=' + this._tileSize + ' ' +
-				'height=' + this._tileSize + ' ' +
+				'width=' + this._tileWidthPx + ' ' +
+				'height=' + this._tileHeightPx + ' ' +
 				'tileposx=' + tilePositionsX + ' ' +
 				'tileposy=' + tilePositionsY + ' ' +
 				'tilewidth=' + this._tileWidthTwips + ' ' +
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 52658e7..e06c68b 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -56,10 +56,13 @@ L.TileLayer = L.GridLayer.extend({
 
 		options = L.setOptions(this, options);
 
-		// detecting retina displays, adjusting tileSize and zoom levels
-		if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) {
+		this._tileWidthPx = options.tileSize;
+		this._tileHeightPx = options.tileSize;
 
-			options.tileSize = Math.floor(options.tileSize / 2);
+		// detecting retina displays, adjusting tileWidthPx, tileHeightPx and zoom levels
+		if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) {
+			this._tileWidthPx *= 2;
+			this._tileHeightPx *= 2;
 			options.zoomOffset++;
 
 			options.minZoom = Math.max(0, options.minZoom);
@@ -133,8 +136,8 @@ L.TileLayer = L.GridLayer.extend({
 		this._previewInvalidations = [];
 		this._partPageRectanglesTwips = [];
 		this._partPageRectanglesPixels = [];
-		this._clientZoom = 'tilepixelwidth=' + this.options.tileSize + ' ' +
-			'tilepixelheight=' + this.options.tileSize + ' ' +
+		this._clientZoom = 'tilepixelwidth=' + this._tileWidthPx + ' ' +
+			'tilepixelheight=' + this._tileHeightPx + ' ' +
 			'tiletwipwidth=' + this.options.tileWidthTwips + ' ' +
 			'tiletwipheight=' + this.options.tileHeightTwips;
 
@@ -1849,8 +1852,8 @@ L.TileLayer = L.GridLayer.extend({
 	_onCellCursorShift: function (force) {
 		if (this._cellCursorMarker || force) {
 			this._map._socket.sendMessage('commandvalues command=.uno:CellCursor'
-			                     + '?outputHeight=' + this._tileSize
-			                     + '&outputWidth=' + this._tileSize
+			                     + '?outputHeight=' + this._tileWidthPx
+			                     + '&outputWidth=' + this._tileHeightPx
 			                     + '&tileHeight=' + this._tileWidthTwips
 			                     + '&tileWidth=' + this._tileHeightTwips);
 		}
@@ -1922,8 +1925,8 @@ L.TileLayer = L.GridLayer.extend({
 	},
 
 	_updateClientZoom: function () {
-		this._clientZoom = 'tilepixelwidth=' + this._tileSize + ' ' +
-			'tilepixelheight=' + this._tileSize + ' ' +
+		this._clientZoom = 'tilepixelwidth=' + this._tileWidthPx + ' ' +
+			'tilepixelheight=' + this._tileHeightPx + ' ' +
 			'tiletwipwidth=' + this._tileWidthTwips + ' ' +
 			'tiletwipheight=' + this._tileHeightTwips;
 	},
diff --git a/loleaflet/src/layer/tile/WriterTileLayer.js b/loleaflet/src/layer/tile/WriterTileLayer.js
index 7b93b23..9402f6c 100644
--- a/loleaflet/src/layer/tile/WriterTileLayer.js
+++ b/loleaflet/src/layer/tile/WriterTileLayer.js
@@ -69,8 +69,8 @@ L.WriterTileLayer = L.TileLayer.extend({
 			// always 0 anyway
 			var message = 'tilecombine ' +
 				'part=' + command.part + ' ' +
-				'width=' + this._tileSize + ' ' +
-				'height=' + this._tileSize + ' ' +
+				'width=' + this._tileWidthPx + ' ' +
+				'height=' + this._tileHeightPx + ' ' +
 				'tileposx=' + tilePositionsX + ' ' +
 				'tileposy=' + tilePositionsY + ' ' +
 				'tilewidth=' + this._tileWidthTwips + ' ' +
commit 3406ff6e0e67bc7b46d874350ebb32e76cc14f0f
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Wed Dec 7 18:03:50 2016 +0530

    loleaflet: Popup virtual keyboard only in editmode
    
    Change-Id: I5e1e134e07f65bc52ff3c5f38879ad3b7097254c
    (cherry picked from commit 8ee3a8d6c2677fa985c7c28446c243dfdaf6397c)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 982664f..682f246 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -901,7 +901,7 @@ L.Map = L.Evented.extend({
 		// For touch devices, to pop-up the keyboard, it is required to call
 		// .focus() method on hidden input within actual 'click' event here
 		// Calling from some other place with no real 'click' event doesn't work
-		if (type === 'click') {
+		if (type === 'click' && this._permission === 'edit') {
 			this._textArea.blur();
 			this._textArea.focus();
 		}
commit 773a1fcc83999c74b1bb50f6409a414e03969334
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Dec 7 14:31:42 2016 +0100

    TraceFile: clean up redundant member initializer
    
    Change-Id: Ia7843f6009e209da351f241839084eb61f0bb299
    (cherry picked from commit 722f904019cafd5d94c2ff5d4af392043684be06)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/wsd/TraceFile.hpp b/wsd/TraceFile.hpp
index 3790a84..2662dbc 100644
--- a/wsd/TraceFile.hpp
+++ b/wsd/TraceFile.hpp
@@ -56,8 +56,7 @@ public:
         _compress(compress),
         _filter(true),
         _stream(path, compress ? std::ios::binary : std::ios::out),
-        _deflater(_stream, Poco::DeflatingStreamBuf::STREAM_GZIP),
-        _mutex()
+        _deflater(_stream, Poco::DeflatingStreamBuf::STREAM_GZIP)
     {
         for (const auto& f : filters)
         {
commit abed2b0a040dd3cd38f631a91c213ceef04fe3d6
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Wed Dec 7 17:39:44 2016 +0530

    loleaflet: Higher resoultion on retina displays
    
    Change-Id: Ib2a031d2d1cb88fe7fede392cfc2332a73252bbb
    (cherry picked from commit 5b06f7b916d27b05c7d9f46ecd27f200e3d1f68d)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index d830e7a..52658e7 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -45,7 +45,7 @@ L.TileLayer = L.GridLayer.extend({
 		maxNativeZoom: null, // Number
 		tms: false,
 		zoomReverse: false,
-		detectRetina: false,
+		detectRetina: true,
 		crossOrigin: false,
 		previewInvalidationTimeout: 1000
 	},
commit 7df53e19180311b1e711a4d5e78806f9256a06c9
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Wed Dec 7 17:23:24 2016 +0530

    Ununsed option in TileLayer
    
    Change-Id: Ida522fc8f92dd264e4544948394b9c7c11d993ab
    (cherry picked from commit 322e00cab7929e5b57a22a0410992b6ed7cf5df5)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 092d5dd..d830e7a 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -47,8 +47,7 @@ L.TileLayer = L.GridLayer.extend({
 		zoomReverse: false,
 		detectRetina: false,
 		crossOrigin: false,
-		previewInvalidationTimeout: 1000,
-		defaultPermission: 'view'
+		previewInvalidationTimeout: 1000
 	},
 
 	initialize: function (url, options) {
commit 0d67c9438e7e3869500261dc7cc1c086f799b84c
Author: Olivier Hallot <olivier.hallot at collabora.com>
Date:   Wed Dec 7 13:08:46 2016 +0100

    Updated pt_BR translation
    
    Change-Id: I287c8ed93991f9257245faf52c1204b60b285c14
    (cherry picked from commit 1a929bee71613ca033ab1cf07c75fbc73c76d730)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/po/ui-pt_BR.po b/loleaflet/po/ui-pt_BR.po
index 64ecbbd..592edda 100644
--- a/loleaflet/po/ui-pt_BR.po
+++ b/loleaflet/po/ui-pt_BR.po
@@ -1,18 +1,22 @@
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Olivier Hallot <olivier.hallot at gmail.com>, 2016.
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-11-01 11:35+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"Language: pt_BR\n"
+"POT-Creation-Date: 2016-12-07 13:05+0100\n"
+"PO-Revision-Date: 2016-12-06 15:47-0300\n"
+"Last-Translator: Olivier Hallot <olivier.hallot at gmail.com>\n"
+"Language-Team: Portuguese <kde-i18n-pt_BR at kde.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Translate Toolkit 1.14.0-rc1\n"
-"X-Pootle-Path: /pt_BR/libo_online/loleaflet-ui-pt_BR.po\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 2.0\n"
 "X-Pootle-Revision: 650804\n"
+"X-Pootle-Path: /pt_BR/libo_online/loleaflet-ui-pt_BR.po\n"
 
 #: admin.strings.js:5
 msgid "Admin console"
@@ -48,7 +52,7 @@ msgstr "Usuários online"
 
 #: admin.strings.js:13
 msgid "Documents opened"
-msgstr "Documentos abertos."
+msgstr "Documentos abertos"
 
 #: admin.strings.js:14
 msgid "Memory consumed"
@@ -78,17 +82,15 @@ msgstr "Finalizar"
 msgid "Graphs"
 msgstr "Gráficos"
 
-#: admin.strings.js:21
-#: dist/toolbar/toolbar.js:337
-#: src/control/Control.Menubar.js:10
-#: src/control/Control.Menubar.js:63
-#: src/control/Control.Menubar.js:109
+#: admin.strings.js:21 dist/toolbar/toolbar.js:344
+#: src/control/Control.Menubar.js:11 src/control/Control.Menubar.js:163
+#: src/control/Control.Menubar.js:219
 msgid "Save"
 msgstr "Salvar"
 
 #: admin.strings.js:22
 msgid "Cache size of memory statistics"
-msgstr "Buffer para estatística de memória"
+msgstr "Tamanho de cache para estatística de memória"
 
 #: admin.strings.js:23
 msgid "Time interval of memory statistics (in ms)"
@@ -96,7 +98,7 @@ msgstr "Amostragem da estatística de memória (em ms)"
 
 #: admin.strings.js:24
 msgid "Cache size of CPU statistics"
-msgstr "Buffer para estatística da CPU"
+msgstr "Tamanho do cache para estatística da CPU"
 
 #: admin.strings.js:25
 msgid "Time interval of CPU statistics (in ms)"
@@ -104,7 +106,7 @@ msgstr "Amostragem da estatística da CPU (em ms)"
 
 #: evol.colorpicker.strings.js:2
 msgid "Theme Colors"
-msgstr "Temas de cores"
+msgstr "Cores do tema"
 
 #: evol.colorpicker.strings.js:3
 msgid "Standard Colors"
@@ -132,7 +134,7 @@ msgstr "Copiar hiperlink"
 
 #: unocommands.js:2
 msgid "Down One Level"
-msgstr "Um nível abaixo"
+msgstr "Baixar um nível"
 
 #: unocommands.js:3
 msgid "Up One Level"
@@ -214,13 +216,13 @@ msgstr ""
 msgid ""
 "This development build is limited to %0 documents, and %1 connections - to "
 "avoid the impression that it is suitable for deployment in large "
-"enterprises. To find out more about deploying and scaling %2 checkout: <br/><"
-"a href=\"%3\">%3</a>."
+"enterprises. To find out more about deploying and scaling %2 check out: <br/"
+"><a href=\"%3\">%3</a>."
 msgstr ""
-"Este programa de teste limita-se a %0 documentos, e %1 conexões - para "
-"evitar a impressão de que é adequado para instalação em grandes empresas. "
-"Para saber mais sobre instalar e escalonar %2 verifique: <br/><a href=\"%3\""
-">%3</a>."
+"Esta programa de desenvolvimento está restrito a %0 documentos e %1 conexões "
+"- para evitar a impressão que é adequado para grandes instalações em "
+"empresas. Para saber mais sobre a instalação e escalonamento %2 verifique:  "
+"<br/><a href=\"%3\">%3</a>."
 
 #: dist/errormessages.js:4
 msgid ""
@@ -246,391 +248,415 @@ msgstr ""
 "Wrong WOPISrc, usage: WOPISrc=valid encoded URI, or file_path, usage: "
 "file_path=/path/to/doc/"
 
+#: dist/errormessages.js:7
+msgid ""
+"Your session will expire in %time. Please save your work and refresh the "
+"session (or webpage) to continue."
+msgstr ""
+"Sua sessão expirará em %time. Salve seu trabalho e atualize a sessão (ou "
+"página web) para continuar"
+
+#: dist/errormessages.js:8
+msgid ""
+"Your session has been expired. Further changes to document might not be "
+"saved. Please refresh the session (or webpage) to continue."
+msgstr ""
+"Sua sessão expirou. Modificações no documento podem não serem salvas. "
+"Atualize a sessão (ou página web) para continuar."
+
+#: dist/errormessages.js:11
+msgid ""
+"Save failed due to no disk space left on storage server. Document will now "
+"be read-only. Please contact the server administrator to continue editing."
+msgstr ""
+"Sem espaço em disco para salvar seu documento. Seu documento foi colocado "
+"como só leitura. Contacte o administrador do sistema para continuar a editar."
+
+#: dist/errormessages.js:12
+msgid ""
+"Document cannot be saved to storage. Check your permissions or contact the "
+"storage server administrator."
+msgstr ""
+"Não foi possível salvar seu documento no armazenamento. Verifique suas "
+"permissões ou contacte o administrador do servidor de armazenamento."
+
 #: dist/toolbar/toolbar.js:150
 msgid "Are you sure you want to delete this page?"
-msgstr "Tem certeza de que deseja excluir esta página?"
+msgstr "Deseja excluir esta página?"
 
-#: dist/toolbar/toolbar.js:328
+#: dist/toolbar/toolbar.js:335
 msgid "Textwrap"
 msgstr "Disposição do texto"
 
-#: dist/toolbar/toolbar.js:329
+#: dist/toolbar/toolbar.js:336
 msgid "No wrap"
 msgstr "Nenhuma"
 
-#: dist/toolbar/toolbar.js:330
+#: dist/toolbar/toolbar.js:337
 msgid "Page wrap"
 msgstr "Página"
 
-#: dist/toolbar/toolbar.js:331
+#: dist/toolbar/toolbar.js:338
 msgid "Wrap anchor only"
 msgstr "Dispor somente a âncora"
 
-#: dist/toolbar/toolbar.js:332
+#: dist/toolbar/toolbar.js:339
 msgid "Ideal wrap"
 msgstr "Página ideal"
 
-#: dist/toolbar/toolbar.js:333
+#: dist/toolbar/toolbar.js:340
 msgid "Left wrap"
 msgstr "Antes"
 
-#: dist/toolbar/toolbar.js:334
+#: dist/toolbar/toolbar.js:341
 msgid "Right wrap"
 msgstr "Depois"
 
-#: dist/toolbar/toolbar.js:335
+#: dist/toolbar/toolbar.js:342
 msgid "Wrap through"
 msgstr "Através"
 
-#: dist/toolbar/toolbar.js:339
-#: src/control/Control.Menubar.js:19
-#: src/control/Control.Menubar.js:71
-#: src/control/Control.Menubar.js:117
+#: dist/toolbar/toolbar.js:346 src/control/Control.Menubar.js:22
+#: src/control/Control.Menubar.js:173 src/control/Control.Menubar.js:229
 msgid "Undo"
 msgstr "Desfazer"
 
-#: dist/toolbar/toolbar.js:340
-#: src/control/Control.Menubar.js:20
-#: src/control/Control.Menubar.js:72
-#: src/control/Control.Menubar.js:118
+#: dist/toolbar/toolbar.js:347 src/control/Control.Menubar.js:23
+#: src/control/Control.Menubar.js:174 src/control/Control.Menubar.js:230
 msgid "Redo"
 msgstr "Refazer"
 
-#: dist/toolbar/toolbar.js:341
+#: dist/toolbar/toolbar.js:348
 msgid "Document repair"
-msgstr "Reparo do documento"
+msgstr "Reparar documento"
 
-#: dist/toolbar/toolbar.js:347
+#: dist/toolbar/toolbar.js:354 src/control/Control.Menubar.js:60
 msgid "Bold"
 msgstr "Negrito"
 
-#: dist/toolbar/toolbar.js:348
+#: dist/toolbar/toolbar.js:355 src/control/Control.Menubar.js:61
 msgid "Italic"
 msgstr "Itálico"
 
-#: dist/toolbar/toolbar.js:349
+#: dist/toolbar/toolbar.js:356 src/control/Control.Menubar.js:62
 msgid "Underline"
 msgstr "Sublinhado"
 
-#: dist/toolbar/toolbar.js:350
+#: dist/toolbar/toolbar.js:357
 msgid "Strikeout"
 msgstr "Tachado"
 
-#: dist/toolbar/toolbar.js:352
+#: dist/toolbar/toolbar.js:359
 msgid "Insert Footnote"
 msgstr "Inserir nota de rodapé"
 
-#: dist/toolbar/toolbar.js:355
+#: dist/toolbar/toolbar.js:362
 msgid "Font color"
 msgstr "Cor da fonte"
 
-#: dist/toolbar/toolbar.js:357
+#: dist/toolbar/toolbar.js:364
 msgid "Highlighting"
 msgstr "Destaque"
 
-#: dist/toolbar/toolbar.js:359
+#: dist/toolbar/toolbar.js:366
 msgid "Align left"
 msgstr "Alinhar à esquerda"
 
-#: dist/toolbar/toolbar.js:360
+#: dist/toolbar/toolbar.js:367
 msgid "Center horizontally"
 msgstr "Centralizar horizontalmente"
 
-#: dist/toolbar/toolbar.js:361
+#: dist/toolbar/toolbar.js:368
 msgid "Align right"
-msgstr "Alinha à direita"
+msgstr "Alinhar à direita"
 
-#: dist/toolbar/toolbar.js:362
+#: dist/toolbar/toolbar.js:369 src/control/Control.Menubar.js:101
 msgid "Justified"
 msgstr "Justificado"
 
-#: dist/toolbar/toolbar.js:364
+#: dist/toolbar/toolbar.js:370
+msgid "Wrap Text"
+msgstr "Disposição do texto"
+
+#: dist/toolbar/toolbar.js:371
+msgid "Merge and Center Cells"
+msgstr "Mesclar e centralizar células"
+
+#: dist/toolbar/toolbar.js:373
+msgid "Format as Currency"
+msgstr "Formatar como moeda"
+
+#: dist/toolbar/toolbar.js:374
+msgid "Format as Percent"
+msgstr "Formatar como porcentagem"
+
+#: dist/toolbar/toolbar.js:375
+msgid "Format as Number"
+msgstr "Formatar como número"
+
+#: dist/toolbar/toolbar.js:376
+msgid "Format as Date"
+msgstr "Formatar como data"
+
+#: dist/toolbar/toolbar.js:377
+msgid "Add Decimal Place"
+msgstr "Adicionar casa decimal"
+
+#: dist/toolbar/toolbar.js:378
+msgid "Delete Decimal Place"
+msgstr "Remover casa decimal"
+
+#: dist/toolbar/toolbar.js:380
+msgid "Sort Ascending"
+msgstr "Ordem crescente"
+
+#: dist/toolbar/toolbar.js:381
+msgid "Sort Descending"
+msgstr "Ordem decrescente"
+
+#: dist/toolbar/toolbar.js:383 src/control/Control.Menubar.js:107
 msgid "Bullets on/off"
 msgstr "Ativar/Desativar marcadores"
 
-#: dist/toolbar/toolbar.js:365
+#: dist/toolbar/toolbar.js:384 src/control/Control.Menubar.js:108
 msgid "Numbering on/off"
 msgstr "Ativar / desativar numeração"
 
-#: dist/toolbar/toolbar.js:367
+#: dist/toolbar/toolbar.js:386 src/control/Control.Menubar.js:95
 msgid "Increase indent"
 msgstr "Aumentar recuo"
 
-#: dist/toolbar/toolbar.js:368
+#: dist/toolbar/toolbar.js:387 src/control/Control.Menubar.js:96
 msgid "Decrease indent"
 msgstr "Diminuir recuo"
 
-#: dist/toolbar/toolbar.js:371
+#: dist/toolbar/toolbar.js:390
 msgid "Insert table"
 msgstr "Inserir tabela"
 
-#: dist/toolbar/toolbar.js:372
+#: dist/toolbar/toolbar.js:391
 msgid "Insert comment"
 msgstr "Inserir comentário"
 
-#: dist/toolbar/toolbar.js:373
+#: dist/toolbar/toolbar.js:392
 msgid "Insert graphic"
 msgstr "Inserir figura"
 
-#: dist/toolbar/toolbar.js:375
+#: dist/toolbar/toolbar.js:393
+msgid "Special Character"
+msgstr "Caractere especial"
+
+#: dist/toolbar/toolbar.js:395
 msgid "More"
 msgstr "Mais"
 
-#: dist/toolbar/toolbar.js:376
+#: dist/toolbar/toolbar.js:396
 msgid "Close document"
 msgstr "Fechar documento"
 
-#: dist/toolbar/toolbar.js:406
-#: dist/toolbar/toolbar.js:776
+#: dist/toolbar/toolbar.js:426 dist/toolbar/toolbar.js:790
 msgid "Sum"
 msgstr "Soma"
 
-#: dist/toolbar/toolbar.js:407
+#: dist/toolbar/toolbar.js:427
 msgid "Function"
 msgstr "Função"
 
-#: dist/toolbar/toolbar.js:408
+#: dist/toolbar/toolbar.js:428 src/control/Control.CharacterMap.js:428
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: dist/toolbar/toolbar.js:409
+#: dist/toolbar/toolbar.js:429
 msgid "Accept"
 msgstr "Aceitar"
 
-#: dist/toolbar/toolbar.js:420
+#: dist/toolbar/toolbar.js:440
 msgid "First sheet"
 msgstr "Primeira planilha"
 
-#: dist/toolbar/toolbar.js:421
+#: dist/toolbar/toolbar.js:441
 msgid "Previous sheet"
 msgstr "Planilha anterior"
 
-#: dist/toolbar/toolbar.js:422
+#: dist/toolbar/toolbar.js:442
 msgid "Next sheet"
-msgstr "Próxima Planilha"
+msgstr "Próxima planilha"
 
-#: dist/toolbar/toolbar.js:423
+#: dist/toolbar/toolbar.js:443
 msgid "Last sheet"
 msgstr "Última planilha"
 
-#: dist/toolbar/toolbar.js:433
-#: src/control/Control.Menubar.js:101
+#: dist/toolbar/toolbar.js:453 src/control/Control.Menubar.js:209
 msgid "Fullscreen presentation"
 msgstr "Apresentação de slide"
 
-#: dist/toolbar/toolbar.js:435
+#: dist/toolbar/toolbar.js:455
 msgid "Insert slide"
 msgstr "Inserir slide"
 
-#: dist/toolbar/toolbar.js:436
-#: src/control/Control.Menubar.js:98
+#: dist/toolbar/toolbar.js:456 src/control/Control.Menubar.js:206
 msgid "Duplicate slide"
 msgstr "Duplicar slide"
 
-#: dist/toolbar/toolbar.js:437
-#: src/control/Control.Menubar.js:99
+#: dist/toolbar/toolbar.js:457 src/control/Control.Menubar.js:207
 msgid "Delete slide"
 msgstr "Excluir slide"
 
-#: dist/toolbar/toolbar.js:450
+#: dist/toolbar/toolbar.js:470
 msgid "Search:"
 msgstr "Pesquisar:"
 
-#: dist/toolbar/toolbar.js:455
+#: dist/toolbar/toolbar.js:475
 msgid "Search backwards"
 msgstr "Pesquisar para trás"
 
-#: dist/toolbar/toolbar.js:456
+#: dist/toolbar/toolbar.js:476
 msgid "Search forward"
 msgstr "Pesquisar para frente"
 
-#: dist/toolbar/toolbar.js:457
+#: dist/toolbar/toolbar.js:477
 msgid "Cancel the search"
-msgstr "Cancela a pesquisa"
+msgstr "Cancelar a pesquisa"
 
-#: dist/toolbar/toolbar.js:462
-#: dist/toolbar/toolbar.js:1326
+#: dist/toolbar/toolbar.js:482 dist/toolbar/toolbar.js:1350
 msgid "No users"
 msgstr "Sem usuários"
 
-#: dist/toolbar/toolbar.js:464
+#: dist/toolbar/toolbar.js:484
 msgid "Previous page"
 msgstr "Página anterior"
 
-#: dist/toolbar/toolbar.js:465
+#: dist/toolbar/toolbar.js:485
 msgid "Next page"
 msgstr "Próxima página"
 
-#: dist/toolbar/toolbar.js:467
-#: src/control/Control.Menubar.js:41
-#: src/control/Control.Menubar.js:86
-#: src/control/Control.Menubar.js:136
+#: dist/toolbar/toolbar.js:487 src/control/Control.Menubar.js:36
+#: src/control/Control.Menubar.js:187
 msgid "Reset zoom"
 msgstr "Restaurar zoom"
 
-#: dist/toolbar/toolbar.js:468
-#: src/control/Control.Menubar.js:40
-#: src/control/Control.Menubar.js:85
-#: src/control/Control.Menubar.js:135
+#: dist/toolbar/toolbar.js:488 src/control/Control.Menubar.js:35
+#: src/control/Control.Menubar.js:186
 msgid "Zoom out"
 msgstr "Reduzir"
 
-#: dist/toolbar/toolbar.js:470
-#: src/control/Control.Menubar.js:39
-#: src/control/Control.Menubar.js:84
-#: src/control/Control.Menubar.js:134
+#: dist/toolbar/toolbar.js:490 src/control/Control.Menubar.js:34
+#: src/control/Control.Menubar.js:185
 msgid "Zoom in"
 msgstr "Ampliar"
 
-#: dist/toolbar/toolbar.js:494
+#: dist/toolbar/toolbar.js:519
 msgid "%user has joined"
 msgstr "%user conectou"
 
-#: dist/toolbar/toolbar.js:495
+#: dist/toolbar/toolbar.js:520
 msgid "%user has left"
 msgstr "%user desconectou"
 
-#: dist/toolbar/toolbar.js:625
-#: dist/toolbar/toolbar.js:1115
+#: dist/toolbar/toolbar.js:650 dist/toolbar/toolbar.js:1113
 msgid "Size"
 msgstr "Tamanho"
 
-#: dist/toolbar/toolbar.js:757
+#: dist/toolbar/toolbar.js:771
 msgid "Number of Sheets"
 msgstr "Nº de planilhas"
 
-#: dist/toolbar/toolbar.js:760
+#: dist/toolbar/toolbar.js:774
 msgid "Selected range of cells"
 msgstr "Intervalo de células selecionado"
 
-#: dist/toolbar/toolbar.js:763
-#: dist/toolbar/toolbar.js:809
+#: dist/toolbar/toolbar.js:777 dist/toolbar/toolbar.js:808
 msgid "Entering text mode"
 msgstr "Entrar no modo de texto"
 
-#: dist/toolbar/toolbar.js:766
-#: dist/toolbar/toolbar.js:812
+#: dist/toolbar/toolbar.js:780 dist/toolbar/toolbar.js:811
 msgid "Selection Mode"
 msgstr "Modo de seleção"
 
-#: dist/toolbar/toolbar.js:769
+#: dist/toolbar/toolbar.js:783
 msgid "Choice of functions"
-msgstr "Escolha de funções"
+msgstr "Seleção de funções"
 
-#: dist/toolbar/toolbar.js:771
+#: dist/toolbar/toolbar.js:785
 msgid "Average"
 msgstr "Média"
 
-#: dist/toolbar/toolbar.js:772
+#: dist/toolbar/toolbar.js:786
 msgid "CountA"
 msgstr "ContagemA"
 
-#: dist/toolbar/toolbar.js:773
+#: dist/toolbar/toolbar.js:787
 msgid "Count"
 msgstr "Contagem"
 
-#: dist/toolbar/toolbar.js:774
+#: dist/toolbar/toolbar.js:788
 msgid "Maximum"
 msgstr "Máximo"
 
-#: dist/toolbar/toolbar.js:775
+#: dist/toolbar/toolbar.js:789
 msgid "Minimum"
 msgstr "Mínimo"
 
-#: dist/toolbar/toolbar.js:777
+#: dist/toolbar/toolbar.js:791
 msgid "Selection count"
 msgstr "Contagem da seleção"
 
-#: dist/toolbar/toolbar.js:778
+#: dist/toolbar/toolbar.js:792 src/control/Control.CharacterMap.js:11
 msgid "None"
 msgstr "Nenhum"
 
-#: dist/toolbar/toolbar.js:783
-msgid "Wrap Text"
-msgstr "Disposição do texto"
-
-#: dist/toolbar/toolbar.js:784
-msgid "Merge and Center Cells"
-msgstr "Mesclar e centralizar células"
-
-#: dist/toolbar/toolbar.js:786
-msgid "Format as Currency"
-msgstr "Formatar como moeda"
-
-#: dist/toolbar/toolbar.js:787
-msgid "Format as Percent"
-msgstr "Formatar como porcentagem"
-
-#: dist/toolbar/toolbar.js:788
-msgid "Format as Number"
-msgstr "Formatar como número"
-
-#: dist/toolbar/toolbar.js:789
-msgid "Format as Date"
-msgstr "Formatar como data"
-
-#: dist/toolbar/toolbar.js:790
-msgid "Add Decimal Place"
-msgstr "Adicionar casa decimal"
-
-#: dist/toolbar/toolbar.js:791
-msgid "Delete Decimal Place"
-msgstr "Remover casa decimal"
-
-#: dist/toolbar/toolbar.js:793
-msgid "Sort Ascending"
-msgstr "Ordem crescente"
-
-#: dist/toolbar/toolbar.js:794
-msgid "Sort Descending"
-msgstr "Ordem decrescente"
-
-#: dist/toolbar/toolbar.js:803
+#: dist/toolbar/toolbar.js:802
 msgid "Number of Pages"
 msgstr "Nº de páginas"
 
-#: dist/toolbar/toolbar.js:806
+#: dist/toolbar/toolbar.js:805
 msgid "Word Counter"
 msgstr "Contagem de palavras"
 
-#: dist/toolbar/toolbar.js:820
+#: dist/toolbar/toolbar.js:822
 msgid "Number of Slides"
 msgstr "Nº de slides"
 
-#: dist/toolbar/toolbar.js:939
+#: dist/toolbar/toolbar.js:949
 msgid "Document saved"
 msgstr "Documento salvo"
 
-#: dist/toolbar/toolbar.js:1098
+#: dist/toolbar/toolbar.js:1096
 msgid "Style"
 msgstr "Estilo"
 
-#: dist/toolbar/toolbar.js:1110
+#: dist/toolbar/toolbar.js:1108
 msgid "Font"
 msgstr "Fonte"
 
-#: dist/toolbar/toolbar.js:1134
+#: dist/toolbar/toolbar.js:1132
 msgid "Previous slide"
 msgstr "Slide anterior"
 
-#: dist/toolbar/toolbar.js:1135
+#: dist/toolbar/toolbar.js:1133
 msgid "Next slide"
 msgstr "Próximo slide"
 
-#: dist/toolbar/toolbar.js:1303
+#: dist/toolbar/toolbar.js:1191
+msgid ""
+"Conflict Undo/Redo with multiple users. Please use document repair to resolve"
+msgstr ""
+"Ocorreu um conflito ao desfazer ou refazer com múltiplos usuários. Utilize a "
+"reparação de documentos para resolver"
+
+#: dist/toolbar/toolbar.js:1306
 msgid "Layout"
 msgstr "Layout"
 
-#: dist/toolbar/toolbar.js:1317
+#: dist/toolbar/toolbar.js:1341
 msgid "%n users"
 msgstr "%n usuários"
 
-#: dist/toolbar/toolbar.js:1324
+#: dist/toolbar/toolbar.js:1348
 msgid "1 user"
 msgstr "1 usuário"
 
-#: dist/toolbar/toolbar.js:1349
-#: src/control/Control.DocumentRepair.js:87
+#: dist/toolbar/toolbar.js:1375 src/control/Control.DocumentRepair.js:87
 msgid "You"
 msgstr "Você"
 
@@ -658,331 +684,1626 @@ msgstr "GB"
 msgid "TB"
 msgstr "TB"
 
-#: src/admin/Util.js:41
+#: src/admin/Util.js:42 src/admin/Util.js:44
 msgid " hrs"
-msgstr " horas"
+msgstr " hs"
 
-#: src/admin/Util.js:43
+#: src/admin/Util.js:48 src/admin/Util.js:50
 msgid " mins"
-msgstr " min"
+msgstr " mins"
 
-#: src/admin/Util.js:45
+#: src/admin/Util.js:53
 msgid " s"
 msgstr "s"
 
-#: src/control/Control.ColumnHeader.js:38
-msgid "Insert column before"
-msgstr "Inserir coluna antes"
+#: src/control/Control.CharacterMap.js:12
+msgid "Basic Latin"
+msgstr "Latim básico"
 
-#: src/control/Control.ColumnHeader.js:45
-#: src/control/Control.Menubar.js:142
-msgid "Delete column"
-msgstr "Excluir coluna"
+#: src/control/Control.CharacterMap.js:13
+msgid "Latin-1"
+msgstr "Latim-1"
 
-#: src/control/Control.ColumnHeader.js:52
-msgid "Optimal Width"
-msgstr "Largura ideal"
+#: src/control/Control.CharacterMap.js:14
+msgid "Latin Extended-A"
+msgstr "Latim estendido-A"
 
-#: src/control/Control.ColumnHeader.js:67
-msgid "Optimal Column Width"
-msgstr "Largura de coluna ideal"
+#: src/control/Control.CharacterMap.js:15
+msgid "Latin Extended-B"
+msgstr "Latim estendido-B"
 
-#: src/control/Control.DocumentRepair.js:32
-msgid "Repair Document"
-msgstr "Reparar documento"
+#: src/control/Control.CharacterMap.js:16
+msgid "IPA Extensions"
+msgstr "Extensões IPA"
 
-#: src/control/Control.DocumentRepair.js:40
-msgid "Type"
-msgstr "Tipo"
+#: src/control/Control.CharacterMap.js:17
+msgid "Spacing Modifier Letters"
+msgstr "Letras modificadoras de espaços"
 
-#: src/control/Control.DocumentRepair.js:42
-msgid "Index"
-msgstr "Índice"
+#: src/control/Control.CharacterMap.js:18
+msgid "Combining Diacritical Marks"
+msgstr "Marcas diacríticas combinadas"
 
-#: src/control/Control.DocumentRepair.js:44
-#: src/control/Control.Menubar.js:29
-#: src/control/Control.Menubar.js:127
-msgid "Comment"
-msgstr "Comentário"
+#: src/control/Control.CharacterMap.js:19
+msgid "Basic Greek"
+msgstr "Grego básico"
 
-#: src/control/Control.DocumentRepair.js:46
-msgid "User name"
-msgstr "Nome de usuário"
+#: src/control/Control.CharacterMap.js:20
+msgid "Cyrillic"
+msgstr "Cirílico"
 
-#: src/control/Control.DocumentRepair.js:48
-msgid "Timestamp"
-msgstr "Marca de tempo"
+#: src/control/Control.CharacterMap.js:21
+msgid "Armenian"
+msgstr "Armênio"
 
-#: src/control/Control.DocumentRepair.js:52
-msgid "Jump to state"
-msgstr "Saltar para o estado"
+#: src/control/Control.CharacterMap.js:22
+msgid "Basic Hebrew"
+msgstr "Hebraico básico"
 
-#: src/control/Control.Menubar.js:10
-#: src/control/Control.Menubar.js:63
-#: src/control/Control.Menubar.js:109
-msgid "File"
-msgstr "Arquivo"
+#: src/control/Control.CharacterMap.js:23
+msgid "Basic Arabic"
+msgstr "Árabe básico"
 
-#: src/control/Control.Menubar.js:11
-#: src/control/Control.Menubar.js:64
-#: src/control/Control.Menubar.js:110
-msgid "Print"
-msgstr "Imprimir"
+#: src/control/Control.CharacterMap.js:24
+msgid "Syriac"
+msgstr "Sírio"
 
-#: src/control/Control.Menubar.js:12
-#: src/control/Control.Menubar.js:65
-#: src/control/Control.Menubar.js:111
-msgid "See revision history"
-msgstr "Histórico de revisões"
+#: src/control/Control.CharacterMap.js:25
+msgid "Thaana"
+msgstr "Thaana"
 
-#: src/control/Control.Menubar.js:13
-#: src/control/Control.Menubar.js:66
-#: src/control/Control.Menubar.js:112
-msgid "Download as"
-msgstr "Baixar como"
+#: src/control/Control.CharacterMap.js:26
+msgid "Devanagari"
+msgstr "Devanagari"
 
-#: src/control/Control.Menubar.js:13
-#: src/control/Control.Menubar.js:66
-#: src/control/Control.Menubar.js:112
-msgid "PDF Document (.pdf)"
-msgstr "Documento PDF (.pdf)"
+#: src/control/Control.CharacterMap.js:27
+msgid "Bengali"
+msgstr "Bengali"
 
-#: src/control/Control.Menubar.js:14
-msgid "ODF text document (.odt)"
-msgstr "Documento de texto ODF (.odt)"
+#: src/control/Control.CharacterMap.js:28
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
 
-#: src/control/Control.Menubar.js:15
-msgid "Microsoft Word 2003 (.doc)"
-msgstr "Microsoft Word 2003 (.doc)"
+#: src/control/Control.CharacterMap.js:29
+msgid "Gujarati"
+msgstr "Gujarati"
 
-#: src/control/Control.Menubar.js:16
-msgid "Microsoft Word (.docx)"
-msgstr "Microsoft Word (.docx)"
+#: src/control/Control.CharacterMap.js:30
+msgid "Odia"
+msgstr "Odia"
 
-#: src/control/Control.Menubar.js:18
-#: src/control/Control.Menubar.js:71
-#: src/control/Control.Menubar.js:117
-msgid "Edit"
-msgstr "Editar"
+#: src/control/Control.CharacterMap.js:31
+msgid "Tamil"
+msgstr "Tamil"
 
-#: src/control/Control.Menubar.js:18
-msgid "Repair"
-msgstr "Reparar"
+#: src/control/Control.CharacterMap.js:32
+msgid "Telugu"
+msgstr "Telugu"
 
-#: src/control/Control.Menubar.js:22
-#: src/control/Control.Menubar.js:74
-#: src/control/Control.Menubar.js:120
-msgid "Cut"
-msgstr "Cortar"
+#: src/control/Control.CharacterMap.js:33
+msgid "Kannada"
+msgstr "Kannada"
 
-#: src/control/Control.Menubar.js:23
-#: src/control/Control.Menubar.js:75
-#: src/control/Control.Menubar.js:121
-msgid "Copy"
-msgstr "Copiar"
+#: src/control/Control.CharacterMap.js:34
+msgid "Malayalam"
+msgstr "Malaio"
 
-#: src/control/Control.Menubar.js:24
-#: src/control/Control.Menubar.js:76
-#: src/control/Control.Menubar.js:122
-msgid "Paste"
-msgstr "Colar"
+#: src/control/Control.CharacterMap.js:35
+msgid "Sinhala"
+msgstr "Sinhala"
 
-#: src/control/Control.Menubar.js:26
-#: src/control/Control.Menubar.js:78
-#: src/control/Control.Menubar.js:124
-msgid "Select all"
-msgstr "Selecionar tudo"
+#: src/control/Control.CharacterMap.js:36
+msgid "Thai"
+msgstr "Thailandês"
 
-#: src/control/Control.Menubar.js:28
-#: src/control/Control.Menubar.js:43
-#: src/control/Control.Menubar.js:80
-#: src/control/Control.Menubar.js:88
-#: src/control/Control.Menubar.js:126
-msgid "Insert"
-msgstr "Inserir"
+#: src/control/Control.CharacterMap.js:37
+msgid "Lao"
+msgstr "Laociano"
 
-#: src/control/Control.Menubar.js:28
-#: src/control/Control.Menubar.js:80
-#: src/control/Control.Menubar.js:126
-msgid "Image"
-msgstr "Imagem"
+#: src/control/Control.CharacterMap.js:38
+msgid "Tibetan"
+msgstr "Tibetano"
 
-#: src/control/Control.Menubar.js:31
-msgid "Footnote"
-msgstr "Nota de rodapé"
+#: src/control/Control.CharacterMap.js:39
+msgid "Myanmar"
+msgstr "Myanmar"
 
-#: src/control/Control.Menubar.js:32
-msgid "Endnote"
-msgstr "Nota de fim"
+#: src/control/Control.CharacterMap.js:40
+msgid "Basic Georgian"
+msgstr "Georgiano básico"
 
-#: src/control/Control.Menubar.js:34
-msgid "Page break"
-msgstr "Quebra de página"
+#: src/control/Control.CharacterMap.js:41
+msgid "Hangul Jamo"
+msgstr "Hangul Jamo"
 
-#: src/control/Control.Menubar.js:35
-msgid "Column break"
-msgstr "Quebra de coluna"
+#: src/control/Control.CharacterMap.js:43
+msgid "Ethiopic"
+msgstr "Etíope"
 
-#: src/control/Control.Menubar.js:37
-#: src/control/Control.Menubar.js:82
-#: src/control/Control.Menubar.js:132
-msgid "View"
-msgstr "Visualizar"
+#: src/control/Control.CharacterMap.js:44
+msgid "Cherokee"
+msgstr "Cherokee"
 
-#: src/control/Control.Menubar.js:37
-#: src/control/Control.Menubar.js:82
-#: src/control/Control.Menubar.js:132
-msgid "Full screen"
-msgstr "Tela cheia"
+#: src/control/Control.CharacterMap.js:46
+msgid "Canadian Aboriginal Syllables"
+msgstr "Sílabas arborígenes canadenses"
 
-#: src/control/Control.Menubar.js:43
-#: src/control/Control.Menubar.js:88
-msgid "Tables"
-msgstr "Tabelas"
+#: src/control/Control.CharacterMap.js:47
+msgid "Ogham"
+msgstr "Ogham"
 
-#: src/control/Control.Menubar.js:43
-#: src/control/Control.Menubar.js:88
-msgid "Rows before"
-msgstr "Linhas antes"
+#: src/control/Control.CharacterMap.js:48
+msgid "Runic"
+msgstr "Runic"
 
-#: src/control/Control.Menubar.js:44
-#: src/control/Control.Menubar.js:89
-msgid "Rows after"
-msgstr "Linhas após"
+#: src/control/Control.CharacterMap.js:49
+msgid "Khmer"
+msgstr "Khmer"
 
-#: src/control/Control.Menubar.js:46
-#: src/control/Control.Menubar.js:91
-msgid "Columns left"
-msgstr "Colunas à esquerda"
+#: src/control/Control.CharacterMap.js:50
+msgid "Mongolian"
+msgstr "Mongol"
 
-#: src/control/Control.Menubar.js:47
-#: src/control/Control.Menubar.js:92
-msgid "Columns right"
-msgstr "Colunas à direita"
+#: src/control/Control.CharacterMap.js:51
+msgid "Latin Extended Additional"
+msgstr "Latim estendido adicional"
 
-#: src/control/Control.Menubar.js:48
-#: src/control/Control.Menubar.js:93
-msgid "Delete"
-msgstr "Excluir"
+#: src/control/Control.CharacterMap.js:52
+msgid "Greek Extended"
+msgstr "Grego estendido"
+
+#: src/control/Control.CharacterMap.js:53
+msgid "General Punctuation"
+msgstr "Pontuação geral"
+
+#: src/control/Control.CharacterMap.js:54
+msgid "Superscripts and Subscripts"
+msgstr "Sobrescritos e subscritos"
+
+#: src/control/Control.CharacterMap.js:55
+msgid "Currency Symbols"
+msgstr "Símbolos monetários"
+
+#: src/control/Control.CharacterMap.js:56
+msgid "Combining Diacritical Symbols"
+msgstr "Símbolos diacríticos combinados"
+
+#: src/control/Control.CharacterMap.js:57
+msgid "Letterlike Symbols"
+msgstr "Símbolos letterlike"
+
+#: src/control/Control.CharacterMap.js:58
+msgid "Number Forms"
+msgstr "Formas numéricas"
+
+#: src/control/Control.CharacterMap.js:59
+msgid "Arrows"
+msgstr "Setas"
+
+#: src/control/Control.CharacterMap.js:60
+msgid "Mathematical Operators"
+msgstr "Operadores matemáticos"
+
+#: src/control/Control.CharacterMap.js:61
+msgid "Miscellaneous Technical"
+msgstr "Miscelânea de técnicas"
+
+#: src/control/Control.CharacterMap.js:62
+msgid "Control Pictures"
+msgstr "Imagens de controle"
+
+#: src/control/Control.CharacterMap.js:63
+msgid "Optical Character Recognition"
+msgstr "Reconhecimento ótico de caracteres"
+
+#: src/control/Control.CharacterMap.js:64
+msgid "Enclosed Alphanumerics"
+msgstr "Alfanuméricos envolvidos"
+
+#: src/control/Control.CharacterMap.js:65
+msgid "Box Drawing"
+msgstr "Desenho de caixa"
+
+#: src/control/Control.CharacterMap.js:66
+msgid "Block Elements"
+msgstr "Elementos de bloco"
+
+#: src/control/Control.CharacterMap.js:67
+msgid "Geometric Shapes"
+msgstr "Formas geométricas"
+
+#: src/control/Control.CharacterMap.js:68
+msgid "Miscellaneous Symbols"
+msgstr "Miscelânea de símbolos"
+
+#: src/control/Control.CharacterMap.js:69
+msgid "Dingbats"
+msgstr "Dingbats"
+
+#: src/control/Control.CharacterMap.js:70
+msgid "Braille Patterns"
+msgstr "Padrões Braille"
+
+#: src/control/Control.CharacterMap.js:71
+msgid "CJK Radicals Supplement"
+msgstr "Suplementos radicais CJK"
+
+#: src/control/Control.CharacterMap.js:72
+msgid "Kangxi Radicals"
+msgstr "Radicais Kangxi"
+
+#: src/control/Control.CharacterMap.js:73
+msgid "Ideographic Description Characters"
+msgstr "Caracteres de descrição ideográficos"
+
+#: src/control/Control.CharacterMap.js:74
+msgid "CJK Symbols and Punctuation"
+msgstr "Símbolos e pontuação CJK"
+
+#: src/control/Control.CharacterMap.js:75
+msgid "Hiragana"
+msgstr "Hiragana"
+
+#: src/control/Control.CharacterMap.js:76
+msgid "Katakana"
+msgstr "Katakana"
+
+#: src/control/Control.CharacterMap.js:77
+msgid "Bopomofo"
+msgstr "Bopomofo"
+
+#: src/control/Control.CharacterMap.js:78
+msgid "Hangul Compatability Jamo"
+msgstr "Hangul Compatability Jamo"
+
+#: src/control/Control.CharacterMap.js:79
+msgid "Kanbun"
+msgstr "Kanbun"
+
+#: src/control/Control.CharacterMap.js:80
+msgid "Bopomofo Extended"
+msgstr "Bopomofo estendido"
+
+#: src/control/Control.CharacterMap.js:81
+msgid "Enclosed CJK Letters and Months"
+msgstr "Letras e meses CJK envolvidos"
+
+#: src/control/Control.CharacterMap.js:82
+msgid "CJK Compatibility"
+msgstr "Compatibilidade CJK"
+
+#: src/control/Control.CharacterMap.js:84
+msgid "CJK Unified Ideographs Extension A"
+msgstr "Ideográfos unificados CJK estendidos A"
+
+#: src/control/Control.CharacterMap.js:86
+msgid "CJK Unified Ideographs"
+msgstr "Ideográfos unificados CJK"
+
+#: src/control/Control.CharacterMap.js:88
+msgid "Yi Syllables"
+msgstr "Sílabas Yi"
+
+#: src/control/Control.CharacterMap.js:90
+msgid "Yi Radicals"
+msgstr "Radicais Yi"
+
+#: src/control/Control.CharacterMap.js:92
+msgid "Hangul"
+msgstr "Hangul"
+
+#: src/control/Control.CharacterMap.js:94
+msgid "High Surrogates"
+msgstr "High Surrogates"
+
+#: src/control/Control.CharacterMap.js:95
+msgid "High Private Use Surrogates"
+msgstr "High Private Use Surrogates"
+
+#: src/control/Control.CharacterMap.js:97
+msgid "Low Surrogates"
+msgstr "Low Surrogates"
+
+#: src/control/Control.CharacterMap.js:99
+msgid "Private Use Area"
+msgstr "Área de uso privativo"
+
+#: src/control/Control.CharacterMap.js:101
+msgid "CJK Compatibility Ideographs"
+msgstr "Ideógrafos de Compatibilidade CJK"
+
+#: src/control/Control.CharacterMap.js:102
+msgid "Alphabetic Presentation Forms"
+msgstr "Formas de apresentação alfabética"
+
+#: src/control/Control.CharacterMap.js:104
+msgid "Arabic Presentation Forms-A"
+msgstr "Formas de apresentação arábica -A"
+
+#: src/control/Control.CharacterMap.js:105
+msgid "Combining Half Marks"
+msgstr "Meia marcas combinantes"
+
+#: src/control/Control.CharacterMap.js:106
+msgid "CJK Compatibility Forms"
+msgstr "Formas de compatibilidade CJK"
+
+#: src/control/Control.CharacterMap.js:107
+msgid "Small Form Variants"
+msgstr "Variantes de formas pequenas"
+
+#: src/control/Control.CharacterMap.js:108
+msgid "Arabic Presentation Forms-B"
+msgstr "Formas de apresentação árabe-B"
+
+#: src/control/Control.CharacterMap.js:109
+msgid "Specials"
+msgstr "Especiais"
+
+#: src/control/Control.CharacterMap.js:110
+msgid "Halfwidth and Fullwidth Forms"
+msgstr "Formas de meia largura e largura inteira"
+
+#: src/control/Control.CharacterMap.js:111
+msgid "Old Italic"
+msgstr "Itálico antigo"
+
+#: src/control/Control.CharacterMap.js:112
+msgid "Gothic"
+msgstr "Gótico"
+
+#: src/control/Control.CharacterMap.js:113
+msgid "Deseret"
+msgstr "Deseret"
+
+#: src/control/Control.CharacterMap.js:114
+msgid "Byzantine Musical Symbols"
+msgstr "Símbolos musicais bizantinos"
+
+#: src/control/Control.CharacterMap.js:115
+#: src/control/Control.CharacterMap.js:116
+msgid "Musical Symbols"
+msgstr "Símbolos musicais"
+
+#: src/control/Control.CharacterMap.js:118
+msgid "CJK Unified Ideographs Extension B"
+msgstr "Ideógrafos unificados CJK estendidos B"
+
+#: src/control/Control.CharacterMap.js:121
+msgid "CJK Compatibility Ideographs Supplement"
+msgstr "Ideógrafos de compatibilidade suplementares CJK"
+
+#: src/control/Control.CharacterMap.js:122
+msgid "Tags"
+msgstr "Tags"
+
+#: src/control/Control.CharacterMap.js:123
+msgid "Cyrillic Supplement"
+msgstr "Suplemeneto cirílico"
+
+#: src/control/Control.CharacterMap.js:124
+msgid "Tagalog"
+msgstr "Tagalog"
+
+#: src/control/Control.CharacterMap.js:125
+msgid "Hanunoo"
+msgstr "Hanunoo"
+
+#: src/control/Control.CharacterMap.js:126
+msgid "Buhid"
+msgstr "Buhid"
+
+#: src/control/Control.CharacterMap.js:127
+msgid "Tagbanwa"
+msgstr "Tagbanwa"
+
+#: src/control/Control.CharacterMap.js:128
+msgid "Miscellaneous Mathematical Symbols-A"
+msgstr "Miscelânea de símbolos matemáticos-A"
+
+#: src/control/Control.CharacterMap.js:129
+msgid "Supplemental Arrows-A"
+msgstr "Setas suplementares-A"
+
+#: src/control/Control.CharacterMap.js:130
+msgid "Supplemental Arrows-B"
+msgstr "Setas suplementares-B"
+
+#: src/control/Control.CharacterMap.js:131
+msgid "Miscellaneous Mathematical Symbols-B"
+msgstr "Miscelânea de símbolos matemáticos-B"
+
+#: src/control/Control.CharacterMap.js:132
+msgid "Supplemental Mathematical Operators"
+msgstr "Operadores matemáticos suplementares"
+
+#: src/control/Control.CharacterMap.js:133
+msgid "Katakana Phonetics Extensions"
+msgstr "Extensões fonéticas Katakana"
+
+#: src/control/Control.CharacterMap.js:134
+msgid "Variation Selectors"
+msgstr "Seletores de variação"
+
+#: src/control/Control.CharacterMap.js:136
+msgid "Supplementary Private Use Area-A"
+msgstr "Área de uso privativo suplementar-A"
+
+#: src/control/Control.CharacterMap.js:139
+msgid "Supplementary Private Use Area-B"
+msgstr "Área de uso privativo suplementar-B"
+
+#: src/control/Control.CharacterMap.js:140
+msgid "Limbu"
+msgstr "Limbu"
+
+#: src/control/Control.CharacterMap.js:141
+msgid "Tai Le"
+msgstr "Tai Le"
+
+#: src/control/Control.CharacterMap.js:142
+msgid "Khmer Symbols"
+msgstr "Símbolos Khmer"
+
+#: src/control/Control.CharacterMap.js:143
+msgid "Phonetic Extensions"
+msgstr "Extensões fonéticas"
+
+#: src/control/Control.CharacterMap.js:144
+msgid "Miscellaneous Symbols And Arrows"
+msgstr "Miscelânea de símbolos e setas"
+
+#: src/control/Control.CharacterMap.js:145
+msgid "Yijing Hexagram Symbols"
+msgstr "Símbolos de hexagramas Yijing"
+
+#: src/control/Control.CharacterMap.js:146
+msgid "Linear B Syllabary"
+msgstr "Linear B Syllabary"
+
+#: src/control/Control.CharacterMap.js:147
+msgid "Linear B Ideograms"
+msgstr "Ideogramas linear B"
+
+#: src/control/Control.CharacterMap.js:148
+msgid "Aegean Numbers"
+msgstr "Números Aegean"
+
+#: src/control/Control.CharacterMap.js:149
+msgid "Ugaritic"
+msgstr "Ugaritic"
+
+#: src/control/Control.CharacterMap.js:150
+msgid "Shavian"
+msgstr "Shavian"
+
+#: src/control/Control.CharacterMap.js:151
+msgid "Osmanya"
+msgstr "Osmanya"
+
+#: src/control/Control.CharacterMap.js:152
+msgid "Cypriot Syllabary"
+msgstr "Cypriot Syllabary"
+
+#: src/control/Control.CharacterMap.js:153
+msgid "Tai Xuan Jing Symbols"
+msgstr "Símbolos Tai Xuan Jing"
+
+#: src/control/Control.CharacterMap.js:154
+msgid "Variation Selectors Supplement"
+msgstr "Seletores de variação suplementar"
+
+#: src/control/Control.CharacterMap.js:155
+msgid "Ancient Greek Musical Notation"
+msgstr "Notação musical do grego antigo"
+
+#: src/control/Control.CharacterMap.js:156
+msgid "Ancient Greek Numbers"
+msgstr "Número do grego antigo"
+
+#: src/control/Control.CharacterMap.js:157
+msgid "Arabic Supplement"
+msgstr "Suplemento árabe"
+
+#: src/control/Control.CharacterMap.js:158
+msgid "Buginese"
+msgstr "Buginese"
+
+#: src/control/Control.CharacterMap.js:159
+msgid "CJK Strokes"
+msgstr "CJK Strokes"
+
+#: src/control/Control.CharacterMap.js:160
+msgid "Combining Diacritical Marks Supplement"
+msgstr "Marcas diacríticas combinadas suplementares"
+
+#: src/control/Control.CharacterMap.js:161
+msgid "Coptic"
+msgstr "Cópta"
+
+#: src/control/Control.CharacterMap.js:162
+msgid "Ethiopic Extended"
+msgstr "Etíope estendido"
+
+#: src/control/Control.CharacterMap.js:163
+msgid "Ethiopic Supplement"
+msgstr "Suplemento etíope"
+
+#: src/control/Control.CharacterMap.js:164
+msgid "Georgian Supplement"
+msgstr "Suplemento georgiano"
+
+#: src/control/Control.CharacterMap.js:165
+msgid "Glagolitic"
+msgstr "Glagolitic"
+
+#: src/control/Control.CharacterMap.js:166
+msgid "Kharoshthi"
+msgstr "Kharoshthi"
+
+#: src/control/Control.CharacterMap.js:167
+msgid "Modifier Tone Letters"
+msgstr "Letras modificadoras de tom"
+
+#: src/control/Control.CharacterMap.js:168
+msgid "\"New Tai Lue"
+msgstr "New Tai Lue"
+
+#: src/control/Control.CharacterMap.js:169
+msgid "Old Persian"
+msgstr "Persa antigo"
+
+#: src/control/Control.CharacterMap.js:170
+msgid "Phonetic Extensions Supplement"
+msgstr "Suplemento de extesões fonéticas"
+
+#: src/control/Control.CharacterMap.js:171
+msgid "Supplemental Punctuation"
+msgstr "Pontuação suplementar"
+
+#: src/control/Control.CharacterMap.js:172
+msgid "Syloti Nagri"
+msgstr "Syloti Nagri"
+
+#: src/control/Control.CharacterMap.js:173
+msgid "Tifinagh"
+msgstr "Tifinagh"
+
+#: src/control/Control.CharacterMap.js:174
+msgid "Vertical Forms"
+msgstr "Formas verticais"
+
+#: src/control/Control.CharacterMap.js:175
+msgid "Nko"
+msgstr "Nko"
+
+#: src/control/Control.CharacterMap.js:176
+msgid "Balinese"
+msgstr "Balinês"
+
+#: src/control/Control.CharacterMap.js:177
+msgid "Latin Extended-C"
+msgstr "Latim estendido-C"
+
+#: src/control/Control.CharacterMap.js:178
+msgid "Latin Extended-D"
+msgstr "Latim estendido-D"
+
+#: src/control/Control.CharacterMap.js:179
+msgid "Phags-Pa"
+msgstr "Phags-Pa"
+
+#: src/control/Control.CharacterMap.js:180
+msgid "Phoenician"
+msgstr "Fenício"
+
+#: src/control/Control.CharacterMap.js:182
+msgid "Cuneiform"
+msgstr "Cuneiforme"
+
+#: src/control/Control.CharacterMap.js:183
+msgid "Cuneiform Numbers And Punctuation"
+msgstr "Números e pontuação cuneiforme"
+
+#: src/control/Control.CharacterMap.js:184
+msgid "Counting Rod Numerals"
+msgstr "Numerais de contagem Rod"
+
+#: src/control/Control.CharacterMap.js:185
+msgid "Sundanese"
+msgstr "Sundanese"
+
+#: src/control/Control.CharacterMap.js:186
+msgid "Lepcha"
+msgstr "Lepcha"
+
+#: src/control/Control.CharacterMap.js:187
+msgid "Ol Chiki"
+msgstr "Ol Chiki"
+
+#: src/control/Control.CharacterMap.js:188
+msgid "Cyrillic Extended-A"
+msgstr "Cirílico estendido-A"
+
+#: src/control/Control.CharacterMap.js:190
+msgid "Vai"
+msgstr "Vai"
+
+#: src/control/Control.CharacterMap.js:191
+msgid "Cyrillic Extended-B"
+msgstr "Cirílico estendido-B"
+
+#: src/control/Control.CharacterMap.js:192
+msgid "Saurashtra"
+msgstr "Saurashtra"
+
+#: src/control/Control.CharacterMap.js:193
+msgid "Kayah Li"
+msgstr "Kayah Li"
+
+#: src/control/Control.CharacterMap.js:194
+msgid "Rejang"
+msgstr "Rejang"
+
+#: src/control/Control.CharacterMap.js:195
+msgid "Cham"
+msgstr "Cham"
+
+#: src/control/Control.CharacterMap.js:196
+msgid "Ancient Symbols"
+msgstr "Símbolos antigos"
+
+#: src/control/Control.CharacterMap.js:197
+msgid "Phaistos Disc"
+msgstr "Phaistos Disc"
+
+#: src/control/Control.CharacterMap.js:198
+msgid "Lycian"
+msgstr "Lycian"
+
+#: src/control/Control.CharacterMap.js:199
+msgid "Carian"
+msgstr "Carian"
+
+#: src/control/Control.CharacterMap.js:200
+msgid "Lydian"
+msgstr "Lydian"
+
+#: src/control/Control.CharacterMap.js:201
+msgid "Mahjong Tiles"
+msgstr "Mahjong"
+
+#: src/control/Control.CharacterMap.js:202
+msgid "Domino Tiles"
+msgstr "Dominó"
+
+#: src/control/Control.CharacterMap.js:203
+msgid "Samaritan"
+msgstr "Samaritano"
+
+#: src/control/Control.CharacterMap.js:204
+msgid "Canadian Aboriginal Syllabics Extended"
+msgstr "Sílabas arborígenes canadenses estendidas"
+
+#: src/control/Control.CharacterMap.js:205
+msgid "Tai Tham"
+msgstr "Tai Tham"
+
+#: src/control/Control.CharacterMap.js:206
+msgid "Vedic Extensions"
+msgstr "Extensões Vedic"
+
+#: src/control/Control.CharacterMap.js:207
+msgid "Lisu"
+msgstr "Lisu"
+
+#: src/control/Control.CharacterMap.js:208
+msgid "Bamum"
+msgstr "Bamum"
+
+#: src/control/Control.CharacterMap.js:209
+msgid "Common Indic Number Forms"
+msgstr "Formas comuns de números índicos"
+
+#: src/control/Control.CharacterMap.js:210
+msgid "Devanagari Extended"
+msgstr "Devanagari estendido"
+
+#: src/control/Control.CharacterMap.js:211
+msgid "Hangul Jamo Extended-A"
+msgstr "Hangul Jamo Extended-A"
+
+#: src/control/Control.CharacterMap.js:212
+msgid "Javanese"
+msgstr "Javanês"
+
+#: src/control/Control.CharacterMap.js:213
+msgid "Myanmar Extended-A"
+msgstr "Myanmar estendido-A"
+
+#: src/control/Control.CharacterMap.js:214
+msgid "Tai Viet"
+msgstr "Tai Viet"
+
+#: src/control/Control.CharacterMap.js:215
+msgid "Meetei Mayek"
+msgstr "Meetei Mayek"
+
+#: src/control/Control.CharacterMap.js:216
+msgid "Hangul Jamo Extended-B"
+msgstr "Hangul Jamo Extended-B"
+
+#: src/control/Control.CharacterMap.js:217
+msgid "Imperial Aramaic"
+msgstr "Aramaico imperial"
+
+#: src/control/Control.CharacterMap.js:218
+msgid "Old South Arabian"
+msgstr "Sul árabe antigo"
+
+#: src/control/Control.CharacterMap.js:219
+msgid "Avestan"
+msgstr "Avestan"
+
+#: src/control/Control.CharacterMap.js:220
+msgid "Inscriptional Parthian"
+msgstr "Inscriptional Parthian"
+
+#: src/control/Control.CharacterMap.js:221
+msgid "Inscriptional Pahlavi"
+msgstr "Inscriptional Pahlavi"
+
+#: src/control/Control.CharacterMap.js:222
+msgid "Old Turkic"
+msgstr "Turco antigo"
+
+#: src/control/Control.CharacterMap.js:223
+msgid "Rumi Numeral Symbols"
+msgstr "Símbolos numéricos Rumi"
+
+#: src/control/Control.CharacterMap.js:224
+msgid "Kaithi"
+msgstr "Kaithi"
+
+#: src/control/Control.CharacterMap.js:226
+msgid "Egyptian Hieroglyphs"
+msgstr "Hieróglifos egípcios"
+
+#: src/control/Control.CharacterMap.js:227
+msgid "Enclosed Alphanumeric Supplement"
+msgstr "Suplemento alfanuméricos envolvidos"
+
+#: src/control/Control.CharacterMap.js:228
+msgid "Enclosed Ideographic Supplement"
+msgstr "Suplemento ideógrafos envolvidos"
+
+#: src/control/Control.CharacterMap.js:230
+msgid "CJK Unified Ideographs Extension C"
+msgstr "Ideógrafos unificados CJK estendidos C"
+
+#: src/control/Control.CharacterMap.js:231
+msgid "Mandaic"
+msgstr "Mandaic"
+
+#: src/control/Control.CharacterMap.js:232
+msgid "Batak"
+msgstr "Batak"
+
+#: src/control/Control.CharacterMap.js:233
+msgid "Ethiopic Extended-A"
+msgstr "Etíope estendido-A"
+
+#: src/control/Control.CharacterMap.js:234
+msgid "Brahmi"
+msgstr "Brahmi"
+
+#: src/control/Control.CharacterMap.js:236
+msgid "Bamum Supplement"
+msgstr "Suplmento Bamum"
+
+#: src/control/Control.CharacterMap.js:237
+msgid "Kana Supplement"
+msgstr "Suplemento Kana"
+
+#: src/control/Control.CharacterMap.js:238
+msgid "Playing Cards"
+msgstr "Cartas de baralho"
+
+#: src/control/Control.CharacterMap.js:240
+msgid "Miscellaneous Symbols And Pictographs"
+msgstr "Miscelânea de símbolos e pictogramas"
+
+#: src/control/Control.CharacterMap.js:241
+msgid "Emoticons"
+msgstr "Emoticons"
+
+#: src/control/Control.CharacterMap.js:242
+msgid "Transport And Map Symbols"
+msgstr "Símbolos de transportes e mapas"
+
+#: src/control/Control.CharacterMap.js:243
+msgid "Alchemical Symbols"
+msgstr "Símbolos de alquimia"
+
+#: src/control/Control.CharacterMap.js:245
+msgid "CJK Unified Ideographs Extension D"
+msgstr "Ideógrafos unificados CJK estendidos D"
+
+#: src/control/Control.CharacterMap.js:247
+msgid "Arabic Extended-A"
+msgstr "Árabe estendido-A"
+
+#: src/control/Control.CharacterMap.js:248
+msgid "Arabic Mathematical Alphabetic Symbols"
+msgstr "Símbolos alfabéticos e matemáticos árabes"
+
+#: src/control/Control.CharacterMap.js:249
+msgid "Chakma"
+msgstr "Chakma"
+
+#: src/control/Control.CharacterMap.js:250
+msgid "Meetei Mayek Extensions"
+msgstr "Extenções Meetei Mayek"
+
+#: src/control/Control.CharacterMap.js:251
+msgid "Meroitic Cursive"
+msgstr "Meroítica cursiva"
+
+#: src/control/Control.CharacterMap.js:252
+msgid "Meroitic Hieroglyphs"
+msgstr "Hieróglifos meroíticos"
+
+#: src/control/Control.CharacterMap.js:253
+msgid "Miao"
+msgstr "Miao"
+
+#: src/control/Control.CharacterMap.js:254
+msgid "Sharada"
+msgstr "Sharada"
+
+#: src/control/Control.CharacterMap.js:255
+msgid "Sora Sompeng"
+msgstr "Sora Sompeng"
+
+#: src/control/Control.CharacterMap.js:256
+msgid "Sundanese Supplement"
+msgstr "Suplemento sundanese"
+
+#: src/control/Control.CharacterMap.js:257
+msgid "Takri"
+msgstr "Takri"
+
+#: src/control/Control.CharacterMap.js:258
+msgid "Bassa Vah"
+msgstr "Bassa Vah"
+
+#: src/control/Control.CharacterMap.js:259
+msgid "Caucasian Albanian"
+msgstr "Albanês caucasiano"
+
+#: src/control/Control.CharacterMap.js:260
+msgid "Coptic Epact Numbers"
+msgstr "Números cóptas epact"
+
+#: src/control/Control.CharacterMap.js:261
+msgid "Combining Diacritical Marks Extended"
+msgstr "Marcas diacríticas combinadas estedidas"
+
+#: src/control/Control.CharacterMap.js:262
+msgid "Duployan"
+msgstr "Duployan"
+
+#: src/control/Control.CharacterMap.js:263
+msgid "Elbasan"
+msgstr "Elbasan"
+
+#: src/control/Control.CharacterMap.js:264
+msgid "Geometric Shapes Extended"
+msgstr "Formas geométricas estendido"
+
+#: src/control/Control.CharacterMap.js:265
+msgid "Grantha"
+msgstr "Grantha"
+
+#: src/control/Control.CharacterMap.js:266
+msgid "Khojki"
+msgstr "Khojki"
+
+#: src/control/Control.CharacterMap.js:267
+msgid "Khudawadi"
+msgstr "Khudawadi"
+
+#: src/control/Control.CharacterMap.js:268
+msgid "Latin Extended-E"
+msgstr "Latim estendido-E"
+
+#: src/control/Control.CharacterMap.js:270
+msgid "Linear A"
+msgstr "Linear A"
+
+#: src/control/Control.CharacterMap.js:271
+msgid "Mahajani"
+msgstr "Mahajani"
+
+#: src/control/Control.CharacterMap.js:272
+msgid "Manichaean"
+msgstr "Manichaean"
+
+#: src/control/Control.CharacterMap.js:273
+msgid "Mende Kikakui"
+msgstr "Mende Kikakui"
+
+#: src/control/Control.CharacterMap.js:274
+msgid "Modi"
+msgstr "Modi"
+
+#: src/control/Control.CharacterMap.js:275
+msgid "Mro"
+msgstr "Mro"
+
+#: src/control/Control.CharacterMap.js:276
+msgid "Myanmar Extended-B"
+msgstr "Myanmar estendido-B"
+
+#: src/control/Control.CharacterMap.js:277
+msgid "Nabataean"
+msgstr "Nabataean"
+
+#: src/control/Control.CharacterMap.js:278
+msgid "Old North Arabian"
+msgstr "Árabe do norte antigo"
+
+#: src/control/Control.CharacterMap.js:279
+msgid "Old Permic"
+msgstr "Permic antigo"
+
+#: src/control/Control.CharacterMap.js:280
+msgid "Ornamental Dingbats"
+msgstr "Dingbats ornamentais"
+
+#: src/control/Control.CharacterMap.js:281
+msgid "Pahawh Hmong"
+msgstr "Pahawh Hmong"
+
+#: src/control/Control.CharacterMap.js:282
+msgid "Palmyrene"
+msgstr "Palmyrene"
+
+#: src/control/Control.CharacterMap.js:283
+msgid "Pau Cin Hau"
+msgstr "Pau Cin Hau"
+
+#: src/control/Control.CharacterMap.js:284
+msgid "Psalter Pahlavi"
+msgstr "Psalter Pahlavi"
+
+#: src/control/Control.CharacterMap.js:285
+msgid "Shorthand Format Controls"
+msgstr "Controles de formatação Shorthand"
+
+#: src/control/Control.CharacterMap.js:286
+msgid "Siddham"
+msgstr "Siddham"
+
+#: src/control/Control.CharacterMap.js:287
+msgid "Sinhala Archaic Numbers"
+msgstr "Números arcaicos sinhala"
+
+#: src/control/Control.CharacterMap.js:288
+msgid "Supplemental Arrows-C"
+msgstr "Setas suplementares-C"
+
+#: src/control/Control.CharacterMap.js:289
+msgid "Tirhuta"
+msgstr "Tirhuta"
+
+#: src/control/Control.CharacterMap.js:290
+msgid "Warang Citi"
+msgstr "Warang Citi"
+
+#: src/control/Control.CharacterMap.js:291
+msgid "Ahom"
+msgstr "Ahom"
+
+#: src/control/Control.CharacterMap.js:293
+msgid "Anatolian Hieroglyphs"
+msgstr "Hieróglifos anatolianos"
+
+#: src/control/Control.CharacterMap.js:294
+msgid "Cherokee Supplement"
+msgstr "Suplemento cherokee "
+
+#: src/control/Control.CharacterMap.js:295
+#: src/control/Control.CharacterMap.js:296
+msgid "CJK Unified Ideographs Extension E"
+msgstr "Ideógrafos unificados CJK estendidos E"
+
+#: src/control/Control.CharacterMap.js:298
+msgid "Early Dynastic Cuneiform"
+msgstr "Cuneiformes da dinastia antiga"
+
+#: src/control/Control.CharacterMap.js:299
+msgid "Hatran"
+msgstr "Hatran"
+
+#: src/control/Control.CharacterMap.js:300
+msgid "Multani"
+msgstr "Multani"
+
+#: src/control/Control.CharacterMap.js:301
+msgid "Old Hungarian"
+msgstr "Húngaro antigo"
+
+#: src/control/Control.CharacterMap.js:302
+msgid "Supplemental Symbols And Pictographs"
+msgstr "Símbolos e pictógrafos suplementares"
+
+#: src/control/Control.CharacterMap.js:304
+msgid "Sutton Signwriting"
+msgstr "Sutton Signwriting"
+
+#: src/control/Control.CharacterMap.js:390
+msgid "Special Characters"
+msgstr "Caracteres especiais"
+
+#: src/control/Control.CharacterMap.js:395
+msgid "Font Name:"
+msgstr "Nome da fonte:"
+
+#: src/control/Control.CharacterMap.js:402
+msgid "Subset:"
+msgstr "Subconjunto:"
+
+#: src/control/Control.CharacterMap.js:413
+msgid "Selected Character:"
+msgstr "Caractere selecionado:"
+
+#: src/control/Control.CharacterMap.js:418
+msgid "Hexadecimal:"
+msgstr "Hexadecimal:"
+
+#: src/control/Control.CharacterMap.js:424 src/control/Control.Menubar.js:38
+#: src/control/Control.Menubar.js:138 src/control/Control.Menubar.js:189
+#: src/control/Control.Menubar.js:193 src/control/Control.Menubar.js:241
+msgid "Insert"
+msgstr "Inserir"
+
+#: src/control/Control.ColumnHeader.js:41
+msgid "Insert column before"
+msgstr "Inserir coluna antes"
+
+#: src/control/Control.ColumnHeader.js:48 src/control/Control.Menubar.js:255
+msgid "Delete column"
+msgstr "Excluir coluna"
+
+#: src/control/Control.ColumnHeader.js:55
+msgid "Optimal Width"
+msgstr "Largura ideal"
+
+#: src/control/Control.ColumnHeader.js:62
+msgid "Hide Columns"
+msgstr "Ocultar colunas"
+
+#: src/control/Control.ColumnHeader.js:69
+msgid "Show Columns"
+msgstr "Mostrar colunas"
+
+#: src/control/Control.ColumnHeader.js:84
+msgid "Optimal Column Width"
+msgstr "Largura de coluna ideal"
+
+#: src/control/Control.DocumentRepair.js:32
+msgid "Repair Document"
+msgstr "Reparar documento"
+
+#: src/control/Control.DocumentRepair.js:40
+msgid "Type"
+msgstr "Tipo"
+
+#: src/control/Control.DocumentRepair.js:42
+msgid "Index"
+msgstr "Índice"
+
+#: src/control/Control.DocumentRepair.js:44 src/control/Control.Menubar.js:40
+#: src/control/Control.Menubar.js:243
+msgid "Comment"
+msgstr "Comentário"
+
+#: src/control/Control.DocumentRepair.js:46
+msgid "User name"
+msgstr "Nome de usuário"
+
+#: src/control/Control.DocumentRepair.js:48
+msgid "Timestamp"
+msgstr "Carimbo de tempo"
+
+#: src/control/Control.DocumentRepair.js:52
+msgid "Jump to state"
+msgstr "Saltar para o estado"
+
+#: src/control/Control.Menubar.js:10 src/control/Control.Menubar.js:162
+#: src/control/Control.Menubar.js:218
+msgid "File"
+msgstr "Arquivo"
+
+#: src/control/Control.Menubar.js:12 src/control/Control.Menubar.js:164
+#: src/control/Control.Menubar.js:220
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/control/Control.Menubar.js:13 src/control/Control.Menubar.js:165
+#: src/control/Control.Menubar.js:221
+msgid "See revision history"
+msgstr "Histórico de revisões"
+
+#: src/control/Control.Menubar.js:14 src/control/Control.Menubar.js:166
+#: src/control/Control.Menubar.js:222
+msgid "Download as"
+msgstr "Baixar como"
+
+#: src/control/Control.Menubar.js:15 src/control/Control.Menubar.js:167
+#: src/control/Control.Menubar.js:223
+msgid "PDF Document (.pdf)"
+msgstr "Documento PDF (.pdf)"
+
+#: src/control/Control.Menubar.js:16
+msgid "ODF text document (.odt)"
+msgstr "Documento de texto ODF (.odt)"
+
+#: src/control/Control.Menubar.js:17
+msgid "Microsoft Word 2003 (.doc)"
+msgstr "Microsoft Word 2003 (.doc)"
+
+#: src/control/Control.Menubar.js:18
+msgid "Microsoft Word (.docx)"
+msgstr "Microsoft Word (.docx)"
+
+#: src/control/Control.Menubar.js:20 src/control/Control.Menubar.js:172
+#: src/control/Control.Menubar.js:228
+msgid "Edit"
+msgstr "Editar"
+
+#: src/control/Control.Menubar.js:21
+msgid "Repair"
+msgstr "Reparar"
+
+#: src/control/Control.Menubar.js:25 src/control/Control.Menubar.js:176
+#: src/control/Control.Menubar.js:232
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/control/Control.Menubar.js:26 src/control/Control.Menubar.js:177
+#: src/control/Control.Menubar.js:233
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/control/Control.Menubar.js:27 src/control/Control.Menubar.js:178
+#: src/control/Control.Menubar.js:234
+msgid "Paste"
+msgstr "Colar"
+
+#: src/control/Control.Menubar.js:29 src/control/Control.Menubar.js:180
+#: src/control/Control.Menubar.js:236
+msgid "Select all"
+msgstr "Selecionar tudo"
+
+#: src/control/Control.Menubar.js:31 src/control/Control.Menubar.js:182
+#: src/control/Control.Menubar.js:238
+msgid "View"
+msgstr "Visualizar"
+
+#: src/control/Control.Menubar.js:32 src/control/Control.Menubar.js:183
+#: src/control/Control.Menubar.js:239
+msgid "Full screen"
+msgstr "Tela cheia"
+
+#: src/control/Control.Menubar.js:39 src/control/Control.Menubar.js:190
+#: src/control/Control.Menubar.js:242
+msgid "Image"
+msgstr "Imagem"
+
+#: src/control/Control.Menubar.js:42
+msgid "Footnote"
+msgstr "Nota de rodapé"
+
+#: src/control/Control.Menubar.js:43
+msgid "Endnote"
+msgstr "Nota de fim"
+
+#: src/control/Control.Menubar.js:45
+msgid "Page break"
+msgstr "Quebra de página"
+
+#: src/control/Control.Menubar.js:46
+msgid "Column break"
+msgstr "Quebra de coluna"
+
+#: src/control/Control.Menubar.js:48 src/control/Control.Menubar.js:248
+msgid "Special character..."
+msgstr "Caractere especial..."
+
+#: src/control/Control.Menubar.js:49
+msgid "Formatting mark"
+msgstr "Marca de formatação"
+
+#: src/control/Control.Menubar.js:50
+msgid "Non-breaking space"
+msgstr "Espaço inseparável"
+
+#: src/control/Control.Menubar.js:51
+msgid "Non-breaking hyphen"
+msgstr "hífen inseparável"
+
+#: src/control/Control.Menubar.js:52
+msgid "Soft hyphen"
+msgstr "hífen opcional"
+
+#: src/control/Control.Menubar.js:53
+msgid "No-width optional break"
+msgstr "Quebra opcional sem largura"
+
+#: src/control/Control.Menubar.js:54
+msgid "No-width no break"
+msgstr "Sem quebra sem largura"
+
+#: src/control/Control.Menubar.js:55
+msgid "Left-to-right mark"
+msgstr "Marca de esquerda para  direita"
+
+#: src/control/Control.Menubar.js:56
+msgid "Right-to-left mark"
+msgstr "Marca de direita para  esquerda"
+
+#: src/control/Control.Menubar.js:58
+msgid "Format"
+msgstr "Formatar"
+
+#: src/control/Control.Menubar.js:59
+msgid "Text"
+msgstr "Texto"
+
+#: src/control/Control.Menubar.js:63
+msgid "Double underline"
+msgstr "Sublinhado duplo"
+
+#: src/control/Control.Menubar.js:64
+msgid "Strikethrough"
+msgstr "Tachado"
+
+#: src/control/Control.Menubar.js:65
+msgid "Overline"
+msgstr "Sobrelinha"
+
+#: src/control/Control.Menubar.js:67
+msgid "Superscript"
+msgstr "Sobrescrito"
+
+#: src/control/Control.Menubar.js:68
+msgid "Subscript"
+msgstr "Subscrito"
+
+#: src/control/Control.Menubar.js:69
+msgid "ꜱᴍᴀʟʟ ᴄᴀᴘꜱ"
+msgstr "Versaletes"
+
+#: src/control/Control.Menubar.js:71
+msgid "Shadow"
+msgstr "Sombra"
+
+#: src/control/Control.Menubar.js:72
+msgid "Outline"
+msgstr "Contorno"
+
+#: src/control/Control.Menubar.js:74
+msgid "Increase size"
+msgstr "Aumentar"
+
+#: src/control/Control.Menubar.js:75
+msgid "Decrease size"
+msgstr "Diminuir"
+
+#: src/control/Control.Menubar.js:77
+msgid "UPPERCASE"
+msgstr "MAIÚSCULAS"
+
+#: src/control/Control.Menubar.js:78
+msgid "lowercase"
+msgstr "minúsculas"
+
+#: src/control/Control.Menubar.js:79
+msgid "Cycle case"
+msgstr "Circular caixa"
+
+#: src/control/Control.Menubar.js:81
+msgid "Sentence case"
+msgstr "Frase iniciando com maíúscula"
+
+#: src/control/Control.Menubar.js:82
+msgid "Capitalize Every Word"
+msgstr "Palavras Iniciando Com Maiúsculas"
+
+#: src/control/Control.Menubar.js:83
+msgid "tOGGLE cASE"
+msgstr "aLTERNAR cAIXA"
+
+#: src/control/Control.Menubar.js:84
+msgid "Text orientation"
+msgstr "Orientação do texto"
+
+#: src/control/Control.Menubar.js:85
+msgid "Set paragraph left-to-right"
+msgstr "Definir parágrafo da esquerda para direita"
+
+#: src/control/Control.Menubar.js:86
+msgid "Set paragraph right-to-left"
+msgstr "Definir parágrafo da direita para esquerda"
+
+#: src/control/Control.Menubar.js:87
+msgid "Spacing"
+msgstr "Entrelinhas"
+
+#: src/control/Control.Menubar.js:88
+msgid "Line spacing: 1"
+msgstr "Entrelinhas: 1"
+
+#: src/control/Control.Menubar.js:89
+msgid "Line spacing: 1.5"
+msgstr "Entrelinhas: 1,5"
+
+#: src/control/Control.Menubar.js:90
+msgid "Line spacing: 2"
+msgstr "Entrelinhas: 2"
+
+#: src/control/Control.Menubar.js:92
+msgid "Increase paragraph spacing"
+msgstr "Aumentar espaçamento entre parágrafos"
 
-#: src/control/Control.Menubar.js:48
 #: src/control/Control.Menubar.js:93
+msgid "Decrease paragraph spacing"
+msgstr "Diminuir espaçamento entre parágrafos"
+
+#: src/control/Control.Menubar.js:97
+msgid "Align"
+msgstr "Alinhar"
+
+#: src/control/Control.Menubar.js:98
+msgid "Left"
+msgstr "À esquerda"
+
+#: src/control/Control.Menubar.js:99
+msgid "Centered"
+msgstr "Centralizado"
+
+#: src/control/Control.Menubar.js:100
+msgid "Right"
+msgstr "À direita"
+
+#: src/control/Control.Menubar.js:103
+msgid "Top"
+msgstr "Em cima"
+
+#: src/control/Control.Menubar.js:104
+msgid "Center"
+msgstr "Centralizado"
+
+#: src/control/Control.Menubar.js:105
+msgid "Bottom"
+msgstr "Embaixo"
+
+#: src/control/Control.Menubar.js:106
+msgid "Lists"
+msgstr "Listas"
+
+#: src/control/Control.Menubar.js:110
+msgid "Demote one level"
+msgstr "Rebaixar um nível"
+
+#: src/control/Control.Menubar.js:111
+msgid "Promote one level"
+msgstr "Promover um nível"
+
+#: src/control/Control.Menubar.js:112
+msgid "Demote one level with subpoints"
+msgstr "Rebaixar um nível com subpontos"
+
+#: src/control/Control.Menubar.js:113
+msgid "Promote one level with subpoints"
+msgstr "Promover um nível com subpontos"
+
+#: src/control/Control.Menubar.js:115
+msgid "Move down"
+msgstr "Mover para baixo"
+
+#: src/control/Control.Menubar.js:116
+msgid "Move up"
+msgstr "Mover para cma"
+
+#: src/control/Control.Menubar.js:117
+msgid "Move down with subpoints"
+msgstr "Mover para baixo com subpontos"
+
+#: src/control/Control.Menubar.js:118
+msgid "Move up with subpoints"
+msgstr "Mover para cima com subpontos"
+
+#: src/control/Control.Menubar.js:120
+msgid "Insert unnumbered entry"
+msgstr "Inserir entrada sem numeração"
+
+#: src/control/Control.Menubar.js:121
+msgid "Restart numbering"
+msgstr "Reiniciar numeração"
+
+#: src/control/Control.Menubar.js:123
+msgid "To next paragraph in level"
+msgstr "Ao próximo parágrafo no nível"
+
+#: src/control/Control.Menubar.js:124
+msgid "To previous paragraph in level"
+msgstr "Ao parágrafo anterior no nível"
+
+#: src/control/Control.Menubar.js:125
+msgid "Continue previous numbering"
+msgstr "Continuar numeração anterior"
+
+#: src/control/Control.Menubar.js:126
+msgid "Clear direct formatting"
+msgstr "Limpar formatação direta"
+
+#: src/control/Control.Menubar.js:127
+msgid "Page"
+msgstr "Página"
+
+#: src/control/Control.Menubar.js:128 src/control/Control.Menubar.js:130
+#: src/control/Control.Menubar.js:132 src/control/Control.Menubar.js:134
+msgid "Portrait"
+msgstr "Retrato"
+
+#: src/control/Control.Menubar.js:129 src/control/Control.Menubar.js:131
+#: src/control/Control.Menubar.js:133 src/control/Control.Menubar.js:135
+msgid "Landscape"
+msgstr "Paisagem"
+
+#: src/control/Control.Menubar.js:137 src/control/Control.Menubar.js:192
+msgid "Tables"
+msgstr "Tabelas"
+
+#: src/control/Control.Menubar.js:139 src/control/Control.Menubar.js:194
+msgid "Rows before"
+msgstr "Linhas antes"
+
+#: src/control/Control.Menubar.js:140 src/control/Control.Menubar.js:195
+msgid "Rows after"
+msgstr "Linhas após"
+
+#: src/control/Control.Menubar.js:142 src/control/Control.Menubar.js:197
+msgid "Columns left"
+msgstr "Colunas à esquerda"
+
+#: src/control/Control.Menubar.js:143 src/control/Control.Menubar.js:198
+msgid "Columns right"
+msgstr "Colunas à direita"
+
+#: src/control/Control.Menubar.js:144 src/control/Control.Menubar.js:199
+msgid "Delete"
+msgstr "Excluir"
+
+#: src/control/Control.Menubar.js:145 src/control/Control.Menubar.js:200
 msgid "Rows"
 msgstr "Linhas"
 
-#: src/control/Control.Menubar.js:49
-#: src/control/Control.Menubar.js:94
+#: src/control/Control.Menubar.js:146 src/control/Control.Menubar.js:201
 msgid "Columns"
 msgstr "Colunas"
 
-#: src/control/Control.Menubar.js:50
-#: src/control/Control.Menubar.js:51
+#: src/control/Control.Menubar.js:147 src/control/Control.Menubar.js:149
 msgid "Table"
 msgstr "Tabela"
 
-#: src/control/Control.Menubar.js:51
+#: src/control/Control.Menubar.js:148
 msgid "Select"
 msgstr "Selecionar"
 
-#: src/control/Control.Menubar.js:52
-#: src/control/Control.Menubar.js:129
+#: src/control/Control.Menubar.js:150 src/control/Control.Menubar.js:245
 msgid "Row"
 msgstr "Linha"
 
-#: src/control/Control.Menubar.js:53
-#: src/control/Control.Menubar.js:130
+#: src/control/Control.Menubar.js:151 src/control/Control.Menubar.js:246
 msgid "Column"
 msgstr "Coluna"
 
-#: src/control/Control.Menubar.js:54
+#: src/control/Control.Menubar.js:152
 msgid "Cell"
 msgstr "Célula"
 
-#: src/control/Control.Menubar.js:55
-#: src/control/Control.Menubar.js:95
+#: src/control/Control.Menubar.js:153 src/control/Control.Menubar.js:202
 msgid "Merge cells"
 msgstr "Mesclar células"
 
-#: src/control/Control.Menubar.js:57
-#: src/control/Control.Menubar.js:103
-#: src/control/Control.Menubar.js:144
+#: src/control/Control.Menubar.js:155 src/control/Control.Menubar.js:211
+#: src/control/Control.Menubar.js:257
 msgid "Help"
 msgstr "Ajuda"
 
-#: src/control/Control.Menubar.js:57
-#: src/control/Control.Menubar.js:103
-#: src/control/Control.Menubar.js:144
+#: src/control/Control.Menubar.js:156 src/control/Control.Menubar.js:212
+#: src/control/Control.Menubar.js:258
 msgid "Keyboard shortcuts"
 msgstr "Atalhos do teclado"
 
-#: src/control/Control.Menubar.js:58
-#: src/control/Control.Menubar.js:104
-#: src/control/Control.Menubar.js:145
+#: src/control/Control.Menubar.js:157 src/control/Control.Menubar.js:213
+#: src/control/Control.Menubar.js:259
 msgid "About"
 msgstr "Sobre"
 
-#: src/control/Control.Menubar.js:67
+#: src/control/Control.Menubar.js:168
 msgid "ODF presentation (.odp)"
 msgstr "Apresentação ODF (.odp)"
 
-#: src/control/Control.Menubar.js:68
+#: src/control/Control.Menubar.js:169
 msgid "Microsoft Powerpoint 2003 (.ppt)"
 msgstr "Microsoft Powerpoint 2003 (.ppt)"
 
-#: src/control/Control.Menubar.js:69
+#: src/control/Control.Menubar.js:170
 msgid "Microsoft Powerpoint (.pptx)"
 msgstr "Microsoft Powerpoint (.pptx)"
 
-#: src/control/Control.Menubar.js:97
+#: src/control/Control.Menubar.js:204
 msgid "Slide"
 msgstr "Slide"
 
-#: src/control/Control.Menubar.js:97
+#: src/control/Control.Menubar.js:205
 msgid "New slide"
 msgstr "Novo slide"
 
-#: src/control/Control.Menubar.js:113
+#: src/control/Control.Menubar.js:224
 msgid "ODF spreadsheet (.ods)"
 msgstr "Planilha ODF (.ods)"
 
-#: src/control/Control.Menubar.js:114
+#: src/control/Control.Menubar.js:225
 msgid "Microsoft Excel 2003 (.xls)"
 msgstr "Microsoft Excel 2003 (.xls)"
 
-#: src/control/Control.Menubar.js:115
+#: src/control/Control.Menubar.js:226
 msgid "Microsoft Excel (.xlsx)"
 msgstr "Microsoft Excel (.xlsx)"
 
-#: src/control/Control.Menubar.js:138
+#: src/control/Control.Menubar.js:250
 msgid "Cells"
 msgstr "Células"
 
-#: src/control/Control.Menubar.js:138
+#: src/control/Control.Menubar.js:251
 msgid "Insert row"
 msgstr "Inserir linha"
 
-#: src/control/Control.Menubar.js:139
+#: src/control/Control.Menubar.js:252
 msgid "Insert column"
 msgstr "Inserir coluna"
 
-#: src/control/Control.Menubar.js:141
-#: src/control/Control.RowHeader.js:43
+#: src/control/Control.Menubar.js:254 src/control/Control.RowHeader.js:46
 msgid "Delete row"
 msgstr "Excluir linha"
 
-#: src/control/Control.Menubar.js:314
+#: src/control/Control.Menubar.js:432
 msgid "Are you sure you want to delete this slide?"
-msgstr "Tem certeza de que deseja excluir esta página?"
+msgstr "Deseja excluir esta página?"
 
-#: src/control/Control.RowHeader.js:36
+#: src/control/Control.RowHeader.js:39
 msgid "Insert row above"
 msgstr "Inserir linha acima"
 
-#: src/control/Control.RowHeader.js:50
+#: src/control/Control.RowHeader.js:53
 msgid "Optimal Height"
 msgstr "Altura ideal"
 
-#: src/control/Control.RowHeader.js:63
+#: src/control/Control.RowHeader.js:60
+msgid "Hide Rows"
+msgstr "Ocultar linhas"
+
+#: src/control/Control.RowHeader.js:67
+msgid "Show Rows"
+msgstr "Mostrar linhas"
+
+#: src/control/Control.RowHeader.js:80
 msgid "Optimal Row Height"
 msgstr "Altura ideal da linha"
 
@@ -999,8 +2320,8 @@ msgid "Delete sheet"
 msgstr "Excluir planilha"
 
 #: src/control/Control.Tabs.js:52
-msgid "Are you sure you want to delete this sheet?"
-msgstr "Você tem certeza de que deseja excluir esta planilha?"
+msgid "Are you sure you want to delete sheet, %sheet% ?"
+msgstr "Deseja excluir a planilha %sheet% ?"
 
 #: src/control/Control.Tabs.js:61
 msgid "Rename sheet"
@@ -1010,17 +2331,15 @@ msgstr "Renomear planilha"
 msgid "Enter new sheet name"
 msgstr "Digite o nome da nova planilha"
 
-#: src/control/Toolbar.js:63
-#: src/control/Toolbar.js:72
+#: src/control/Toolbar.js:63 src/control/Toolbar.js:72
 msgid "Downloading..."
 msgstr "Baixando..."
 
-#: src/control/Toolbar.js:84
-#: src/map/Map.js:856
+#: src/control/Toolbar.js:84 src/map/Map.js:868
 msgid "Saving..."
 msgstr "Salvando..."
 
-#: src/control/Toolbar.js:216
+#: src/control/Toolbar.js:230
 msgid "This version of %productName is powered by"
 msgstr "Esta versão do %productName é operada com"
 
@@ -1028,31 +2347,43 @@ msgstr "Esta versão do %productName é operada com"
 msgid "Oops, there is a problem connecting to LibreOffice Online : "
 msgstr "Ocorreu um problema ao conectar com o LibreOffice Online: "
 
-#: src/core/Socket.js:138
+#: src/core/Socket.js:178
 msgid "Unsupported server version."
-msgstr "Versão do servidor não é homologada"
+msgstr "A versão do servidor não é homologada."
+
+#: src/core/Socket.js:216
+msgid "Session terminated by document owner"
+msgstr "Sessão encerrada pelo proprietário do documento"
+
+#: src/core/Socket.js:219
+msgid "Server is shutting down for maintenance (auto-saving)"
+msgstr "O servidor está se desligando para manutenção (auto-salvamento)"
 
-#: src/core/Socket.js:173
+#: src/core/Socket.js:222
+msgid "Server is recycling and will be available shortly"
+msgstr "O servidor está se reciclando e estará disponível em beve"
+
+#: src/core/Socket.js:334
 msgid "Document requires password to view."
 msgstr "O documento exige uma senha de abertura."
 
-#: src/core/Socket.js:176
+#: src/core/Socket.js:337
 msgid "Document requires password to modify."
 msgstr "O documento exige uma senha para modificação."
 
-#: src/core/Socket.js:178
+#: src/core/Socket.js:339
 msgid "Hit Cancel to open in view-only mode."
 msgstr "Pressione Cancelar para abrir no modo de só leitura."
 
-#: src/core/Socket.js:182
+#: src/core/Socket.js:343
 msgid "Wrong password provided. Please try again."
-msgstr "Senha inválida. Forneça outra senha."
+msgstr "Senha inválida. Tente novamente."
 
-#: src/core/Socket.js:231
+#: src/core/Socket.js:392
 msgid "Connecting..."
 msgstr "Conectando..."
 
-#: src/core/Socket.js:349
+#: src/core/Socket.js:513
 msgid ""
 "Well, this is embarrassing, we cannot connect to your document. Please try "
 "again."
@@ -1062,7 +2393,11 @@ msgstr "Ocorreu um erro de conexão com seu documento. Tente novamente."
 msgid "Initializing..."
 msgstr "Inicializando..."
 
-#: src/map/Map.js:859
+#: src/map/Map.js:792
+msgid "Inactive document - please click to resume editing"
+msgstr "Documento inativo - clique para continuar editando"
+
+#: src/map/Map.js:871
 msgid "Loading..."
 msgstr "Carregando..."
 
commit 575ee5d1cd6ba60ff47e2f663e2ef5e929286b8d
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Tue Dec 6 14:05:42 2016 +0100

    Kit: clean up redundant member initializers
    
    Change-Id: I3a320d9647ab729e71ce93ce90fb63eb3b39ae35
    (cherry picked from commit 645049e081b6056f20d12103a110a6407b24323c)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index 28df0d8..0d9d32d 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -444,8 +444,6 @@ public:
         _isDocPasswordProtected(false),
         _docPasswordType(PasswordType::ToView),
         _stop(false),
-        _mutex(),
-        _documentMutex(),
         _isLoading(0)
     {
         LOG_INF("Document ctor for url [" << _url << "] on child [" << _jailId << "].");
commit 27e70472fce9b390b91835c5b0bd4685d0490d09
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Tue Dec 6 13:28:30 2016 +0530

    loleaflet: Disable row/col header context menu in readonly/view
    
    Also fix a js error trying to disable context menu before
    row/column headers are created.
    
    Change-Id: I6b04ce5c0fefa00567ce5fe58fdad9102d1f1651
    (cherry picked from commit 4c788c3014d1f3935fdfd6e33e84ccb6baadb949)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/control/Control.ColumnHeader.js b/loleaflet/src/control/Control.ColumnHeader.js
index df19c65..cd231cc 100644
--- a/loleaflet/src/control/Control.ColumnHeader.js
+++ b/loleaflet/src/control/Control.ColumnHeader.js
@@ -192,6 +192,10 @@ L.Control.ColumnHeader = L.Control.Header.extend({
 			}
 			L.DomEvent.addListener(text, 'click', this._onColumnHeaderClick, this);
 		}
+
+		if ($('.spreadsheet-header-column-text').length > 0) {
+			$('.spreadsheet-header-column-text').contextMenu(this._map._permission === 'edit');
+		}
 	},
 
 	_colAlphaToNumber: function(alpha) {
@@ -332,9 +336,9 @@ L.Control.ColumnHeader = L.Control.Header.extend({
 		if (!this._initialized) {
 			this._initialize();
 		}
-		setTimeout(function() {
-			$('.spreadsheet-header-column').contextMenu(e.perm === 'edit');
-		}, 1000);
+		if ($('.spreadsheet-header-column-text').length > 0) {
+			$('.spreadsheet-header-column-text').contextMenu(e.perm === 'edit');
+		}
 	}
 });
 
diff --git a/loleaflet/src/control/Control.RowHeader.js b/loleaflet/src/control/Control.RowHeader.js
index a625efa..f2d5bfd 100644
--- a/loleaflet/src/control/Control.RowHeader.js
+++ b/loleaflet/src/control/Control.RowHeader.js
@@ -190,6 +190,10 @@ L.Control.RowHeader = L.Control.Header.extend({
 			}
 			L.DomEvent.addListener(text, 'click', this._onRowHeaderClick, this);
 		}
+
+		if ($('.spreadsheet-header-row-text').length > 0) {
+			$('.spreadsheet-header-row-text').contextMenu(this._map._permission === 'edit');
+		}
 	},
 
 	_selectRow: function(row, modifier) {
@@ -319,9 +323,10 @@ L.Control.RowHeader = L.Control.Header.extend({
 		if (!this._initialized) {
 			this._initialize();
 		}
-		setTimeout(function() {
-			$('.spreadsheet-header-row').contextMenu(e.perm === 'edit');
-		}, 1000);
+		// Enable context menu on row headers only if permission is 'edit'
+		if ($('.spreadsheet-header-row-text').length > 0) {
+			$('.spreadsheet-header-row-text').contextMenu(e.perm === 'edit');
+		}
 	}
 });
 
commit bcc3a58fcde7b8ccb9238b7e19c000555bcd58e3
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Tue Dec 6 13:19:44 2016 +0530

    loleaflet: Missing semi-colon
    
    Change-Id: I216dd1caa9bfba33b5538e149aeddfb7159ccbbd
    (cherry picked from commit 5e4743a54c637045a0a8c2afebe9962cb275bb8a)
    Signed-off-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/src/control/Control.Header.js b/loleaflet/src/control/Control.Header.js
index d5443cc..8d19ec6 100644
--- a/loleaflet/src/control/Control.Header.js
+++ b/loleaflet/src/control/Control.Header.js
@@ -123,7 +123,7 @@ L.Control.Header = L.Control.extend({
 		L.DomUtil.disableTextSelection();
 
 		L.DomEvent.stopPropagation(e);
-		L.DomEvent.on(document, 'mousemove', this._onMouseMove, this)
+		L.DomEvent.on(document, 'mousemove', this._onMouseMove, this);
 		L.DomEvent.on(document, 'mouseup', this._onMouseUp, this);
 
 		var rect = target.parentNode.getBoundingClientRect();
commit 4feb4fdcbeb97b1193417d73bf9d158bda0c1a50
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Mon Dec 5 22:04:06 2016 +0530

    loleaflet: Disable calc toolbar items in readonly/view mode
    
    Change-Id: I2989de5f201eb7f52f5f47d98f9172c640e38fad
    (cherry picked from commit 33a60961759758388164074197c46132d8d4f8a3)

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list