[Git][debian-gis-team/grass][experimental] 4 commits: New upstream version 7.4.2~rc2

Bas Couwenberg gitlab at salsa.debian.org
Mon Oct 15 06:45:09 BST 2018


Bas Couwenberg pushed to branch experimental at Debian GIS Project / grass


Commits:
ed2d4fd3 by Bas Couwenberg at 2018-10-15T05:17:43Z
New upstream version 7.4.2~rc2
- - - - -
6942a1f0 by Bas Couwenberg at 2018-10-15T05:18:25Z
Merge tag 'upstream/7.4.2_rc2' into experimental

Upstream version 7.4.2~rc2

- - - - -
b805de07 by Bas Couwenberg at 2018-10-15T05:20:28Z
New upstream release candidate.

- - - - -
674fe574 by Bas Couwenberg at 2018-10-15T05:21:26Z
Set distribution to experimental.

- - - - -


25 changed files:

- − ChangeLog_7.4.2RC1.gz
- + ChangeLog_7.4.2RC2.gz
- debian/changelog
- doc/howto_release.txt
- gui/wxpython/gui_core/dialogs.py
- gui/wxpython/gui_core/preferences.py
- gui/wxpython/gui_core/widgets.py
- gui/wxpython/gui_core/wrap.py
- gui/wxpython/mapwin/buffered.py
- gui/wxpython/psmap/dialogs.py
- gui/wxpython/psmap/frame.py
- imagery/i.segment/create_isegs.c
- imagery/i.segment/iseg.h
- imagery/i.segment/write_output.c
- include/VERSION
- locale/po/grasslibs_bn.po
- locale/po/grassmods_bn.po
- locale/po/grassmods_fr.po
- locale/po/grasswxpy_bn.po
- raster/r.li/r.li.daemon/daemon.c
- scripts/v.db.univar/v.db.univar.html
- scripts/v.import/v.import.html
- vector/v.in.ogr/v.in.ogr.html
- vector/v.qcount/v.qcount.html
- vector/v.univar/v.univar.html


Changes:

=====================================
ChangeLog_7.4.2RC1.gz deleted
=====================================
Binary files a/ChangeLog_7.4.2RC1.gz and /dev/null differ


=====================================
ChangeLog_7.4.2RC2.gz
=====================================
Binary files /dev/null and b/ChangeLog_7.4.2RC2.gz differ


=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+grass (7.4.2~rc2-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Mon, 15 Oct 2018 07:21:11 +0200
+
 grass (7.4.2~rc1-1~exp1) experimental; urgency=medium
 
   * New upstream release candidate.


=====================================
doc/howto_release.txt
=====================================
@@ -1,6 +1,6 @@
 How to release GRASS GIS binaries and source code
 
-$Date: 2018-08-31 15:35:23 +0200 (Fri, 31 Aug 2018) $
+$Date: 2018-10-14 14:46:28 +0200 (Sun, 14 Oct 2018) $
 
 Note: This text contains *some* rules only applicable to the
       development coordinator (currently Markus Neteler, PSC Chair).
@@ -30,9 +30,11 @@ sh ~/software/grass-addons/tools/transifex_merge.sh
 make
 make verify
 # ... then fix .po files as needed.
-# after that push fixes to transifex:
-cd locale/transifex/
-tx --debug push -t
+#
+# requires https://trac.osgeo.org/grass/ticket/3539
+## after that push fixes to transifex:
+#cd locale/transifex/
+#tx --debug push -t
 
 #### end of i18N
 


=====================================
gui/wxpython/gui_core/dialogs.py
=====================================
@@ -2070,7 +2070,7 @@ class SymbolDialog(wx.Dialog):
         mainPanel = wx.Panel(self, id=wx.ID_ANY)
         mainSizer = wx.BoxSizer(wx.VERTICAL)
         vSizer = wx.BoxSizer(wx.VERTICAL)
-        fgSizer = wx.FlexGridSizer(rows=2, vgap=5, hgap=5)
+        fgSizer = wx.FlexGridSizer(rows=2, cols=2, vgap=5, hgap=5)
         self.folderChoice = wx.Choice(
             mainPanel,
             id=wx.ID_ANY,


=====================================
gui/wxpython/gui_core/preferences.py
=====================================
@@ -47,10 +47,12 @@ from core import globalvar
 from core.gcmd import RunCommand, GError
 from core.utils import ListOfMapsets, GetColorTables, ReadEpsgCodes, _
 from core.settings import UserSettings
+from core.globalvar import wxPythonPhoenix
 from gui_core.dialogs import SymbolDialog, DefaultFontDialog
 from gui_core.widgets import IntegerValidator, ColorTablesComboBox
 from core.debug import Debug
-from gui_core.wrap import SpinCtrl, Button
+from gui_core.wrap import SpinCtrl, Button, BitmapButton, StaticText, \
+    StaticBox, TextCtrl, ListCtrl
 
 
 class PreferencesBaseDialog(wx.Dialog):
@@ -2184,14 +2186,14 @@ class MapsetAccess(wx.Dialog):
 
 
 class CheckListMapset(
-        wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
+        ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
     """List of mapset/owner/group"""
 
     def __init__(self, parent, log=None):
         self.parent = parent
 
-        wx.ListCtrl.__init__(self, parent, wx.ID_ANY,
-                             style=wx.LC_REPORT)
+        ListCtrl.__init__(self, parent, wx.ID_ANY,
+                          style=wx.LC_REPORT)
         listmix.CheckListCtrlMixin.__init__(self)
         self.log = log
 
@@ -2209,7 +2211,12 @@ class CheckListMapset(
             gisenv['LOCATION_NAME'])
 
         for mapset in self.parent.all_mapsets_ordered:
-            index = self.InsertStringItem(self.GetItemCount(), mapset)
+            # unclear why this is needed,
+            # wrap.ListrCtrl should do the job but it doesn't in this case
+            if wxPythonPhoenix:
+                index = self.InsertItem(self.GetItemCount(), mapset)
+            else:
+                index = self.InsertStringItem(self.GetItemCount(), mapset)
             mapsetPath = os.path.join(locationPath,
                                       mapset)
             stat_info = os.stat(mapsetPath)


=====================================
gui/wxpython/gui_core/widgets.py
=====================================
@@ -89,7 +89,8 @@ from core import globalvar
 from core.utils import _
 from core.gcmd import GMessage, GError
 from core.debug import Debug
-from gui_core.wrap import Button, SearchCtrl
+from gui_core.wrap import Button, SearchCtrl, StaticText, StaticBox, \
+    TextCtrl, Menu, Rect, EmptyBitmap, ListCtrl
 
 
 class NotebookController:
@@ -933,7 +934,7 @@ class SingleSymbolPanel(wx.Panel):
         self.Refresh()
 
 
-class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin,
+class GListCtrl(ListCtrl, listmix.ListCtrlAutoWidthMixin,
                 listmix.CheckListCtrlMixin):
     """Generic ListCtrl with popup menu to select/deselect all
     items"""
@@ -941,7 +942,7 @@ class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin,
     def __init__(self, parent):
         self.parent = parent
 
-        wx.ListCtrl.__init__(self, parent, id=wx.ID_ANY,
+        ListCtrl.__init__(self, parent, id=wx.ID_ANY,
                              style=wx.LC_REPORT)
         listmix.CheckListCtrlMixin.__init__(self)
 
@@ -1033,7 +1034,10 @@ class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin,
 
         idx = 0
         for item in data:
-            index = self.InsertStringItem(idx, str(item[0]))
+            if wxPythonPhoenix:
+                index = self.InsertItem(idx, str(item[0]))
+            else:
+                index = self.InsertStringItem(idx, str(item[0]))
             for i in range(1, self.GetColumnCount()):
                 self.SetStringItem(index, i, item[i])
             idx += 1


=====================================
gui/wxpython/gui_core/wrap.py
=====================================
@@ -17,6 +17,10 @@ This program is free software under the GNU General Public License
 
 import wx
 import wx.lib.buttons as buttons
+try:
+    import wx.lib.agw.customtreectrl as CT
+except ImportError:
+    import wx.lib.customtreectrl as CT
 
 from core.globalvar import gtk3, wxPythonPhoenix
 if wxPythonPhoenix:
@@ -99,6 +103,32 @@ class Button(wx.Button):
             wx.Button.SetToolTipString(self, tip)
 
 
+class RadioButton(wx.RadioButton):
+    """Wrapper around wx.RadioButton to have more control
+    over the widget on different platforms/wxpython versions"""
+    def __init__(self, *args, **kwargs):
+        wx.RadioButton.__init__(self, *args, **kwargs)
+
+    def SetToolTip(self, tip):
+        if wxPythonPhoenix:
+            wx.RadioButton.SetToolTip(self, tipString=tip)
+        else:
+            wx.RadioButton.SetToolTipString(self, tip)
+
+
+class BitmapButton(wx.BitmapButton):
+    """Wrapper around wx.BitmapButton to have more control
+    over the widget on different platforms/wxpython versions"""
+    def __init__(self, *args, **kwargs):
+        wx.BitmapButton.__init__(self, *args, **kwargs)
+
+    def SetToolTip(self, tip):
+        if wxPythonPhoenix:
+            wx.BitmapButton.SetToolTip(self, tipString=tip)
+        else:
+            wx.BitmapButton.SetToolTipString(self, tip)
+
+
 class GenBitmapButton(buttons.GenBitmapButton):
     """Wrapper around GenBitmapButton to have more control
     over the widget on different platforms/wxpython versions"""
@@ -151,6 +181,19 @@ class StaticBox(wx.StaticBox):
             wx.StaticBox.SetToolTipString(self, tip)
 
 
+class CheckListBox(wx.CheckListBox):
+    """Wrapper around wx.CheckListBox to have more control
+    over the widget on different platforms/wxpython versions"""
+    def __init__(self, *args, **kwargs):
+        wx.CheckListBox.__init__(self, *args, **kwargs)
+
+    def SetToolTip(self, tip):
+        if wxPythonPhoenix:
+            wx.CheckListBox.SetToolTip(self, tipString=tip)
+        else:
+            wx.CheckListBox.SetToolTipString(self, tip)
+
+
 class TextCtrl(wx.TextCtrl):
     """Wrapper around wx.TextCtrl to have more control
     over the widget on different platforms/wxpython versions"""
@@ -215,6 +258,19 @@ class TreeCtrl(wx.TreeCtrl):
             return wx.TreeCtrl.GetPyData(self, item)
 
 
+class CustomTreeCtrl(CT.CustomTreeCtrl):
+    """Wrapper around wx.lib.agw.customtreectrl to have more control
+    over the widget on different platforms/wxpython versions"""
+    def __init__(self, *args, **kwargs):
+        CT.CustomTreeCtrl.__init__(self, *args, **kwargs)
+
+    def SetToolTip(self, tip):
+        if wxPythonPhoenix:
+            CT.CustomTreeCtrl.SetToolTip(self, tipString=tip)
+        else:
+            CT.CustomTreeCtrl.SetToolTipString(self, tip)
+
+
 class ToolBar(wx.ToolBar):
     """Wrapper around wx.ToolBar to have more control
     over the widget on different platforms/wxpython versions"""
@@ -274,6 +330,12 @@ class PseudoDC(wx.adv.PseudoDC if wxPythonPhoenix else wx.PseudoDC):
     def __init__(self, *args, **kwargs):
         super(PseudoDC, self).__init__(*args, **kwargs)
 
+    def DrawLinePoint(self, pt1, pt2):
+        if wxPythonPhoenix:
+            super(PseudoDC, self).DrawLine(pt1, pt2)
+        else:
+            super(PseudoDC, self).DrawLinePoint(pt1, pt2)
+
     def DrawRectangleRect(self, rect):
         if wxPythonPhoenix:
             super(PseudoDC, self).DrawRectangle(rect=rect)
@@ -289,6 +351,19 @@ class PseudoDC(wx.adv.PseudoDC if wxPythonPhoenix else wx.PseudoDC):
             super(PseudoDC, self).EndDrawing()
 
 
+class ClientDC(wx.ClientDC):
+    """Wrapper around wx.ClientDC to have more control
+    over the widget on different platforms/wxpython versions"""
+    def __init__(self, *args, **kwargs):
+        super(ClientDC, self).__init__(*args, **kwargs)
+
+    def GetFullMultiLineTextExtent(self, string, font=None):
+        if wxPythonPhoenix:
+            return super(ClientDC, self).GetFullMultiLineTextExtent(string, font)
+        else:
+            return super(ClientDC, self).GetMultiLineTextExtent(string, font)
+
+
 class Rect(wx.Rect):
     """Wrapper around wx.Rect to have more control
     over the widget on different platforms/wxpython versions"""
@@ -307,6 +382,12 @@ class Rect(wx.Rect):
         else:
             return wx.Rect.ContainsRect(self, rect)
 
+    def OffsetXY(self, dx, dy):
+        if wxPythonPhoenix:
+            return wx.Rect.Offset(self, dx, dy)
+        else:
+            return wx.Rect.OffsetXY(self, dx, dy)
+
 
 class CheckBox(wx.CheckBox):
     """Wrapper around wx.CheckBox to have more control
@@ -319,3 +400,16 @@ class CheckBox(wx.CheckBox):
             wx.CheckBox.SetToolTip(self, tipString=tip)
         else:
             wx.CheckBox.SetToolTipString(self, tip)
+
+
+class Choice(wx.Choice):
+    """Wrapper around wx.Choice to have more control
+    over the widget on different platforms/wxpython versions"""
+    def __init__(self, *args, **kwargs):
+        wx.Choice.__init__(self, *args, **kwargs)
+
+    def SetToolTip(self, tip):
+        if wxPythonPhoenix:
+            wx.Choice.SetToolTip(self, tipString=tip)
+        else:
+            wx.Choice.SetToolTipString(self, tip)


=====================================
gui/wxpython/mapwin/buffered.py
=====================================
@@ -696,7 +696,7 @@ class BufferedMapWindow(MapWindowBase, Window):
         self._fileType = FileType
         self._saveToFileCallback = callback
 
-        self._busy = wx.BusyInfo(message=_("Please wait, exporting image..."),
+        self._busy = wx.BusyInfo(_("Please wait, exporting image..."),
                                  parent=self)
         wx.Yield()
 
@@ -756,7 +756,6 @@ class BufferedMapWindow(MapWindowBase, Window):
             self.pdcVector.DrawToDC(dc)
         ibuffer.SaveFile(self._fileName, self._fileType)
 
-        self._busy.Destroy()
         del self._busy
         del self._fileName
         del self._fileType


=====================================
gui/wxpython/psmap/dialogs.py
=====================================
@@ -53,10 +53,12 @@ from core import globalvar
 
 if globalvar.wxPythonPhoenix:
     import wx.adv
-    from wx.adv import OwnerDrawnComboBox
+    from wx.adv import OwnerDrawnComboBox, ODCB_PAINTING_CONTROL, ODCB_PAINTING_SELECTED
+    from wx.adv import BitmapComboBox
 else:
     import wx.combo
-    from wx.combo import OwnerDrawnComboBox
+    from wx.combo import OwnerDrawnComboBox, ODCB_PAINTING_CONTROL, ODCB_PAINTING_SELECTED
+    from wx.combo import BitmapComboBox
 
 if globalvar.wxPythonPhoenix:
     from wx import Validator as Validator
@@ -175,9 +177,9 @@ class PenStyleComboBox(OwnerDrawnComboBox):
         background area of each item."""
         # If the item is selected, or its item # iseven, or we are painting the
         # combo control itself, then use the default rendering.
-        if (item & 1 == 0 or flags & (wx.combo.ODCB_PAINTING_CONTROL |
-                                      wx.combo.ODCB_PAINTING_SELECTED)):
-            wx.combo.OwnerDrawnComboBox.OnDrawBackground(
+        if (item & 1 == 0 or flags & (ODCB_PAINTING_CONTROL |
+                                      ODCB_PAINTING_SELECTED)):
+            OwnerDrawnComboBox.OnDrawBackground(
                 self, dc, rect, item, flags)
             return
 
@@ -4944,7 +4946,7 @@ class ScalebarDialog(PsmapDialog):
         gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
         sbTypeText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Type:"))
-        self.sbCombo = wx.combo.BitmapComboBox(panel, style=wx.CB_READONLY)
+        self.sbCombo = BitmapComboBox(panel, style=wx.CB_READONLY)
         # only temporary, images must be moved away
         imagePath = os.path.join(
             globalvar.IMGDIR, "scalebar-fancy.png"), os.path.join(


=====================================
gui/wxpython/psmap/frame.py
=====================================
@@ -39,7 +39,7 @@ from core.utils import _, PilImageToWxImage
 from gui_core.forms import GUI
 from gui_core.dialogs import HyperlinkDialog
 from gui_core.ghelp import ShowAboutDialog
-from gui_core.wrap import PseudoDC
+from gui_core.wrap import ClientDC, PseudoDC, Rect, StockCursor, EmptyBitmap
 from psmap.menudata import PsMapMenuData
 from gui_core.toolbars import ToolSwitcher
 
@@ -103,10 +103,10 @@ class PsMapFrame(wx.Frame):
         }
         # available cursors
         self.cursors = {
-            "default": wx.StockCursor(wx.CURSOR_ARROW),
-            "cross": wx.StockCursor(wx.CURSOR_CROSS),
-            "hand": wx.StockCursor(wx.CURSOR_HAND),
-            "sizenwse": wx.StockCursor(wx.CURSOR_SIZENWSE)
+            "default": StockCursor(wx.CURSOR_ARROW),
+            "cross": StockCursor(wx.CURSOR_CROSS),
+            "hand": StockCursor(wx.CURSOR_HAND),
+            "sizenwse": StockCursor(wx.CURSOR_SIZENWSE)
         }
         # pen and brush
         self.pen = {
@@ -385,7 +385,7 @@ class PsMapFrame(wx.Frame):
                        'cols'], rows=event.userData['regionOld']['rows'])
             # wx.BusyInfo does not display the message
             busy = wx.BusyInfo(
-                message=_("Generating preview, wait please"),
+                _("Generating preview, wait please"),
                 parent=self)
             wx.Yield()
             try:
@@ -855,9 +855,9 @@ class PsMapFrame(wx.Frame):
         if 0 < rotation < pi:
             Y = y - H
         if rotation == 0:
-            return wx.Rect(x, y, *textExtent)
+            return Rect(x, y, *textExtent)
         else:
-            return wx.Rect(X, Y, abs(W), abs(H)).Inflate(h, h)
+            return Rect(X, Y, abs(W), abs(H)).Inflate(h, h)
 
     def makePSFont(self, textDict):
         """creates a wx.Font object from selected postscript font. To be
@@ -911,13 +911,13 @@ class PsMapFrame(wx.Frame):
         """Estimates bounding rectangle of text"""
         #fontsize = str(fontsize if fontsize >= 4 else 4)
         # dc created because of method GetTextExtent, which pseudoDC lacks
-        dc = wx.ClientDC(self)
+        dc = ClientDC(self)
 
         fn = self.makePSFont(textDict)
 
         try:
             dc.SetFont(fn)
-            w, h, lh = dc.GetMultiLineTextExtent(textDict['text'])
+            w, h, lh = dc.GetFullMultiLineTextExtent(textDict['text'])
             return (w, h)
         except:
             return (0, 0)
@@ -1255,7 +1255,7 @@ class PsMapBufferedWindow(wx.Window):
         self.pdcImage = PseudoDC()
 
         self.SetClientSize((700, 510))  # ?
-        self._buffer = wx.EmptyBitmap(*self.GetClientSize())
+        self._buffer = EmptyBitmap(*self.GetClientSize())
 
         self.idBoxTmp = wx.NewId()
         self.idZoomBoxTmp = wx.NewId()
@@ -1362,7 +1362,7 @@ class PsMapBufferedWindow(wx.Window):
 
         x = cW / 2 - pW / 2
         y = cH / 2 - pH / 2
-        self.DrawPaper(wx.Rect(x, y, pW, pH))
+        self.DrawPaper(Rect(x, y, pW, pH))
 
     def modifyRectangle(self, r):
         """Recalculates rectangle not to have negative size"""
@@ -1501,7 +1501,7 @@ class PsMapBufferedWindow(wx.Window):
         else:
             self.mouse['use'] = 'zoomout'
 
-        zoomFactor, view = self.ComputeZoom(wx.Rect(0, 0, 0, 0))
+        zoomFactor, view = self.ComputeZoom(Rect(0, 0, 0, 0))
         self.Zoom(zoomFactor, view)
         self.mouse['use'] = oldUse
 
@@ -1694,7 +1694,7 @@ class PsMapBufferedWindow(wx.Window):
                             self.dragId].type].updateDialog()
 
         elif self.mouse['use'] in ('addPoint', 'addLine', 'addRectangle'):
-            endCoordinates = self.CanvasPaperCoordinates(rect=wx.Rect(
+            endCoordinates = self.CanvasPaperCoordinates(rect=Rect(
                 event.GetX(), event.GetY(), 0, 0), canvasToPaper=True)[:2]
 
             diffX = event.GetX() - self.mouse['begin'][0]
@@ -1710,7 +1710,7 @@ class PsMapBufferedWindow(wx.Window):
                     return
 
                 beginCoordinates = self.CanvasPaperCoordinates(
-                    rect=wx.Rect(
+                    rect=Rect(
                         self.mouse['begin'][0],
                         self.mouse['begin'][1],
                         0, 0),
@@ -1772,7 +1772,7 @@ class PsMapBufferedWindow(wx.Window):
             if self.mouse['use'] in (
                     'zoomin', 'zoomout', 'addMap', 'addLine', 'addRectangle'):
                 self.mouse['end'] = event.GetPosition()
-                r = wx.Rect(
+                r = Rect(
                     self.mouse['begin'][0],
                     self.mouse['begin'][1],
                     self.mouse['end'][0] -
@@ -1847,7 +1847,7 @@ class PsMapBufferedWindow(wx.Window):
                     if newWidth < 10 or newHeight < 10:
                         return
 
-                    bounds = wx.Rect(x, y, newWidth, newHeight)
+                    bounds = Rect(x, y, newWidth, newHeight)
                     self.Draw(
                         pen=self.pen['map'],
                         brush=self.brush['map'],
@@ -1897,7 +1897,7 @@ class PsMapBufferedWindow(wx.Window):
 
                     # update paper coordinates
                     points[self.currentLinePoint] = self.CanvasPaperCoordinates(
-                        rect=wx.RectPS(pos, (0, 0)), canvasToPaper=True)[:2]
+                        rect=Rect(pos[0], pos[1], 0, 0), canvasToPaper=True)[:2]
 
                 self.RedrawSelectBox(self.dragId)
 
@@ -2134,7 +2134,10 @@ class PsMapBufferedWindow(wx.Window):
         # redraw preview
         else:  # preview mode
             imageRect = self.pdcImage.GetIdBounds(self.imageId)
-            imageRect.OffsetXY(-view[0], -view[1])
+            if globalvar.wxPythonPhoenix:
+                imageRect.Offset(-view[0], -view[1])
+            else:
+                imageRect.OffsetXY(-view[0], -view[1])
             imageRect = self.ScaleRect(rect=imageRect, scale=zoomFactor)
             self.DrawImage(imageRect)
 
@@ -2149,7 +2152,7 @@ class PsMapBufferedWindow(wx.Window):
         self.Zoom(zoomFactor, view)
 
     def Draw(self, pen, brush, pdc, drawid=None, pdctype='rect',
-             bb=wx.Rect(0, 0, 0, 0), lineCoords=None):
+             bb=Rect(0, 0, 0, 0), lineCoords=None):
         """Draw object with given pen and brush.
 
         :param pdc: PseudoDC
@@ -2183,7 +2186,7 @@ class PsMapBufferedWindow(wx.Window):
 
         if pdctype == 'rectText':
             # dc created because of method GetTextExtent, which pseudoDC lacks
-            dc = wx.ClientDC(self)
+            dc = ClientDC(self)
             font = dc.GetFont()
             size = 10
             font.SetPointSize(size)
@@ -2191,17 +2194,17 @@ class PsMapBufferedWindow(wx.Window):
             dc.SetFont(font)
             pdc.SetFont(font)
             text = '\n'.join(self.itemLabels[drawid])
-            w, h, lh = dc.GetMultiLineTextExtent(text)
+            w, h, lh = dc.GetFullMultiLineTextExtent(text)
             textExtent = (w, h)
-            textRect = wx.Rect(0, 0, *textExtent).CenterIn(bb)
+            textRect = Rect(0, 0, *textExtent).CenterIn(bb)
             r = map(int, bb)
-            while not wx.Rect(*r).ContainsRect(textRect) and size >= 8:
+            while not Rect(*r).ContainsRect(textRect) and size >= 8:
                 size -= 2
                 font.SetPointSize(size)
                 dc.SetFont(font)
                 pdc.SetFont(font)
                 textExtent = dc.GetTextExtent(text)
-                textRect = wx.Rect(0, 0, *textExtent).CenterIn(bb)
+                textRect = Rect(0, 0, *textExtent).CenterIn(bb)
             pdc.SetTextForeground(wx.Colour(100, 100, 100, 200))
             pdc.SetBackgroundMode(wx.TRANSPARENT)
             pdc.DrawLabel(text=text, rect=textRect)
@@ -2327,7 +2330,7 @@ class PsMapBufferedWindow(wx.Window):
         else:
             pdc.DrawRotatedText(textDict['text'], coords[0], coords[1], rot)
 
-        pdc.SetIdBounds(drawId, wx.Rect(*bounds))
+        pdc.SetIdBounds(drawId, Rect(*bounds))
         self.Refresh()
         pdc.EndDrawing()
 
@@ -2382,7 +2385,7 @@ class PsMapBufferedWindow(wx.Window):
         iH = iH * self.currScale
         x = cW / 2 - iW / 2
         y = cH / 2 - iH / 2
-        imageRect = wx.Rect(x, y, iW, iH)
+        imageRect = Rect(x, y, iW, iH)
 
         return imageRect
 
@@ -2404,7 +2407,7 @@ class PsMapBufferedWindow(wx.Window):
             # draw small marks signalizing resizing
             if self.instruction[id].type in ('map', 'rectangle'):
                 controlP = self.pdcObj.GetIdBounds(id).GetBottomRight()
-                rect = wx.RectPS(controlP, self.resizeBoxSize)
+                rect = Rect(controlP[0], controlP[1], self.resizeBoxSize[0], self.resizeBoxSize[1])
                 self.Draw(
                     pen=self.pen['resize'],
                     brush=self.brush['resize'],
@@ -2421,9 +2424,9 @@ class PsMapBufferedWindow(wx.Window):
                 p2Canvas = self.CanvasPaperCoordinates(
                     rect=Rect2DPS(p2Paper, (0, 0)), canvasToPaper=False)[:2]
                 rect = []
-                box = wx.RectS(self.resizeBoxSize)
-                rect.append(box.CenterIn(wx.RectPS(p1Canvas, wx.Size())))
-                rect.append(box.CenterIn(wx.RectPS(p2Canvas, wx.Size())))
+                box = Rect(0, 0, self.resizeBoxSize[0], self.resizeBoxSize[1])
+                rect.append(box.CenterIn(Rect(p1Canvas[0], p1Canvas[1], 0, 0)))
+                rect.append(box.CenterIn(Rect(p2Canvas[0], p2Canvas[1], 0, 0)))
                 for i, point in enumerate((p1Canvas, p2Canvas)):
                     self.Draw(
                         pen=self.pen['resize'],
@@ -2495,11 +2498,11 @@ class PsMapBufferedWindow(wx.Window):
         # Make new off screen bitmap: this bitmap will always have the
         # current drawing in it, so it can be used to save the image
         # to a file, or whatever.
-        self._buffer = wx.EmptyBitmap(width, height)
+        self._buffer = EmptyBitmap(width, height)
         # re-render image on idle
         self.resize = True
 
     def ScaleRect(self, rect, scale):
         """Scale rectangle"""
-        return wx.Rect(rect.GetLeft() * scale, rect.GetTop() * scale,
+        return Rect(rect.GetLeft() * scale, rect.GetTop() * scale,
                        rect.GetSize()[0] * scale, rect.GetSize()[1] * scale)


=====================================
imagery/i.segment/create_isegs.c
=====================================
@@ -113,17 +113,7 @@ int create_isegs(struct globals *globals)
 	globals->max_rid = max_id;
 	G_debug(1, "Largest renumbered ID: %d", globals->max_rid);
 	
-	for (row = 0; row < globals->nrows; row++) {
-	    for (col = 0; col < globals->ncols; col++) {
-		Segment_get(&globals->rid_seg, &rid, row, col);
-		if (!Rast_is_c_null_value(&rid)) {
-		    rid = new_id[rid];
-		    Segment_put(&globals->rid_seg, &rid, row, col);
-		}
-	    }
-	}
-
-	G_free(new_id);
+	globals->new_id = new_id;
     }
 
     return successflag;


=====================================
imagery/i.segment/iseg.h
=====================================
@@ -80,6 +80,7 @@ struct globals
 
     /* region growing */
     int min_segment_size;	/* smallest number of pixels/cells allowed in a final segment */
+    int *new_id;
 
     /* inactive options for region growing */
     double radio_weight;	/* weighing factor radiometric - shape */


=====================================
imagery/i.segment/write_output.c
=====================================
@@ -34,7 +34,8 @@ int write_ids(struct globals *globals)
 		Segment_get(&globals->rid_seg, (void *) &rid, row, col);
 
 		if (rid > 0) {
-		    outbuf[col] = rid;
+		    if (globals->method == ORM_RG)
+			rid = globals->new_id[rid];
 		    if (maxid < rid)
 			maxid = rid;
 		}


=====================================
include/VERSION
=====================================
@@ -1,4 +1,4 @@
 7
 4
-2RC1
+2RC2
 2018


=====================================
locale/po/grasslibs_bn.po
=====================================
@@ -2,7 +2,7 @@
 # Copyright (C) 2017 GRASS Development Team
 # This file is distributed under the same license as the GRASS GIS package.
 # transifex generated, 2017
-# 
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_bn\n"
@@ -10,10 +10,10 @@ msgstr ""
 "POT-Creation-Date: 2018-09-27 23:14-0700\n"
 "PO-Revision-Date: 2018-09-28 22:22+0200\n"
 "Language-Team: Bengali (https://www.transifex.com/grass-gis/teams/45198/bn/)\n"
+"Language: bn\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Language: bn\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: ../lib/raster3d/color.c:354
@@ -355,9 +355,7 @@ msgstr ""
 
 #: ../lib/display/r_raster.c:131
 #, c-format
-msgid ""
-"Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
-"defined"
+msgid "Neither %s (managed by d.mon command) nor %s (used for direct rendering) defined"
 msgstr ""
 
 #: ../lib/display/r_raster.c:150
@@ -419,9 +417,7 @@ msgid "Invalid size of category raster conditions file."
 msgstr ""
 
 #: ../lib/imagery/iscatt_core.c:579
-msgid ""
-"Data inconsistent. Value computed for scatter plot is out of initialized "
-"range."
+msgid "Data inconsistent. Value computed for scatter plot is out of initialized range."
 msgstr ""
 
 #: ../lib/imagery/iscatt_core.c:745
@@ -621,9 +617,7 @@ msgstr ""
 
 #: ../lib/imagery/sigsetfile.c:41
 #, c-format
-msgid ""
-"Unable to create signature file <%s> for subgroup <%s> of group <%s> - <%s> "
-"is not current mapset"
+msgid "Unable to create signature file <%s> for subgroup <%s> of group <%s> - <%s> is not current mapset"
 msgstr ""
 
 #: ../lib/imagery/sigsetfile.c:57
@@ -732,8 +726,7 @@ msgstr ""
 
 #: ../lib/proj/convert.c:178
 #, c-format
-msgid ""
-"OGR can't parse PROJ.4-style parameter string: %s (OGR Error code was %d)"
+msgid "OGR can't parse PROJ.4-style parameter string: %s (OGR Error code was %d)"
 msgstr ""
 
 #: ../lib/proj/convert.c:191
@@ -743,9 +736,7 @@ msgstr ""
 
 #: ../lib/proj/convert.c:427
 #, c-format
-msgid ""
-"Updating spatial reference with embedded proj4 definition failed. Proj4 "
-"definition: <%s>"
+msgid "Updating spatial reference with embedded proj4 definition failed. Proj4 definition: <%s>"
 msgstr ""
 
 #: ../lib/proj/convert.c:434
@@ -763,16 +754,12 @@ msgstr ""
 
 #: ../lib/proj/convert.c:642
 #, c-format
-msgid ""
-"Datum <%s> apparently recognised by GRASS but no parameters found. You may "
-"want to look into this."
+msgid "Datum <%s> apparently recognised by GRASS but no parameters found. You may want to look into this."
 msgstr ""
 
 #: ../lib/proj/convert.c:646
 #, c-format
-msgid ""
-"Invalid transformation number %d; valid range is 1 to %d. Leaving datum "
-"transform parameters unspecified."
+msgid "Invalid transformation number %d; valid range is 1 to %d. Leaving datum transform parameters unspecified."
 msgstr ""
 
 #: ../lib/proj/do_proj.c:106 ../lib/proj/do_proj.c:180
@@ -787,8 +774,7 @@ msgstr ""
 
 #: ../lib/symbol/read.c:260
 #, c-format
-msgid ""
-"Incorrect symbol name: '%s' (should be: group/name or group/name at mapset)"
+msgid "Incorrect symbol name: '%s' (should be: group/name or group/name at mapset)"
 msgstr ""
 
 #: ../lib/symbol/read.c:284
@@ -821,9 +807,7 @@ msgstr ""
 
 #: ../lib/arraystats/class.c:242
 #, c-format
-msgid ""
-"There are classbreaks outside the range min-max. Number of classes reduced "
-"to %i, but using probabilities for %i classes."
+msgid "There are classbreaks outside the range min-max. Number of classes reduced to %i, but using probabilities for %i classes."
 msgstr ""
 
 #: ../lib/lidar/raster.c:74 ../lib/lidar/raster.c:89 ../lib/lidar/raster.c:102
@@ -978,8 +962,7 @@ msgstr ""
 
 #: ../lib/cairodriver/read_ppm.c:56
 #, c-format
-msgid ""
-"Cairo: input mask file has incorrect dimensions: expected: %dx%d got: %dx%d"
+msgid "Cairo: input mask file has incorrect dimensions: expected: %dx%d got: %dx%d"
 msgstr ""
 
 #: ../lib/cairodriver/read_xid.c:14
@@ -1111,16 +1094,12 @@ msgstr ""
 
 #: ../lib/rst/interp_float/segmen2d.c:133
 #: ../lib/rst/interp_float/segmen2d_parallel.c:188
-msgid ""
-"Taking too long to find points for interpolation - please change the region "
-"to area where your points are. Continuing calculations..."
+msgid "Taking too long to find points for interpolation - please change the region to area where your points are. Continuing calculations..."
 msgstr ""
 
 #: ../lib/rst/interp_float/interp2d.c:232
 #, c-format
-msgid ""
-"Overshoot - increase in tension suggested. Overshoot occurs at (%d,%d) cell."
-" Z-value %f, zmin %f, zmax %f."
+msgid "Overshoot - increase in tension suggested. Overshoot occurs at (%d,%d) cell. Z-value %f, zmin %f, zmax %f."
 msgstr ""
 
 #: ../lib/rst/interp_float/resout2d.c:77
@@ -1220,9 +1199,7 @@ msgstr ""
 
 #: ../lib/rst/interp_float/vinput2d.c:277
 #, c-format
-msgid ""
-"%d points given for interpolation (after thinning) is less than given "
-"NPMIN=%d"
+msgid "%d points given for interpolation (after thinning) is less than given NPMIN=%d"
 msgstr ""
 
 #: ../lib/rst/interp_float/vinput2d.c:282
@@ -1231,16 +1208,12 @@ msgstr ""
 
 #: ../lib/rst/interp_float/vinput2d.c:287
 #, c-format
-msgid ""
-"Segmentation parameters set to invalid values: npmin= %d, segmax= %d for "
-"smooth connection of segments, npmin > segmax (see manual)"
+msgid "Segmentation parameters set to invalid values: npmin= %d, segmax= %d for smooth connection of segments, npmin > segmax (see manual)"
 msgstr ""
 
 #: ../lib/rst/interp_float/vinput2d.c:293
 #, c-format
-msgid ""
-"There are less than %d points for interpolation. No segmentation is "
-"necessary, to run the program faster set segmax=%d (see manual)"
+msgid "There are less than %d points for interpolation. No segmentation is necessary, to run the program faster set segmax=%d (see manual)"
 msgstr ""
 
 #: ../lib/rst/interp_float/vinput2d.c:297
@@ -1385,9 +1358,7 @@ msgstr ""
 
 #: ../lib/db/dbmi_base/login.c:232
 #, c-format
-msgid ""
-"DB connection <%s/%s> already exists. Re-run '%s' with '--%s' flag to "
-"overwrite existing settings."
+msgid "DB connection <%s/%s> already exists. Re-run '%s' with '--%s' flag to overwrite existing settings."
 msgstr ""
 
 #: ../lib/db/dbmi_base/valuefmt.c:52
@@ -1797,9 +1768,7 @@ msgid "Invalid size <%d>"
 msgstr ""
 
 #: ../lib/python/script/array.py:197
-msgid ""
-"grass.script.array.read is deprecated and does not work on MS Windows, pass "
-"raster name in the constructor"
+msgid "grass.script.array.read is deprecated and does not work on MS Windows, pass raster name in the constructor"
 msgstr ""
 
 #: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
@@ -1813,15 +1782,12 @@ msgid "Invalid integer size <%d>"
 msgstr ""
 
 #: ../lib/python/script/array.py:346
-msgid ""
-"grass.script.array3d.read is deprecated and does not work on MS Windows, "
-"pass 3D raster name in the constructor"
+msgid "grass.script.array3d.read is deprecated and does not work on MS Windows, pass 3D raster name in the constructor"
 msgstr ""
 
 #: ../lib/python/script/db.py:153
 #, python-format
-msgid ""
-"Programmer error: '%(sql)s', '%(filename)s', or '%(table)s' must be provided"
+msgid "Programmer error: '%(sql)s', '%(filename)s', or '%(table)s' must be provided"
 msgstr ""
 
 #: ../lib/python/script/db.py:163
@@ -1830,9 +1796,7 @@ msgstr ""
 
 #: ../lib/python/script/raster.py:51
 #, python-format
-msgid ""
-"Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
-"current mapset."
+msgid "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in current mapset."
 msgstr ""
 
 #: ../lib/python/script/raster.py:110
@@ -1899,10 +1863,7 @@ msgstr ""
 
 #: ../lib/python/script/core.py:307
 #, python-format
-msgid ""
-"To run the module <%s> add underscore at the end of the option <%s> to avoid"
-" conflict with Python keywords. Underscore at the beginning is depreciated "
-"in GRASS GIS 7.0 and will be removed in version 7.1."
+msgid "To run the module <%s> add underscore at the end of the option <%s> to avoid conflict with Python keywords. Underscore at the beginning is depreciated in GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
 #: ../lib/python/script/core.py:987
@@ -2178,9 +2139,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1609
 #, python-format
-msgid ""
-"Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
-"The mapset of the dataset does not match the current mapset"
+msgid "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1616
@@ -2191,16 +2150,12 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1778
 #, python-format
-msgid ""
-"Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
-"The mapset of the dataset does not match the current mapset"
+msgid "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1880
 #, python-format
-msgid ""
-"Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database."
-" The mapset of the dataset does not match the current mapset"
+msgid "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1889
@@ -2215,9 +2170,7 @@ msgstr ""
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1960
 #: ../lib/python/temporal/abstract_map_dataset.py:841
 #, python-format
-msgid ""
-"Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
-"database. The mapset of the dataset does not match the current mapset"
+msgid "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:1973
@@ -2231,15 +2184,11 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2057
 #, python-format
-msgid ""
-"Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
-"the dataset does not match the current mapset"
+msgid "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2066
-msgid ""
-"Only a map that was inserted in the temporal database can be registered in a"
-" space time dataset"
+msgid "Only a map that was inserted in the temporal database can be registered in a space time dataset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2089
@@ -2254,15 +2203,12 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2111
 #, python-format
-msgid ""
-"Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
-"%(l)s are different"
+msgid "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer %(l)s are different"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2117
 #, python-format
-msgid ""
-"Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
+msgid "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2132
@@ -2272,16 +2218,12 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2142
 #, python-format
-msgid ""
-"Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
-"layer %(l)s are different"
+msgid "Relative time units of space time dataset <%(id)s> and map <%(map)s> with layer %(l)s are different"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2148
 #, python-format
-msgid ""
-"Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
-"different"
+msgid "Relative time units of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2154
@@ -2300,17 +2242,12 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2211
 #, python-format
-msgid ""
-"Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
-"temporal database. The mapset of the dataset does not match the current "
-"mapset"
+msgid "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2224
 #, python-format
-msgid ""
-"Map <%(map)s> with layer %(l)s is not registered in space time dataset "
-"<%(base)s>"
+msgid "Map <%(map)s> with layer %(l)s is not registered in space time dataset <%(base)s>"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2230
@@ -2324,16 +2261,12 @@ msgstr ""
 #: ../lib/python/temporal/abstract_dataset.py:426
 #: ../lib/python/temporal/abstract_dataset.py:469
 #, python-format
-msgid ""
-"Unable to update dataset <%(ds)s> of type %(type)s in the temporal database."
-" The mapset of the dataset does not match the current mapset"
+msgid "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_space_time_dataset.py:2291
 #, python-format
-msgid ""
-"Update metadata, spatial and temporal extent from all registered maps of "
-"<%s>"
+msgid "Update metadata, spatial and temporal extent from all registered maps of <%s>"
 msgstr ""
 
 #: ../lib/python/temporal/stds_import.py:85
@@ -2464,9 +2397,7 @@ msgstr ""
 
 #: ../lib/python/temporal/stds_import.py:435
 #, python-format
-msgid ""
-"Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
-"overwrite flag."
+msgid "Space time %(t)s dataset <%(sp)s> is already in the database. Use the overwrite flag."
 msgstr ""
 
 #: ../lib/python/temporal/stds_import.py:456
@@ -2498,9 +2429,7 @@ msgstr ""
 
 #: ../lib/python/temporal/temporal_vector_algebra.py:386
 #, python-format
-msgid ""
-"Error vector maps with basename %s exist. Use --o flag to overwrite existing"
-" file"
+msgid "Error vector maps with basename %s exist. Use --o flag to overwrite existing file"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_vector_algebra.py:419
@@ -2534,15 +2463,12 @@ msgstr ""
 
 #: ../lib/python/temporal/open_stds.py:125
 #, python-format
-msgid ""
-"Space time %(sp)s dataset <%(name)s> is already in the database. Use the "
-"overwrite flag."
+msgid "Space time %(sp)s dataset <%(name)s> is already in the database. Use the overwrite flag."
 msgstr ""
 
 #: ../lib/python/temporal/open_stds.py:160
 #, python-format
-msgid ""
-"Overwriting space time %(sp)s dataset <%(name)s> and unregistering all maps"
+msgid "Overwriting space time %(sp)s dataset <%(name)s> and unregistering all maps"
 msgstr ""
 
 #: ../lib/python/temporal/open_stds.py:168
@@ -2553,14 +2479,11 @@ msgstr ""
 #: ../lib/python/temporal/open_stds.py:211
 #: ../lib/python/temporal/extract.py:131 ../lib/python/temporal/mapcalc.py:239
 #, python-format
-msgid ""
-"Map <%s> is already in temporal database, use overwrite flag to overwrite"
+msgid "Map <%s> is already in temporal database, use overwrite flag to overwrite"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:815
-msgid ""
-"Spatio-temporal topological operators are not supported in granularity "
-"algebra mode"
+msgid "Spatio-temporal topological operators are not supported in granularity algebra mode"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:853
@@ -2584,9 +2507,7 @@ msgstr ""
 #: ../lib/python/temporal/temporal_algebra.py:1196
 #: ../lib/python/temporal/temporal_algebra.py:1200
 #, python-format
-msgid ""
-"Wrong temporal type of space time dataset <%s>"
-"                                       <%s> time is required"
+msgid "Wrong temporal type of space time dataset <%s>                                       <%s> time is required"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:1220
@@ -2595,15 +2516,11 @@ msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:2186
 #, python-format
-msgid ""
-"The resulting space time dataset type <%(a)s> is different from the "
-"requested type <%(b)s>"
+msgid "The resulting space time dataset type <%(a)s> is different from the requested type <%(b)s>"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:2192
-msgid ""
-"Maps that should be registered in the resulting space time dataset have "
-"different types."
+msgid "Maps that should be registered in the resulting space time dataset have different types."
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:2395
@@ -2613,9 +2530,7 @@ msgid "%s map <%s> not found in GRASS spatial database"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:2401
-msgid ""
-"Wrong map type. TMAP only supports single maps that are registered in the "
-"temporal GRASS database"
+msgid "Wrong map type. TMAP only supports single maps that are registered in the temporal GRASS database"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_algebra.py:2429
@@ -2707,14 +2622,11 @@ msgstr ""
 
 #: ../lib/python/temporal/register.py:114
 #, python-format
-msgid ""
-"Space time %(sp)s dataset <%(name)s> with relative time found, but no "
-"relative unit set for %(sp)s maps"
+msgid "Space time %(sp)s dataset <%(name)s> with relative time found, but no relative unit set for %(sp)s maps"
 msgstr ""
 
 #: ../lib/python/temporal/register.py:175
-msgid ""
-"The increment option will be ignored because of time stamps in input file"
+msgid "The increment option will be ignored because of time stamps in input file"
 msgstr ""
 
 #: ../lib/python/temporal/register.py:179
@@ -2732,16 +2644,12 @@ msgstr ""
 
 #: ../lib/python/temporal/register.py:215
 #, python-format
-msgid ""
-"Unable to register %(t)s map <%(id)s> with layer %(l)s. The map has "
-"timestamp and the start time is not set."
+msgid "Unable to register %(t)s map <%(id)s> with layer %(l)s. The map has timestamp and the start time is not set."
 msgstr ""
 
 #: ../lib/python/temporal/register.py:221
 #, python-format
-msgid ""
-"Unable to register %(t)s map <%(id)s>. The map has no timestamp and the "
-"start time is not set."
+msgid "Unable to register %(t)s map <%(id)s>. The map has no timestamp and the start time is not set."
 msgstr ""
 
 #: ../lib/python/temporal/register.py:229
@@ -2756,23 +2664,17 @@ msgstr ""
 
 #: ../lib/python/temporal/register.py:245
 #, python-format
-msgid ""
-"Map is already registered in temporal database. Unable to update %(t)s map "
-"<%(id)s> with layer %(l)s. Overwrite flag is not set."
+msgid "Map is already registered in temporal database. Unable to update %(t)s map <%(id)s> with layer %(l)s. Overwrite flag is not set."
 msgstr ""
 
 #: ../lib/python/temporal/register.py:252
 #, python-format
-msgid ""
-"Map is already registered in temporal database. Unable to update %(t)s map "
-"<%(id)s>. Overwrite flag is not set."
+msgid "Map is already registered in temporal database. Unable to update %(t)s map <%(id)s>. Overwrite flag is not set."
 msgstr ""
 
 #: ../lib/python/temporal/register.py:276
 #, python-format
-msgid ""
-"Unable to update %(t)s map <%(id)s> with layer %(l)s. The temporal types are"
-" different."
+msgid "Unable to update %(t)s map <%(id)s> with layer %(l)s. The temporal types are different."
 msgstr ""
 
 #: ../lib/python/temporal/register.py:282
@@ -2805,9 +2707,7 @@ msgstr ""
 
 #: ../lib/python/temporal/register.py:422
 #, python-format
-msgid ""
-"Set absolute valid time for map <%(id)s> with layer %(layer)s to %(start)s -"
-" %(end)s"
+msgid "Set absolute valid time for map <%(id)s> with layer %(layer)s to %(start)s - %(end)s"
 msgstr ""
 
 #: ../lib/python/temporal/register.py:427
@@ -2817,8 +2717,7 @@ msgstr ""
 
 #: ../lib/python/temporal/register.py:444
 #, python-format
-msgid ""
-"Set relative valid time for map <%s> with layer %s to %i - %s with unit %s"
+msgid "Set relative valid time for map <%s> with layer %s to %i - %s with unit %s"
 msgstr ""
 
 #: ../lib/python/temporal/register.py:449
@@ -2833,9 +2732,7 @@ msgstr ""
 
 #: ../lib/python/temporal/aggregation.py:141
 #, python-format
-msgid ""
-"Raster map <%(name)s> is already in temporal database, use overwrite flag to"
-" overwrite"
+msgid "Raster map <%(name)s> is already in temporal database, use overwrite flag to overwrite"
 msgstr ""
 
 #: ../lib/python/temporal/aggregation.py:146
@@ -2854,16 +2751,12 @@ msgstr ""
 
 #: ../lib/python/temporal/aggregation.py:301
 #, python-format
-msgid ""
-"Unable to perform aggregation. Output raster map <%(name)s> exists and "
-"overwrite flag was not set"
+msgid "Unable to perform aggregation. Output raster map <%(name)s> exists and overwrite flag was not set"
 msgstr ""
 
 #: ../lib/python/temporal/aggregation.py:319
 #, python-format
-msgid ""
-"The limit of open files (%i) was reached (%i). The module r.series will be "
-"run with flag z, to avoid open files limit exceeding."
+msgid "The limit of open files (%i) was reached (%i). The module r.series will be run with flag z, to avoid open files limit exceeding."
 msgstr ""
 
 #: ../lib/python/temporal/datetime_math.py:256
@@ -2889,8 +2782,7 @@ msgstr ""
 msgid "Unable to parse time string: %s"
 msgstr ""
 
-#: ../lib/python/temporal/sampling.py:95
-#: ../lib/python/temporal/sampling.py:100
+#: ../lib/python/temporal/sampling.py:95 ../lib/python/temporal/sampling.py:100
 #, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr ""
@@ -2919,25 +2811,19 @@ msgid "Error in computation process"
 msgstr ""
 
 #: ../lib/python/temporal/spatial_extent.py:123
-msgid ""
-"Projections are different. Unable to compute overlapping_2d for spatial "
-"extents"
+msgid "Projections are different. Unable to compute overlapping_2d for spatial extents"
 msgstr ""
 
 #: ../lib/python/temporal/spatial_extent.py:529
-msgid ""
-"Projections are different. Unable to compute is_in_2d for spatial extents"
+msgid "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
 #: ../lib/python/temporal/spatial_extent.py:661
-msgid ""
-"Projections are different. Unable to compute equivalent_2d for spatial "
-"extents"
+msgid "Projections are different. Unable to compute equivalent_2d for spatial extents"
 msgstr ""
 
 #: ../lib/python/temporal/spatial_extent.py:766
-msgid ""
-"Projections are different. Unable to compute cover_2d for spatial extents"
+msgid "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
 #: ../lib/python/temporal/spatial_extent.py:838
@@ -2955,9 +2841,7 @@ msgstr ""
 #: ../lib/python/temporal/temporal_granularity.py:1054
 #: ../lib/python/temporal/temporal_granularity.py:1096
 #, python-brace-format
-msgid ""
-"Output granularity seems not to be valid. Please use one of the following "
-"values : {gr}"
+msgid "Output granularity seems not to be valid. Please use one of the following values : {gr}"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_granularity.py:1058
@@ -2972,9 +2856,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:350
 #, python-format
-msgid ""
-"Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
-"%(l)s"
+msgid "Start time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:357
@@ -2984,9 +2866,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:365
 #, python-format
-msgid ""
-"End time must be of type datetime for %(type)s map <%(id)s> with layer: "
-"%(l)s"
+msgid "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:372
@@ -2996,9 +2876,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:381
 #, python-format
-msgid ""
-"End time must be greater than start time for %(type)s map <%(id)s> with "
-"layer: %(l)s"
+msgid "End time must be greater than start time for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:389
@@ -3009,9 +2887,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:460
 #, python-format
-msgid ""
-"Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
-"%(l)s: %(u)s"
+msgid "Unsupported relative time unit type for %(type)s map <%(id)s> with layer %(l)s: %(u)s"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:467
@@ -3021,22 +2897,17 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:476
 #, python-format
-msgid ""
-"End time must be greater than start time for %(typ)s map <%(id)s> with layer"
-" %(l)s"
+msgid "End time must be greater than start time for %(typ)s map <%(id)s> with layer %(l)s"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:800
 #, python-format
-msgid ""
-"Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is"
-" greater than end time"
+msgid "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is greater than end time"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:806
 #, python-format
-msgid ""
-"Map <%s> has incorrect time interval, start time is greater than end time"
+msgid "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:812
@@ -3051,9 +2922,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_map_dataset.py:909
 #, python-format
-msgid ""
-"Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
-"database. The mapset of the dataset does not match the current mapset"
+msgid "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/factory.py:51
@@ -3063,9 +2932,7 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:386
 #, python-format
-msgid ""
-"Unable to insert dataset <%(ds)s> of type %(type)s in the temporal database."
-" The mapset of the dataset does not match the current mapset"
+msgid "Unable to insert dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
 #: ../lib/python/temporal/stds_export.py:107
@@ -3111,10 +2978,7 @@ msgid "No samples found for map calculation"
 msgstr ""
 
 #: ../lib/python/temporal/mapcalc.py:155
-msgid ""
-"Found more than a single map in a sample granule. Only the first map is used"
-" for computation. Use t.rast.aggregate.ds to create synchronous raster "
-"datasets."
+msgid "Found more than a single map in a sample granule. Only the first map is used for computation. Use t.rast.aggregate.ds to create synchronous raster datasets."
 msgstr ""
 
 #: ../lib/python/temporal/mapcalc.py:173
@@ -3156,9 +3020,7 @@ msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
 #: ../lib/python/temporal/core.py:603
-msgid ""
-"Unable to initialize the temporal DBMI interface. Please use t.connect to "
-"specify the driver and the database string"
+msgid "Unable to initialize the temporal DBMI interface. Please use t.connect to specify the driver and the database string"
 msgstr ""
 
 #: ../lib/python/temporal/core.py:672
@@ -3311,8 +3173,7 @@ msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
 #: ../lib/init/grass.py:338
-msgid ""
-"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgid "force removal of .gislock if exists (use with care!). Only with -text flag"
 msgstr ""
 
 #: ../lib/init/grass.py:339
@@ -3357,8 +3218,7 @@ msgid "initial GRASS Location"
 msgstr ""
 
 #: ../lib/init/grass.py:351
-msgid ""
-"directory containing Mapsets with one common coordinate system (projection)"
+msgid "directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
 #: ../lib/init/grass.py:352
@@ -3422,15 +3282,12 @@ msgid "The APPDATA variable is not set, ask your operating system support"
 msgstr ""
 
 #: ../lib/init/grass.py:393
-msgid ""
-"The APPDATA variable points to directory which does not exist, ask your "
-"operating system support"
+msgid "The APPDATA variable points to directory which does not exist, ask your operating system support"
 msgstr ""
 
 #: ../lib/init/grass.py:440
 #, python-format
-msgid ""
-"Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
+msgid "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr ""
 
 #: ../lib/init/grass.py:493
@@ -3488,22 +3345,17 @@ msgstr ""
 
 #: ../lib/init/grass.py:860
 #, python-format
-msgid ""
-"<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
 msgstr ""
 
 #: ../lib/init/grass.py:865
 #, python-format
-msgid ""
-"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
-"DEFAULT_WIND file (default computational region)"
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a DEFAULT_WIND file (default computational region)"
 msgstr ""
 
 #: ../lib/init/grass.py:870
 #, python-brace-format
-msgid ""
-"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
-"be created by '-c' switch."
+msgid "Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can be created by '-c' switch."
 msgstr ""
 
 #: ../lib/init/grass.py:874
@@ -3523,8 +3375,7 @@ msgstr ""
 
 #: ../lib/init/grass.py:884
 #, python-brace-format
-msgid ""
-"Mapset <{mapset}> or Location <{location}> is invalid for an unknown reason"
+msgid "Mapset <{mapset}> or Location <{location}> is invalid for an unknown reason"
 msgstr ""
 
 #: ../lib/init/grass.py:947
@@ -3544,9 +3395,7 @@ msgstr ""
 
 #: ../lib/init/grass.py:996
 #, python-format
-msgid ""
-"Invalid user interface specified - <%s>. Use the --help option to see valid "
-"interface names."
+msgid "Invalid user interface specified - <%s>. Use the --help option to see valid interface names."
 msgstr ""
 
 #: ../lib/init/grass.py:1015
@@ -3612,9 +3461,7 @@ msgstr ""
 
 #: ../lib/init/grass.py:1262
 #, python-format
-msgid ""
-"%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Forcing to launch GRASS..."
+msgid "%(user)s is currently running GRASS in selected mapset (file %(file)s found). Forcing to launch GRASS..."
 msgstr ""
 
 #: ../lib/init/grass.py:1266
@@ -3774,9 +3621,7 @@ msgstr ""
 
 #: ../lib/init/grass.py:1932
 #, python-brace-format
-msgid ""
-"<{0}> requested, but not available. Run GRASS in text mode (-text) or "
-"install missing package (usually 'grass-gui')."
+msgid "<{0}> requested, but not available. Run GRASS in text mode (-text) or install missing package (usually 'grass-gui')."
 msgstr ""
 
 #: ../lib/init/grass.py:1986
@@ -3982,9 +3827,7 @@ msgstr ""
 
 #: ../lib/raster/get_cellhd.c:66
 #, c-format
-msgid ""
-"Unable to read header file for raster map <%s@%s>. It is a reclass of raster"
-" map <%s@%s> %s"
+msgid "Unable to read header file for raster map <%s@%s>. It is a reclass of raster map <%s@%s> %s"
 msgstr ""
 
 #: ../lib/raster/get_cellhd.c:70
@@ -4155,9 +3998,7 @@ msgid "Rast_set_window() called while window split"
 msgstr ""
 
 #: ../lib/raster/set_window.c:131
-msgid ""
-"Rast_set_read_window(): projection/zone differs from that of currently open "
-"raster maps"
+msgid "Rast_set_read_window(): projection/zone differs from that of currently open raster maps"
 msgstr ""
 
 #: ../lib/raster/set_window.c:158
@@ -4171,21 +4012,15 @@ msgid "Output window changed while maps are open for write. Map name <%s>"
 msgstr ""
 
 #: ../lib/raster/window.c:31
-msgid ""
-"Internal error: Rast_get_window() called with split window. Use "
-"Rast_get_input_window() or Rast_get_output_window() instead."
+msgid "Internal error: Rast_get_window() called with split window. Use Rast_get_input_window() or Rast_get_output_window() instead."
 msgstr ""
 
 #: ../lib/raster/window.c:90
-msgid ""
-"Internal error: Rast_window_rows() called with split window. Use "
-"Rast_input_window_rows() or Rast_output_window_rows() instead."
+msgid "Internal error: Rast_window_rows() called with split window. Use Rast_input_window_rows() or Rast_output_window_rows() instead."
 msgstr ""
 
 #: ../lib/raster/window.c:125
-msgid ""
-"Internal error: Rast_window_cols() called with split window. Use "
-"Rast_input_window_cols() or Rast_output_window_cols() instead."
+msgid "Internal error: Rast_window_cols() called with split window. Use Rast_input_window_cols() or Rast_output_window_cols() instead."
 msgstr ""
 
 #: ../lib/raster/init.c:61
@@ -4198,8 +4033,7 @@ msgid "Unknown compression method <%s>, using default ZLIB"
 msgstr ""
 
 #: ../lib/raster/init.c:113
-msgid ""
-"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgid "No compression is not supported for GRASS raster maps, using default ZLIB"
 msgstr ""
 
 #: ../lib/raster/init.c:118
@@ -4209,9 +4043,7 @@ msgstr ""
 
 #: ../lib/raster/open.c:191
 #, c-format
-msgid ""
-"Unable to open raster map <%s@%s> since it is a reclass of raster map "
-"<%s@%s> which does not exist"
+msgid "Unable to open raster map <%s@%s> since it is a reclass of raster map <%s@%s> which does not exist"
 msgstr ""
 
 #: ../lib/raster/open.c:196
@@ -4236,9 +4068,7 @@ msgstr ""
 
 #: ../lib/raster/open.c:238
 #, c-format
-msgid ""
-"Raster map <%s> is in different projection than current region. Found <%s>, "
-"should be <%s>."
+msgid "Raster map <%s> is in different projection than current region. Found <%s>, should be <%s>."
 msgstr ""
 
 #: ../lib/raster/open.c:245
@@ -4253,8 +4083,7 @@ msgstr ""
 
 #: ../lib/raster/open.c:275
 #, c-format
-msgid ""
-"Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
+msgid "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
 #: ../lib/raster/open.c:283
@@ -4326,8 +4155,7 @@ msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr ""
 
 #: ../lib/raster/open.c:1028
-msgid ""
-"Rast_set_quant_rules() can be called only for raster maps opened for reading"
+msgid "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
 
 #: ../lib/raster/gdal.c:89
@@ -4355,9 +4183,7 @@ msgstr ""
 
 #: ../lib/raster/gdal.c:500
 #, c-format
-msgid ""
-"Driver <%s> does not support direct writing. Using MEM driver for "
-"intermediate dataset."
+msgid "Driver <%s> does not support direct writing. Using MEM driver for intermediate dataset."
 msgstr ""
 
 #: ../lib/raster/gdal.c:506
@@ -4522,23 +4348,17 @@ msgstr ""
 
 #: ../lib/vector/diglib/plus_struct.c:523
 #, c-format
-msgid ""
-"This version of GRASS (%d.%d) is too old to read this topology format. Try "
-"to rebuild topology or upgrade GRASS to at least version %d."
+msgid "This version of GRASS (%d.%d) is too old to read this topology format. Try to rebuild topology or upgrade GRASS to at least version %d."
 msgstr ""
 
 #: ../lib/vector/diglib/plus_struct.c:529
 #, c-format
-msgid ""
-"Your GRASS version does not fully support topology format %d.%d of the "
-"vector. Consider to rebuild topology or upgrade GRASS."
+msgid "Your GRASS version does not fully support topology format %d.%d of the vector. Consider to rebuild topology or upgrade GRASS."
 msgstr ""
 
 #: ../lib/vector/diglib/plus_struct.c:539
 #, c-format
-msgid ""
-"Old topology format version %d.%d is not supported by this release. Try to "
-"rebuild topology using v.build or v.build.all module."
+msgid "Old topology format version %d.%d is not supported by this release. Try to rebuild topology using v.build or v.build.all module."
 msgstr ""
 
 #: ../lib/vector/diglib/plus_struct.c:563 ../lib/vector/diglib/portable.c:208
@@ -4548,9 +4368,7 @@ msgstr ""
 
 #: ../lib/vector/diglib/cindex_rw.c:156
 #, c-format
-msgid ""
-"This version of GRASS (%d.%d) is too old to read this category index format."
-" Try to rebuild topology or upgrade GRASS to at least version %d."
+msgid "This version of GRASS (%d.%d) is too old to read this category index format. Try to rebuild topology or upgrade GRASS to at least version %d."
 msgstr ""
 
 #: ../lib/vector/diglib/file.c:159
@@ -4680,9 +4498,7 @@ msgstr ""
 
 #: ../lib/vector/diglib/plus_node.c:214
 #, c-format
-msgid ""
-"Attempt to read line angle for the line which is not connected to the node: "
-"node %d, line %d"
+msgid "Attempt to read line angle for the line which is not connected to the node: node %d, line %d"
 msgstr ""
 
 #: ../lib/vector/diglib/spindex.c:450
@@ -4715,23 +4531,17 @@ msgstr ""
 
 #: ../lib/vector/diglib/spindex_rw.c:302
 #, c-format
-msgid ""
-"This version of GRASS (%d.%d) is too old to read this spatial index format. "
-"Try to rebuild topology or upgrade GRASS to at least version %d."
+msgid "This version of GRASS (%d.%d) is too old to read this spatial index format. Try to rebuild topology or upgrade GRASS to at least version %d."
 msgstr ""
 
 #: ../lib/vector/diglib/spindex_rw.c:308
 #, c-format
-msgid ""
-"Your GRASS version does not fully support spatial index format %d.%d of the "
-"vector. Consider to rebuild topology or upgrade GRASS."
+msgid "Your GRASS version does not fully support spatial index format %d.%d of the vector. Consider to rebuild topology or upgrade GRASS."
 msgstr ""
 
 #: ../lib/vector/diglib/spindex_rw.c:317
 #, c-format
-msgid ""
-"Spatial index format version %d.%d is not supported by this release. Please "
-"rebuild topology."
+msgid "Spatial index format version %d.%d is not supported by this release. Please rebuild topology."
 msgstr ""
 
 #: ../lib/vector/diglib/test.c:58
@@ -4740,28 +4550,22 @@ msgstr ""
 
 #: ../lib/vector/diglib/test.c:75
 #, c-format
-msgid ""
-"Error in read/write portable double, byte_order = %d Written: %.16e3E Read: "
-"%.16e3E"
+msgid "Error in read/write portable double, byte_order = %d Written: %.16e3E Read: %.16e3E"
 msgstr ""
 
 #: ../lib/vector/diglib/test.c:89
 #, c-format
-msgid ""
-"Error in read/write portable float, byte_order = %d Written: %.8e3E Read: "
-"%.8e3E"
+msgid "Error in read/write portable float, byte_order = %d Written: %.8e3E Read: %.8e3E"
 msgstr ""
 
 #: ../lib/vector/diglib/test.c:104
 #, c-format
-msgid ""
-"Error in read/write portable off_t, byte_order = %d Written: %lu Read: %lu"
+msgid "Error in read/write portable off_t, byte_order = %d Written: %lu Read: %lu"
 msgstr ""
 
 #: ../lib/vector/diglib/test.c:119
 #, c-format
-msgid ""
-"Error in read/write portable long, byte_order = %d Written: %lu Read: %lu"
+msgid "Error in read/write portable long, byte_order = %d Written: %lu Read: %lu"
 msgstr ""
 
 #: ../lib/vector/diglib/test.c:134
@@ -4771,14 +4575,12 @@ msgstr ""
 
 #: ../lib/vector/diglib/test.c:150
 #, c-format
-msgid ""
-"Error in read/write portable short, byte_order = %d Written: %d Read: %d"
+msgid "Error in read/write portable short, byte_order = %d Written: %d Read: %d"
 msgstr ""
 
 #: ../lib/vector/diglib/test.c:165
 #, c-format
-msgid ""
-"Error in read/write portable char, byte_order = %d Written: %d Read: %d"
+msgid "Error in read/write portable char, byte_order = %d Written: %d Read: %d"
 msgstr ""
 
 #: ../lib/vector/rtree/test_suite/test_basics.c:40
@@ -4872,8 +4674,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/read_pg.c:365
 #, c-format
-msgid ""
-"Requesting invalid feature from cache (%d). Number of features in cache: %d"
+msgid "Requesting invalid feature from cache (%d). Number of features in cache: %d"
 msgstr ""
 
 #: ../lib/vector/Vlib/read_pg.c:368
@@ -5010,16 +4811,12 @@ msgstr ""
 
 #: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
-msgid ""
-"Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
-"excess)"
+msgid "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes excess)"
 msgstr ""
 
 #: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
-msgid ""
-"Coor file of vector <%s@%s> is shorter than it should be (%ld bytes "
-"missing)."
+msgid "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
 msgstr ""
 
 #: ../lib/vector/Vlib/box.c:264
@@ -5069,13 +4866,11 @@ msgid "Unexpected result of line_intersection() res = %d"
 msgstr ""
 
 #: ../lib/vector/Vlib/buffer2.c:589
-msgid ""
-"Next edge was visited (right) but it is not the first one !!! breaking loop"
+msgid "Next edge was visited (right) but it is not the first one !!! breaking loop"
 msgstr ""
 
 #: ../lib/vector/Vlib/buffer2.c:600
-msgid ""
-"Next edge was visited (left) but it is not the first one !!! breaking loop"
+msgid "Next edge was visited (left) but it is not the first one !!! breaking loop"
 msgstr ""
 
 #: ../lib/vector/Vlib/buffer2.c:648
@@ -5183,8 +4978,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:432
 #, c-format
-msgid ""
-"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgid "Database record for turn with cat = %d in not found. (The turn was skipped."
 msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:465
@@ -5208,16 +5002,12 @@ msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:579
 #, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(cost was set to 0)"
+msgid "Database record for line %d (cat = %d, forward/both direction(s)) not found (cost was set to 0)"
 msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:596
 #, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not found(cost "
-"was set to 0)"
+msgid "Database record for line %d (cat = %d, backword direction) not found(cost was set to 0)"
 msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
@@ -5230,16 +5020,12 @@ msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:869
 #, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
+msgid "Database record for line %d (cat = %d, forward/both direction(s)) not found (forward/both direction(s) of line skipped)"
 msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:888
 #, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
+msgid "Database record for line %d (cat = %d, backword direction) not found(direction of line skipped)"
 msgstr ""
 
 #: ../lib/vector/Vlib/net_build.c:937
@@ -5305,9 +5091,7 @@ msgid "PostGIS topology schema <%s> dropped"
 msgstr ""
 
 #: ../lib/vector/Vlib/open_pg.c:559
-msgid ""
-"Connection to PostgreSQL database failed. Try to set up username/password by"
-" db.login."
+msgid "Connection to PostgreSQL database failed. Try to set up username/password by db.login."
 msgstr ""
 
 #: ../lib/vector/Vlib/open_pg.c:566
@@ -5569,8 +5353,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/build_pg.c:1018
 #, c-format
-msgid ""
-"Unable to build simple features from topogeometry data. Unsupported type %d."
+msgid "Unable to build simple features from topogeometry data. Unsupported type %d."
 msgstr ""
 
 #: ../lib/vector/Vlib/write_nat.c:398
@@ -5760,9 +5543,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:889
 #, c-format
-msgid ""
-"%d features without category skipped. To export also features without "
-"category use '%s=-1'."
+msgid "%d features without category skipped. To export also features without category use '%s=-1'."
 msgstr ""
 
 #: ../lib/vector/Vlib/cindex.c:32
@@ -5797,9 +5578,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/geos.c:55
 #, c-format
-msgid ""
-"Vect_read_line_geos(): feature id %d is not reasonable (max features in "
-"vector map <%s>: %d)"
+msgid "Vect_read_line_geos(): feature id %d is not reasonable (max features in vector map <%s>: %d)"
 msgstr ""
 
 #: ../lib/vector/Vlib/geos.c:60
@@ -6104,9 +5883,7 @@ msgid "%s dangles: %d"
 msgstr ""
 
 #: ../lib/vector/Vlib/dgraph.c:432
-msgid ""
-"Trying to add more edges to the planar_graph than the initial allocation "
-"size allows"
+msgid "Trying to add more edges to the planar_graph than the initial allocation size allows"
 msgstr ""
 
 #: ../lib/vector/Vlib/field.c:91
@@ -6134,9 +5911,7 @@ msgid "Database connection not defined. Skipping."
 msgstr ""
 
 #: ../lib/vector/Vlib/field.c:185
-msgid ""
-"More DB links defined for input vector map. Using only first DB link for "
-"output."
+msgid "More DB links defined for input vector map. Using only first DB link for output."
 msgstr ""
 
 #: ../lib/vector/Vlib/field.c:261
@@ -6185,15 +5960,12 @@ msgid "Unable to open OGR DBMI driver"
 msgstr ""
 
 #: ../lib/vector/Vlib/field.c:773
-msgid ""
-"All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
-"available in OGR DB table"
+msgid "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' available in OGR DB table"
 msgstr ""
 
 #: ../lib/vector/Vlib/field.c:840
 #, c-format
-msgid ""
-"Feature table <%s> has no primary key defined. Unable to define DB links."
+msgid "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
 #: ../lib/vector/Vlib/field.c:860
@@ -6240,8 +6012,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/legal_vname.c:65
 #, c-format
-msgid ""
-"Illegal vector map name <%s>. SQL keyword cannot be used as vector map name."
+msgid "Illegal vector map name <%s>. SQL keyword cannot be used as vector map name."
 msgstr ""
 
 #: ../lib/vector/Vlib/legal_vname.c:100 ../lib/vector/Vlib/legal_vname.c:104
@@ -6367,16 +6138,12 @@ msgstr ""
 
 #: ../lib/vector/Vlib/open_ogr.c:279
 #, c-format
-msgid ""
-"Feature index format version %d.%d is not supported by this release. Try to "
-"rebuild topology or upgrade GRASS."
+msgid "Feature index format version %d.%d is not supported by this release. Try to rebuild topology or upgrade GRASS."
 msgstr ""
 
 #: ../lib/vector/Vlib/open_ogr.c:284
 #, c-format
-msgid ""
-"Your GRASS version does not fully support feature index format %d.%d of the "
-"vector. Consider to rebuild topology or upgrade GRASS."
+msgid "Your GRASS version does not fully support feature index format %d.%d of the vector. Consider to rebuild topology or upgrade GRASS."
 msgstr ""
 
 #: ../lib/vector/Vlib/overlay.c:72
@@ -6988,9 +6755,7 @@ msgid "Error writing out topo file"
 msgstr ""
 
 #: ../lib/vector/Vlib/build.c:1210
-msgid ""
-"Unable to build spatial index from topology, vector map is not opened at "
-"topology level 2"
+msgid "Unable to build spatial index from topology, vector map is not opened at topology level 2"
 msgstr ""
 
 #: ../lib/vector/Vlib/build.c:1233
@@ -7102,9 +6867,7 @@ msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
 #: ../lib/vector/Vlib/build_ogr.c:89
-msgid ""
-"Random read is not supported by OGR for this layer. Unable to build "
-"topology."
+msgid "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
 #: ../lib/vector/Vlib/build_ogr.c:139
@@ -7127,8 +6890,7 @@ msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr ""
 
 #: ../lib/vector/Vlib/open.c:277
-msgid ""
-"Vector map which is not in the current mapset cannot be opened for update"
+msgid "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
 #: ../lib/vector/Vlib/open.c:311
@@ -7143,9 +6905,7 @@ msgstr ""
 
 #: ../lib/vector/Vlib/open.c:419
 #, c-format
-msgid ""
-"Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
-"with v.build."
+msgid "Unable to open vector map <%s> on level %d. Try to rebuild vector topology with v.build."
 msgstr ""
 
 #: ../lib/vector/Vlib/open.c:445
@@ -7341,9 +7101,7 @@ msgstr ""
 
 #: ../lib/ogsf/gp3.c:288
 #, c-format
-msgid ""
-"%d points without category. Unable to determine color rules for features "
-"without category."
+msgid "%d points without category. Unable to determine color rules for features without category."
 msgstr ""
 
 #: ../lib/ogsf/gs2.c:1211
@@ -7446,9 +7204,7 @@ msgstr ""
 
 #: ../lib/ogsf/gsd_prim.c:642
 #, c-format
-msgid ""
-"gsd_rot(): %c is an invalid axis specification. Rotation ignored. Please "
-"advise GRASS developers of this error"
+msgid "gsd_rot(): %c is an invalid axis specification. Rotation ignored. Please advise GRASS developers of this error"
 msgstr ""
 
 #: ../lib/ogsf/gsd_surf.c:1742
@@ -7480,9 +7236,7 @@ msgstr ""
 
 #: ../lib/ogsf/gv3.c:414
 #, c-format
-msgid ""
-"%d features without category. Unable to determine color rules for features "
-"without category."
+msgid "%d features without category. Unable to determine color rules for features without category."
 msgstr ""
 
 #: ../lib/ogsf/gvl2.c:267
@@ -8014,15 +7768,14 @@ msgstr ""
 msgid "parse error"
 msgstr ""
 
-#: ../lib/gis/cmprzlib.c:99 ../lib/gis/cmprzlib.c:195
-#: ../lib/gis/compress.c:303 ../lib/gis/cmprbzip.c:90
-#: ../lib/gis/cmprbzip.c:164 ../lib/gis/cmprlz4.c:81 ../lib/gis/cmprlz4.c:138
+#: ../lib/gis/cmprzlib.c:99 ../lib/gis/cmprzlib.c:195 ../lib/gis/compress.c:303
+#: ../lib/gis/cmprbzip.c:90 ../lib/gis/cmprbzip.c:164 ../lib/gis/cmprlz4.c:81
+#: ../lib/gis/cmprlz4.c:138
 msgid "No source buffer"
 msgstr ""
 
-#: ../lib/gis/cmprzlib.c:102 ../lib/gis/cmprzlib.c:198
-#: ../lib/gis/cmprbzip.c:93 ../lib/gis/cmprbzip.c:167 ../lib/gis/cmprlz4.c:84
-#: ../lib/gis/cmprlz4.c:141
+#: ../lib/gis/cmprzlib.c:102 ../lib/gis/cmprzlib.c:198 ../lib/gis/cmprbzip.c:93
+#: ../lib/gis/cmprbzip.c:167 ../lib/gis/cmprlz4.c:84 ../lib/gis/cmprlz4.c:141
 msgid "No destination buffer"
 msgstr ""
 
@@ -8088,9 +7841,7 @@ msgid "Database schema"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:194
-msgid ""
-"Do not use this option if schemas are not supported by driver/database "
-"server"
+msgid "Do not use this option if schemas are not supported by driver/database server"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:203
@@ -8226,9 +7977,7 @@ msgid "Data type used in the output raster3d map"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:434
-msgid ""
-"Number of digits used as mantissa in the internal map storage, 0 -23 for "
-"float, 0 - 52 for double, max or default"
+msgid "Number of digits used as mantissa in the internal map storage, 0 -23 for float, 0 - 52 for double, max or default"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:444
@@ -8236,9 +7985,7 @@ msgid "The compression method used in the output raster3d map"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:454
-msgid ""
-"The dimensions of the tiles used in the output raster3d map (XxYxZ or "
-"default: 16x16x8)"
+msgid "The dimensions of the tiles used in the output raster3d map (XxYxZ or default: 16x16x8)"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:464
@@ -8280,10 +8027,7 @@ msgid "Layer number or name"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:528
-msgid ""
-"Vector features can have category values in different layers. This number "
-"determines which layer to use. When used with direct OGR access this is the "
-"layer name."
+msgid "Vector features can have category values in different layers. This number determines which layer to use. When used with direct OGR access this is the layer name."
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:538
@@ -8291,10 +8035,7 @@ msgid "Layer number or name ('-1' for all layers)"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:540
-msgid ""
-"A single vector map can be connected to multiple database tables. This "
-"number determines which table to use. When used with direct OGR access this "
-"is the layer name."
+msgid "A single vector map can be connected to multiple database tables. This number determines which table to use. When used with direct OGR access this is the layer name."
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:549
@@ -8469,9 +8210,7 @@ msgid "The temporal type of the space time dataset"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:888
-msgid ""
-"WHERE conditions of SQL statement without 'where' keyword used in the "
-"temporal GIS framework"
+msgid "WHERE conditions of SQL statement without 'where' keyword used in the temporal GIS framework"
 msgstr ""
 
 #: ../lib/gis/parser_standard_options.c:889
@@ -8506,9 +8245,7 @@ msgstr ""
 
 #: ../lib/gis/gisinit.c:53 ../lib/gis/gisinit.c:87
 #, c-format
-msgid ""
-"Module built against version %s but trying to use version %s. You need to "
-"rebuild GRASS GIS or untangle multiple installations."
+msgid "Module built against version %s but trying to use version %s. You need to rebuild GRASS GIS or untangle multiple installations."
 msgstr ""
 
 #: ../lib/gis/gisinit.c:65


=====================================
locale/po/grassmods_bn.po
=====================================
The diff for this file was not included because it is too large.

=====================================
locale/po/grassmods_fr.po
=====================================
@@ -21741,7 +21741,7 @@ msgstr "Erreur à la lecture des données binaires"
 #: ../raster3d/r3.in.bin/main.c:154
 #, c-format
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
-msgstr "Chargement des données %s avec %i octets ... (%dx%dx%dx)"
+msgstr "Chargement des données %d avec %i octets ... (%dx%dx%dx)"
 
 #: ../raster3d/r3.in.bin/main.c:256
 msgid "Imports a binary raster file into a GRASS 3D raster map."
@@ -23739,7 +23739,7 @@ msgstr "La carte raster <%s@%s> est une carte de base. Supprimez d'abord la cart
 #: ../general/g.remove/check_reclass.c:54
 #, c-format
 msgid "Removing information about reclassed map from <%s@%s> failed"
-msgstr "La suppression d'information sur la carte reclassée depuis <%s@%s> a échoué"
+msgstr "La suppression d'information sur la carte reclassée depuis <%s> a échoué"
 
 #: ../general/g.remove/main.c:73
 msgid "Removes data base element files from the user's current mapset using the search pattern."


=====================================
locale/po/grasswxpy_bn.po
=====================================
The diff for this file was not included because it is too large.

=====================================
raster/r.li/r.li.daemon/daemon.c
=====================================
@@ -740,8 +740,12 @@ int write_raster(int mv_fd, int random_access, struct g_area *g)
 
     Rast_set_d_null_value(cell_buf, Rast_window_cols() + 1);
 
-    for (i = 0; i < Rast_window_rows() - g->sf_y - g->rows; i++)
+    for (i = 0; i < Rast_window_rows() - g->sf_y - ((int)g->rl / 2) - g->rows; i++) {
 	Rast_put_row(mv_fd, cell_buf, DCELL_TYPE);
+    }
+
+    G_free(file_buf);
+    G_free(cell_buf);
 
     return 1;
 }


=====================================
scripts/v.db.univar/v.db.univar.html
=====================================
@@ -62,11 +62,12 @@ v.db.univar samples column=heights
 <a href="r.univar.html">r.univar</a>,
 <a href="v.univar.html">v.univar</a>,
 <a href="db.select.html">db.select</a>,
-<a href="d.vect.thematic.html">d.vect.thematic</a>
+<a href="d.vect.thematic.html">d.vect.thematic</a>,
+<a href="v.random.html">v.random</a>
 </em>
 
 <h2>AUTHOR</h2>
  Michael Barton, Arizona State University
 <p>and authors of <em>r.univar.sh</em> (Markus Neteler et al.)
 
-<p><i>Last changed: $Date: 2017-06-22 16:00:16 +0200 (Thu, 22 Jun 2017) $</i>
+<p><i>Last changed: $Date: 2018-09-30 19:02:53 +0200 (Sun, 30 Sep 2018) $</i>


=====================================
scripts/v.import/v.import.html
=====================================
@@ -62,6 +62,46 @@ refer to the <em>v.clean</em> manual page.
 v.import input=research_area.shp output=research_area extent=input
 </pre></div>
 
+<h2>ERROR MESSAGES</h2>
+
+<h3>SQL syntax errors</h3>
+
+Depending on the currently selected SQL driver, error messages such as follows may arise:
+
+<div class="code"><pre>
+DBMI-SQLite driver error:
+Error in sqlite3_prepare():
+near "ORDER": syntax error
+</pre></div>
+
+Or:
+
+<div class="code"><pre>
+DBMI-DBF driver error:
+SQL parser error:
+syntax error, unexpected DESC, expecting NAME processing 'DESC
+</pre></div>
+
+This indicates that a column name in the input dataset corresponds to a reserved
+SQL word (here: 'ORDER' and 'DESC' respectively). A different column name has to be
+used in this case. The <b>columns</b> parameter can be used to assign different
+column names on the fly in order to avoid using reserved SQL words.
+
+For a list of SQL reserved words for SQLite (the default driver),
+see <a href="https://www.sqlite.org/lang_keywords.html">here</a>.
+
+<h3>Projection errors</h3>
+
+<div class="code"><pre>
+Projection of dataset does not appear to match the current location.
+</pre></div>
+
+Here you need to create or use a location whose projection matches that
+of the vector data you wish to import. Try using <b>location</b> parameter to
+create a new location based upon the projection information in the file. If
+desired, you can then re-project it to another location
+with <em><a href="v.proj.html">v.proj</a></em>.
+
 <h2>SEE ALSO</h2>
 
 <em>
@@ -76,4 +116,4 @@ Markus Metz<br>
 Improvements: Martin Landa, Anna Petrasova
 
 <p>
-<i>Last changed: $Date: 2017-10-22 20:09:17 +0200 (Sun, 22 Oct 2017) $</i>
+<i>Last changed: $Date: 2018-10-14 13:08:21 +0200 (Sun, 14 Oct 2018) $</i>


=====================================
vector/v.in.ogr/v.in.ogr.html
=====================================
@@ -375,34 +375,67 @@ v.in.ogr input=20141130_ST_UKSH.xml.gz layer=Okresy geometry=OriginalniHranice
 
 <h2>WARNINGS</h2>
 
-If a message like "WARNING: Area size 1.3e-06, area not
-imported." appears, the <b>min_area</b> may be adjusted to a
+If a message like
+
+<div class="code"><pre>
+WARNING: Area size 1.3e-06, area not imported
+</pre></div>
+
+appears, the <b>min_area</b> may be adjusted to a
 smaller value so that all areas are imported. Otherwise tiny areas are
 filtered out during import (useful to polish digitization errors or
 non-topological data).
 
 <p>
-If a message like "Try to import again, snapping with at least
-1e-008: 'snap=1e-008'" appears, then the map to be imported
+If a message like
+
+<div class="code"><pre>
+Try to import again, snapping with at least 1e-008: 'snap=1e-008'
+</pre></div>
+appears, then the map to be imported
 contains topological errors. The message suggests a value for the
 <em>snap</em> parameter to be tried. For more details, see above in
 <em><a href="v.in.ogr.html#topology-cleaning">Topology Cleaning</a></em>.
 
 <h2>ERROR MESSAGES</h2>
 
-<dl>
-<dt>DBMI-DBF driver error: SQL parser error: syntax error,
-unexpected DESC, expecting NAME processing 'DESC'</dt>
-<dd>indicates that a column name corresponds to a reserved SQL word (here: 'DESC').
-A different column name should be used. The <b>columns</b> parameter can be used
-to assign different column names on the fly.</dd>
-<dt>Projection of dataset does not appear to match the current location.</dt>
-<dd>You need to create a location whose projection matches the data
-you wish to import. Try using <b>location</b> parameter to create a
-new location based upon the projection information in the file. If
+<h3>SQL syntax errors</h3>
+
+Depending on the currently selected SQL driver, error messages such as follows may arise:
+
+<div class="code"><pre>
+DBMI-SQLite driver error:
+Error in sqlite3_prepare():
+near "ORDER": syntax error
+</pre></div>
+
+Or:
+
+<div class="code"><pre>
+DBMI-DBF driver error:
+SQL parser error:
+syntax error, unexpected DESC, expecting NAME processing 'DESC
+</pre></div>
+
+This indicates that a column name in the input dataset corresponds to a reserved
+SQL word (here: 'ORDER' and 'DESC' respectively). A different column name has to be
+used in this case. The <b>columns</b> parameter can be used to assign different
+column names on the fly in order to avoid using reserved SQL words.
+
+For a list of SQL reserved words for SQLite (the default driver),
+see <a href="https://www.sqlite.org/lang_keywords.html">here</a>.
+
+<h3>Projection errors</h3>
+
+<div class="code"><pre>
+Projection of dataset does not appear to match the current location.
+</pre></div>
+
+Here you need to create or use a location whose projection matches that
+of the vector data you wish to import. Try using <b>location</b> parameter to
+create a new location based upon the projection information in the file. If
 desired, you can then re-project it to another location
-with <em><a href="v.proj.html">v.proj</a></em>.</dd>
-</dl>
+with <em><a href="v.proj.html">v.proj</a></em>.
 
 <h2>REFERENCES</h2>
 
@@ -440,4 +473,4 @@ Various improvements by Markus Metz
 Multiple geometry columns support by Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2017-10-08 08:45:15 +0200 (Sun, 08 Oct 2017) $</i>
+<i>Last changed: $Date: 2018-10-14 13:08:21 +0200 (Sun, 14 Oct 2018) $</i>


=====================================
vector/v.qcount/v.qcount.html
=====================================
@@ -49,6 +49,9 @@ randomness. This is illustrated in Figure 2.
 <i>Figure 2: Randomly placed quadrats (n = 100) with 584 sample points.</i>
 </div>
 
+<p>The number of points is written as category to the <b>output</b> map (and not
+to an attribute table).
+
 <h2>NOTES</h2>
 
 This program may not work properly with lat-long data. It uses
@@ -59,7 +62,12 @@ This program may not work properly with lat-long data. It uses
 
 <h2>SEE ALSO</h2>
 
-<em><a href="v.random.html">v.random</a></em>
+<em>
+<a href="v.random.html">v.random</a>,
+<a href="v.distance.html">v.distance</a>,
+<a href="v.neighbors.html">v.neighbors</a>,
+<a href="v.perturb.html">v.perturb</a>
+</em>
 
 <h2>REFERENCES</h2>
 
@@ -120,4 +128,4 @@ Timestamp not working for header part of counts output. (2000-10-28)
 <br>
 Modified for GRASS 5.7 by R. Blazek (2004-10-14)
 
-<p><i>Last changed: $Date: 2016-12-22 15:40:49 +0100 (Thu, 22 Dec 2016) $</i>
+<p><i>Last changed: $Date: 2018-09-30 19:02:53 +0200 (Sun, 30 Sep 2018) $</i>


=====================================
vector/v.univar/v.univar.html
=====================================
@@ -101,7 +101,7 @@ median (even number of cells): 108.88
 <h3>Calculate statistic of distance between sampling points</h3>
 
 <div class="code"><pre>
-v.univar -d samples column=heights type=point
+v.univar -d samples type=point
 
 number of primitives: 100
 number of non zero distances: 4851
@@ -127,8 +127,9 @@ skewness: 0.238688
 <a href="db.univar.html">db.univar</a>,
 <a href="r.univar.html">r.univar</a>,
 <a href="v.db.univar.html">v.db.univar</a>,
-<a href="v.neighbors.html">v.neighbors</a>
-<a href="v.distance.html">v.distance</a>
+<a href="v.distance.html">v.distance</a>,
+<a href="v.neighbors.html">v.neighbors</a>,
+<a href="v.qcount.html">v.qcount</a>
 </em>
 
 
@@ -141,4 +142,4 @@ Hamish Bowman, University of Otago, New Zealand<br>
 Martin Landa 
 
 <p>
-<i>Last changed: $Date: 2018-09-19 16:33:13 +0200 (Wed, 19 Sep 2018) $</i>
+<i>Last changed: $Date: 2018-09-30 19:02:53 +0200 (Sun, 30 Sep 2018) $</i>



View it on GitLab: https://salsa.debian.org/debian-gis-team/grass/compare/42488bfea5d27b1701607401cd44e4816da5f11f...674fe5747225bdf4da6ceeefda2da40e2d892cbd

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/grass/compare/42488bfea5d27b1701607401cd44e4816da5f11f...674fe5747225bdf4da6ceeefda2da40e2d892cbd
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20181015/ca9e6065/attachment-0001.html>


More information about the Pkg-grass-devel mailing list