LibreOffice Module librelogo (master)  1
LibreLogo.py
Go to the documentation of this file.
1 # -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
2 #
3 # This file is part of the LibreOffice project.
4 #
5 # This Source Code Form is subject to the terms of the Mozilla Public
6 # License, v. 2.0. If a copy of the MPL was not distributed with this
7 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 #
9 from __future__ import unicode_literals
10 import sys, os, uno, unohelper
11 import re, random, traceback, itertools
12 import threading, time as __time__
13 
14 try:
15  unicode
16  next = lambda l: l.next() # python 2
17 except:
18  unicode, long = str, int # support python 3
19 
20 __lng__ = {}
21 
22 def __trace__():
23  if 'PYUNO_LOGLEVEL' in os.environ:
24  print(traceback.format_exc())
25 
26 # get localized commands and messages
27 def __l12n__(lng):
28  global __lng_fallback__
29  try:
30  return __lng__[lng]
31  except:
32  try:
33  # load resource file
34  __lng__[lng] = dict([[i.decode("unicode-escape").split("=")[0].strip(), i.decode("unicode-escape").split("=")[1].strip().strip("|")] for i in open(__lngpath__ + "LibreLogo_" + lng + ".properties", 'rb').readlines() if b"=" in i])
35  return __lng__[lng]
36  except:
37  try:
38  # or use embedded fallback resource dictionary
39  __lng__[lng] = {}
40  for i in __lng_fallback__:
41  try:
42  __lng__[lng][i] = __lng_fallback__[i][lng]
43  except:
44  try:
45  __lng__[lng][i] = __lng_fallback__[i][lng[:2]]
46  except:
47  __lng__[lng][i] = __lng_fallback__[i]["en_US"]
48  return __lng__[lng]
49  except Exception:
50  __trace__()
51  return None
52 
53 try:
54  urebootstrap = os.environ["URE_BOOTSTRAP"]
55 except:
56  # starting in command line updates embedded fallback language dictionary
57  print("Update fallback language resource using property file arguments")
58  for i in sys.argv[1:]:
59  r = re.match("^(.*)LibreLogo_(.*)[.]properties$", i)
60  __lngpath__= r.group(1)
61  __l12n__(r.group(2))
62  fallback = {}
63 
64  # fallback of fallback is en_US
65  for i in __lng__["en_US"]:
66  fallback[i] = { "en_US": __lng__["en_US"][i] }
67 
68  # create fallback dictionary
69  for i in __lng__:
70  dif = 0
71  for j in __lng__[i]:
72  if __lng__[i][j] != __lng__["en_US"][j]:
73  fallback[j][i] = __lng__[i][j]
74  dif = dif + 1
75  print(i, dif)
76 
77  # update fallback resource data in this program file
78  import fileinput
79 
80  for line in fileinput.input(sys.argv[0], inplace=True):
81  if re.match("^__lng_fallback__", line):
82  print("__lng_fallback__ = {")
83  # break it (CPython has problem with very long Unicode line)
84  for i in fallback:
85  print("'%s':%s," % (i, str(fallback[i])))
86  print("}")
87  sys.exit(1)
88  else:
89  print(line.rstrip("\n")),
90 
91 if "vnd.sun.star.pathname" in urebootstrap:
92  __lngpath__ = re.sub(r"^vnd.sun.star.pathname:(.*)program(/|\\)fundamental([.]ini|rc)$", "\\1", urebootstrap)
93 else:
94  # A way to know if we use MacOs
95  if "Resources" in urebootstrap:
96  __lngpath__ = unohelper.fileUrlToSystemPath(re.sub("fundamentalrc$", "", urebootstrap))
97  else:
98  __lngpath__ = unohelper.fileUrlToSystemPath(re.sub("program/(fundamental.ini|fundamentalrc)$", "share", urebootstrap))
99 __lngpath__ = __lngpath__ + "/Scripts/python/LibreLogo/".replace("/", os.sep)
100 __translang__ = "am|ca|cs|de|dk|el|en|eo|es|et|fr|hu|it|ja|nl|no|pl|pt|ru|se|sl" # FIXME supported languages for language guessing, expand this list, according to the localizations
101 __docs__ = {}
102 __prevcode__ = None
103 __prevlang__ = None
104 __prevcompiledcode__ = None
105 __thread__ = None
106 __lock__ = threading.Lock()
107 __halt__ = False
108 __compiled__ = ""
109 __group__ = 0
110 __groupstack__ = []
111 __grouplefthang__ = 0
112 __comp__ = {}
113 __strings__ = []
114 __colors__ = {}
115 __COLORS__ = ['BLACK', 0x000000], ['SILVER', 0xc0c0c0], ['GRAY', 0x808080], \
116  ['WHITE', 0xffffff], ['MAROON', 0x800000], ['RED', 0xff0000], \
117  ['PURPLE', 0x800080], ['FUCHSIA', 0xff00ff], ['GREEN', 0x008000], \
118  ['LIME', 0x00ff00], ['OLIVE', 0x808000], ['YELLOW', 0xffff00], \
119  ['NAVY', 0x000080], ['BLUE', 0x0000ff], ['TEAL', 0x008080], \
120  ['AQUA', 0x00ffff], ['PINK', 0xffc0cb], ['TOMATO', 0xff6347], \
121  ['ORANGE', 0xffa500], ['GOLD', 0xffd700], ['VIOLET', 0x9400d3], \
122  ['SKYBLUE', 0x87ceeb], ['CHOCOLATE', 0xd2691e], ['BROWN', 0xa52a2a], \
123  ['INVISIBLE', 0xffffffff]
124 __NORMCOLORS__ = [[[255, 255, 0], 0, -11, 1, -11],
125  [[255, 128, 0], 1, 116, 1, -33], [[255, 0, 0], 1, 95, 2, 42],
126  [[255, 0, 255], 2, -213, 0, -106], [[0, 0, 255], 0, 148, 1, 127],
127  [[0, 255, 255], 1, -128, 2, -63], [[0, 255, 0], 2, 192, 0, 244]]
128 __STRCONST__ = [i[0] for i in __COLORS__] + ['NONE', 'BEVEL', 'MITER', 'ROUNDED', 'SOLID', 'DASH', 'DOTTED', 'BOLD', 'ITALIC', 'UPRIGHT', 'NORMAL', "HOUR", "PT", "INCH", "MM", "CM"]
129 __SLEEP_SLICE_IN_MILLISECONDS__ = 500
130 __PT_TO_TWIP__ = 20
131 __MM_TO_PT__ = 1/(25.4/72)
132 __MM10_TO_TWIP__ = 1/(2540.0/72/20) # 0.01 mm to twentieth point
133 __FILLCOLOR__ = 0x8000cc00
134 __LINEWIDTH__ = 0.5 * __PT_TO_TWIP__
135 __ENCODED_STRING__ = "_s_%s___"
136 __ENCODED_COMMENT__ = "_c_%s___"
137 __DECODE_STRING_REGEX__ = "_s_([0-9]+)___"
138 __DECODE_COMMENT_REGEX__ = "_c_([0-9]+)___"
139 __LINEBREAK__ = "#_@L_i_N_e@_#"
140 __TURTLE__ = "turtle"
141 __ACTUAL__ = "actual"
142 __BASEFONTFAMILY__ = "Linux Biolinum G"
143 __LineStyle_DOTTED__ = 2
144 
145 class __Doc__:
146  def __init__(self, doc):
147  self.doc = doc
148  self.secure = False
149  try:
150  self.drawpage = doc.DrawPage # Writer
151  except:
152  self.drawpage = doc.DrawPages.getByIndex(0) # Draw, Impress
153  self.shapecache = {}
154  self.shapecount = itertools.count()
155  self.time = 0
156  self.zoomvalue = 0
157  self.initialize()
158 
159  def initialize(self):
160  self.pen = 1
161  self.pencolor = 0
162  self.pensize = __LINEWIDTH__
163  self.linestyle = __LineStyle_SOLID__
164  self.linejoint = __ROUNDED__
165  self.linecap = __Cap_NONE__
166  self.oldlc = 0
167  self.oldlw = 0
168  self.oldls = __LineStyle_SOLID__
169  self.oldlj = __ROUNDED__
170  self.oldlcap = __Cap_NONE__
171  self.continuous = True
172  self.areacolor = __FILLCOLOR__
173  self.t10y = int((__FILLCOLOR__ >> 24) / (255.0/100))
174  self.hatch = None
175  self.textcolor = 0
176  self.fontfamily = __BASEFONTFAMILY__
177  self.fontheight = 12
178  self.fontweight = 100
179  self.fontstyle = 0
180  self.points = []
181 
182 from math import pi, sin, cos, asin, sqrt, log10
183 
184 from com.sun.star.awt import Point as __Point__
185 from com.sun.star.awt import Gradient as __Gradient__
186 from com.sun.star.awt.GradientStyle import LINEAR as __GradientStyle_LINEAR__
187 from com.sun.star.drawing import LineDash as __LineDash__
188 from com.sun.star.drawing import Hatch as __Hatch__
189 from com.sun.star.drawing import PolyPolygonBezierCoords as __Bezier__
190 from com.sun.star.text.TextContentAnchorType import AT_PAGE as __AT_PAGE__
191 from com.sun.star.text.WrapTextMode import THROUGH as __THROUGH__
192 from com.sun.star.drawing.LineCap import BUTT as __Cap_NONE__
193 from com.sun.star.drawing.LineCap import ROUND as __Cap_ROUND__
194 from com.sun.star.drawing.LineCap import SQUARE as __Cap_SQUARE__
195 from com.sun.star.drawing.LineJoint import NONE as __Joint_NONE__
196 from com.sun.star.drawing.LineJoint import BEVEL as __BEVEL__
197 from com.sun.star.drawing.LineJoint import MITER as __MITER__
198 from com.sun.star.drawing.LineJoint import ROUND as __ROUNDED__
199 from com.sun.star.drawing.FillStyle import NONE as __FillStyle_NONE__
200 from com.sun.star.drawing.FillStyle import GRADIENT as __FillStyle_GRADIENT__
201 from com.sun.star.drawing.LineStyle import NONE as __LineStyle_NONE__
202 from com.sun.star.drawing.LineStyle import SOLID as __LineStyle_SOLID__
203 from com.sun.star.drawing.LineStyle import DASH as __LineStyle_DASHED__
204 from com.sun.star.drawing.DashStyle import RECT as __DashStyle_RECT__
205 from com.sun.star.drawing.DashStyle import ROUND as __DashStyle_ROUND__
206 from com.sun.star.drawing.DashStyle import ROUNDRELATIVE as __DashStyle_ROUNDRELATIVE__
207 from com.sun.star.drawing.CircleKind import FULL as __FULL__
208 from com.sun.star.drawing.CircleKind import SECTION as __SECTION__
209 from com.sun.star.drawing.CircleKind import CUT as __CUT__
210 from com.sun.star.drawing.CircleKind import ARC as __ARC__
211 from com.sun.star.awt.FontSlant import NONE as __Slant_NONE__
212 from com.sun.star.awt.FontSlant import ITALIC as __Slant_ITALIC__
213 from com.sun.star.awt import Size as __Size__
214 from com.sun.star.awt import WindowDescriptor as __WinDesc__
215 from com.sun.star.awt.WindowClass import MODALTOP as __MODALTOP__
216 from com.sun.star.awt.VclWindowPeerAttribute import OK as __OK__
217 from com.sun.star.awt.VclWindowPeerAttribute import OK_CANCEL as __OK_CANCEL__
218 from com.sun.star.awt.VclWindowPeerAttribute import YES_NO_CANCEL as __YES_NO_CANCEL__ # OK_CANCEL, YES_NO, RETRY_CANCEL, DEF_OK, DEF_CANCEL, DEF_RETRY, DEF_YES, DEF_NO
219 from com.sun.star.awt.PushButtonType import OK as __Button_OK__
220 from com.sun.star.awt.PushButtonType import CANCEL as __Button_CANCEL__
221 from com.sun.star.util.MeasureUnit import APPFONT as __APPFONT__
222 from com.sun.star.beans import PropertyValue as __property__
223 from com.sun.star.lang import Locale
224 
225 def __getprop__(name, value):
226  p, p.Name, p.Value = __property__(), name, value
227  return p
228 
229 __uilocale__ = uno.getComponentContext().getValueByName("/singletons/com.sun.star.configuration.theDefaultProvider").\
230  createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess",\
231  (__getprop__("nodepath", "/org.openoffice.Setup/L10N"),)).getByName("ooLocale") + '-' # handle missing Country of locale 'eo'
232 
233 # dot for dotted line (implemented as an array of dot-headed arrows, because PostScript dot isn't supported by Writer)
234 def __gendots__(n):
235  return [__Point__(round(sin(360.0/n * i * pi/180.0) * 600), round(cos(360.0/n * i * pi/180) * 600)) for i in range(n)]
236 __bezierdot__ = __Bezier__()
237 __bezierdot__.Coordinates = (tuple(__gendots__(32)),)
238 __bezierdot__.Flags = ((0,) * 32,)
239 
240 # turtle shape
241 __TURTLESHAPE__ = [tuple([(__Point__(-120, 130), __Point__(-245, 347), __Point__(-291, 176), ), (__Point__(0, -500), __Point__(126, -375), __Point__(0, -250), __Point__(-124, -375), ), (__Point__(295, 170), __Point__(124, 124), __Point__(250, 340), ), (__Point__(466, -204), __Point__(224, -269), __Point__(71, -180), __Point__(313, -116), ), (__Point__(-75, -175), __Point__(-292, -300), __Point__(-417, -83), ), (__Point__(250, 0), __Point__(0, -250), __Point__(-250, 0), __Point__(0, 250), )] +
242  [(i,) for i in __gendots__(32)] + # single points for wider selection
243  [(__Point__(0, 0),)]), # last point for position handling
244  ((__Point__(0, 0),),)] # hidden turtle (single point to draw at the left border of the page area)
245 
247  global __docs__, _
248  doc = XSCRIPTCONTEXT.getDocument()
249  try:
250  _ = __docs__[doc.RuntimeUID]
251  except:
252  _ = __Doc__(doc)
253  __docs__[doc.RuntimeUID] = _
254 
255 # input function, result: input string or 0
256 def Input(s):
257  global __halt__
258  try:
260  smgr = ctx.ServiceManager
261  text = ""
262 
263  # dialog
264  d = smgr.createInstanceWithContext("com.sun.star.awt.UnoControlDialogModel", ctx)
265  ps = _.doc.CurrentController.Frame.ContainerWindow.getPosSize()
266  lo = _.doc.CurrentController.Frame.ContainerWindow.convertSizeToLogic(__Size__(ps.Width, ps.Height), __APPFONT__)
267  d.PositionX, d.PositionY, d.Width, d.Height = lo.Width/2 - 75, lo.Height/2 - 25, 150, 50
268 
269  # label
270  l = d.createInstance("com.sun.star.awt.UnoControlFixedTextModel" )
271 
272  if type(s) == list:
273  text = s[1]
274  s = s[0]
275  l.PositionX, l.PositionY, l.Width, l.Height, l.Name, l.TabIndex, l.Label = 5, 4, 140, 14, "l1", 2, s
276 
277  # textbox or combobox
278  e = d.createInstance("com.sun.star.awt.UnoControlEditModel")
279  e.PositionX, e.PositionY, e.Width, e.Height, e.Name, e.TabIndex = 5, 14, 140, 12, "e1", 0
280 
281  # buttons
282  b = d.createInstance( "com.sun.star.awt.UnoControlButtonModel" )
283  b.PositionX, b.PositionY, b.Width, b.Height, b.Name, b.TabIndex, b.PushButtonType, b.DefaultButton = 55, 32, 45, 14, "b1", 1, __Button_OK__, True
284  b2 = d.createInstance( "com.sun.star.awt.UnoControlButtonModel" )
285  b2.PositionX, b2.PositionY, b2.Width, b2.Height, b2.Name, b2.TabIndex, b2.PushButtonType = 100, 32, 45, 14, "b2", 1, __Button_CANCEL__
286 
287  # insert the control models into the dialog model
288  d.insertByName( "l1", l)
289  d.insertByName( "b1", b)
290  d.insertByName( "b2", b2)
291  d.insertByName( "e1", e)
292 
293  # create the dialog control and set the model
294  controlContainer = smgr.createInstanceWithContext("com.sun.star.awt.UnoControlDialog", ctx)
295  controlContainer.setModel(d)
296 
297  # create a peer
298  toolkit = smgr.createInstanceWithContext("com.sun.star.awt.ExtToolkit", ctx)
299  controlContainer.setVisible(False)
300  controlContainer.createPeer(toolkit, None)
301 
302  # execute it
303  inputtext = controlContainer.execute()
304  if inputtext:
305  inputtext = e.Text
306  else:
307  # Cancel button
308  __halt__ = True
309 
310  # dispose the dialog
311  controlContainer.dispose()
312  # stop program at pressing Cancel
313  __checkhalt__()
314  return inputtext
315  except Exception:
316  __trace__()
317 
318 def __string__(s, decimal = None): # convert decimal sign, localized BOOL and SET
319  if not decimal:
320  decimal = _.decimal
321  if decimal == ',' and type(s) == float:
322  return str(s).replace(".", ",")
323  if type(s) in [list, tuple, dict, set]:
324  __strings__ = []
325  s = re.sub("(?u)(['\"])(([^'\"]|\\['\"])*)(?<!\\\\)\\1", __encodestring__, str(s)) # XXX fix double '\'\"'
326  if decimal == ',':
327  s = s.replace(".", ",")
328  return re.sub(__DECODE_STRING_REGEX__, __decodestring__, \
329  s.replace('set', __locname__('SET')).replace('True', __locname__('TRUE')).replace('False', __locname__('FALSE')))
330  if type(s) in [str, unicode]:
331  return s
332  elif type(s) == bool:
333  return __locname__(str(s).upper())
334  return str(s)
335 
336 def Print(s):
337  global __halt__
338  s = __string__(s, _.decimal)
339  if not MessageBox(_.doc.CurrentController.Frame.ContainerWindow, s[:500] + s[500:5000].replace('\n', ' '), "", "messbox", __OK_CANCEL__):
340  # stop program at pressing Cancel
341  __halt__ = True
342  __checkhalt__()
343 
344 def MessageBox(parent, message, title, msgtype = "messbox", buttons = __OK__):
345  msgtypes = ("messbox", "infobox", "errorbox", "warningbox", "querybox")
346  if not (msgtype in msgtypes):
347  msgtype = "messbox"
348  d = __WinDesc__()
349  d.Type = __MODALTOP__
350  d.WindowServiceName = msgtype
351  d.ParentIndex = -1
352  d.Parent = parent
353  d.WindowAttributes = buttons
354  tk = parent.getToolkit()
355  msgbox = tk.createWindow(d)
356  msgbox.MessageText = message
357  if title:
358  msgbox.CaptionText = title
359  return msgbox.execute()
360 
361 def Random(r):
362  try:
363  return r * random.random()
364  except:
365  return list(r)[int(random.random() * len(r))]
366 
367 def to_ascii(s):
368  return s.encode("unicode-escape").decode("utf-8").replace("\\u", "__u__").replace(r"\x", "__x__")
369 
370 def to_unicode(s):
371  return bytes(s.replace("__x__", r"\x").replace("__u__", "\\u"), "ascii").decode("unicode-escape")
372 
373 def __locname__(name, l = -1):
374  if l == -1:
375  l = _.lng
376  for i in __l12n__(l):
377  if i == name.upper():
378  return __l12n__(l)[i].split("|")[0] # return with the first localized name
379  return to_unicode(name)
380 
381 def __getcursor__(fulltext):
382  realselection = False
383  try:
384  text = _.doc.getCurrentController().getViewCursor().getText().createTextCursor() # copy selection (also in frames)
385  text.gotoRange(_.doc.getCurrentController().getViewCursor(), False)
386  if fulltext:
387  1/len(text.getString()) # exception, if zero length
388  realselection = True
389  except:
390  text = _.doc.getText().createTextCursorByRange(_.doc.getText().getStart())
391  text.gotoEnd(True)
392  return text, realselection
393 
394 def __translate__(arg = None):
395  global _
397  selection = __getcursor__(True)[0]
399  __setlang__()
400  # detect language
401  text = selection.getString()
402  # remove comments and strings
403  text = re.sub(r"[ ]*;[^\n]*", "", re.sub(r"['„“‘«»「][^\n'”“‘’«»」]*['”“‘’«»」]", "", re.sub(r"^[ \t]*[;#][^\n]*", "", text)))
404  text = " ".join(set(re.findall("(?u)\w+", text)) - set(re.findall("(?u)\w*\d+\w*", text))).lower() # only words
406  guess = ctx.ServiceManager.createInstanceWithContext("com.sun.star.linguistic2.LanguageGuessing", ctx)
407  guess.disableLanguages(guess.getEnabledLanguages())
408  guess.enableLanguages(tuple([Locale(i, "", "") for i in __translang__.split("|")]))
409  guess = guess.guessPrimaryLanguage(text, 0, len(text))
410  try:
411  l = {'cs': 'cs_CZ', 'el': 'el_GR', 'en': 'en_US', 'pt': 'pt_BR'}[guess.Language]
412  except:
413  l = guess.Language + '_' + guess.Language.upper()
414  lang = __l12n__(l)
415  if not lang:
416  lang = __l12n__(guess.Language)
417  if not lang:
418  lang = __l12n__(_.lng)
419  if not lang:
420  lang = __l12n__("en_US")
421  lq = '\'' + lang['LEFTSTRING'].replace("|", "")
422  rq = '\'' + lang['RIGHTSTRING'].replace("|", "")
423  __strings__ = []
424 
425  text = re.sub(r"^(([ \t]*[;#][^\n]*))", __encodecomment__, text)
426  text = re.sub("(?u)([%s])((?:[^\n%s]|\\\\[%s])*)(?<!\\\\)[%s]" % (lq, rq, rq, rq), __encodestring__, selection.getString())
427  text = re.sub('(?u)(?<![0-9])(")(~?\w*)', __encodestring__, text)
428  text = re.sub(r";(([^\n]*))", __encodecomment__, text)
429 
430  # translate the program to the language of the document FIXME space/tab
431  exception = ['DECIMAL']
432  in1 = lang['IN'].upper()
433  in2 = __l12n__(_.lng)['IN'].split("|")[0].upper()
434  if in1[0] == '-' and in2[0] != '-': # "for x y-in" -> "for x in y"
435  exception += ['IN']
436  text = re.sub(r"(?ui)\b((?:%s) +:?\w+) +([^\n]+)(?:%s) +(?=[[] |[[]\n)" % (lang['FOR'], in1), "\\1 %s \\2 " % in2, text)
437  text = re.sub(r"(?ui)(:?\b\w+|[[][^[\n]*])\b(?:%s)\b" % in1, "%s \\1" % in2, text)
438  elif in1[0] != '-' and in2[0] == '-': # "for x in y" -> "for x y-in"
439  exception += ['IN']
440  text = re.sub(r"(?ui)(?<=\n)((?:%s)\b +:?\w+) +(?:%s) +([^\n]+?) +(?=[[] |[[]\n)" % (lang['FOR'], in1), "\\1 \\2%s " % in2, text)
441  text = re.sub(r"(?ui)(?<!:)\b(?:%s) +(:?\b\w+|[[][^[\n]*])\b" % in1, "\\1%s" % in2, text)
442  for i in set(lang) - set(exception):
443  text = re.sub(r'(?ui)(?<!:)\b(%s)\b' % lang[i], __l12n__(_.lng)[i].split("|")[0].upper(), text)
444  text = re.sub(r"(?<=\d)[%s](?=\d)" % lang['DECIMAL'], __l12n__(_.lng)['DECIMAL'], text)
445 
446  # decode strings and comments
447  quoted = u"(?ui)(?<=%s)(%%s)(?=%s)" % (__l12n__(_.lng)['LEFTSTRING'][0], __l12n__(_.lng)['RIGHTSTRING'][0])
448  text = re.sub(__DECODE_STRING_REGEX__, __decodestring2__, text)
449  for i in __STRCONST__:
450  text = re.sub(quoted % lang[i], __l12n__(_.lng)[i].split("|")[0].upper(), text)
451  text = re.sub(__DECODE_COMMENT_REGEX__, __decodecomment__, text)
452  if _.doc.getText().compareRegionStarts(selection.getStart(), _.doc.getText().getStart()) == 0:
453  pagebreak = True
454  selection.setString("\n" + text.lstrip("\n"))
455  else:
456  pagebreak = False
457  selection.setString(text)
458  # convert to paragraphs
459  __dispatcher__(".uno:ExecuteSearch", (__getprop__("SearchItem.SearchString", r"\n"), __getprop__("SearchItem.ReplaceString", r"\n"), \
460  __getprop__("Quiet", True), __getprop__("SearchItem.Command", 3), __getprop__("SearchItem.StyleFamily", 2), \
461  __getprop__("SearchItem.AlgorithmType", 1), __getprop__("SearchItem.AlgorithmType2", 2), __getprop__("SearchItem.SearchFlags", 0)))
462  # set 2-page layout
463  if pagebreak:
464  selection.getStart().BreakType = 4
465  __dispatcher__(".uno:ZoomPage")
466 
467 class LogoProgram(threading.Thread):
468  def __init__(self, code):
469  self.code = code
470  threading.Thread.__init__(self)
471 
472  def secure(self):
473  # 0 = secure
474  if _.secure:
475  return 0
476 
477  # 1 = forms, fields or embedded objects are forbidden
478  if _.doc.DrawPage.Forms.getCount() > 0 or _.doc.getTextFields().createEnumeration().hasMoreElements() or _.doc.getEmbeddedObjects().getCount() > 0:
479  return 1
480 
481  # 2 = hyperlinks with script events
482  nodes = _.doc.Text.createEnumeration()
483  while nodes.hasMoreElements():
484  node = nodes.nextElement()
485  if node.supportsService("com.sun.star.text.Paragraph"):
486  portions = node.createEnumeration()
487  while portions.hasMoreElements():
488  portion = portions.nextElement()
489  if portion.PropertySetInfo.hasPropertyByName("HyperLinkEvents"):
490  events = portion.getPropertyValue("HyperLinkEvents")
491  for event in events.getElementNames():
492  attributes = events.getByName(event)
493  for attribute in attributes:
494  if attribute.Name == "EventType" and attribute.Value == "Script":
495  return 2
496 
497  # 2 = images with script events
498  images = _.doc.DrawPage.createEnumeration()
499  while images.hasMoreElements():
500  image = images.nextElement()
501  try:
502  events = image.Events
503  for event in events.getElementNames():
504  attributes = events.getByName(event)
505  for attribute in attributes:
506  if attribute.Name == "EventType" and attribute.Value == "Script":
507  return 2
508  except:
509  pass
510 
511  _.secure = True
512  return 0
513 
514  def run(self):
515  global __thread__
516  try:
517  # check document security
518  secid = self.secure()
519  if secid > 0:
520  parent = _.doc.CurrentController.Frame.ContainerWindow
521  MessageBox(parent, "Document objects with%s script events" % [" possible", ""][secid-1], "LibreLogo program can't start", "errorbox")
522  else:
523  exec(self.code)
524  if _.origcursor[0] and _.origcursor[1]:
525  __dispatcher__(".uno:Escape")
526  try:
527  _.doc.CurrentController.getViewCursor().gotoRange(_.origcursor[0], False)
528  except:
529  _.doc.CurrentController.getViewCursor().gotoRange(_.origcursor[0].getStart(), False)
530  except Exception as e:
531  try:
532  TRACEPATTERN = '"<string>", line '
533  message = traceback.format_exc()
534  l = re.findall(TRACEPATTERN + '[0-9]+', message)
535  if len(l) > 0 and not "SystemExit" in message:
536  line = len(re.findall(__LINEBREAK__, ''.join(self.code.split("\n")[:int(l[-1][len(TRACEPATTERN):])]))) + 1
537  caption = __l12n__(_.lng)['LIBRELOGO']
538  if __prevcode__ and "\n" in __prevcode__:
539  __gotoline__(line)
540  caption = __l12n__(_.lng)['ERROR'] % line
541  parent = _.doc.CurrentController.Frame.ContainerWindow
542  if "maximum recursion" in message:
543  MessageBox(parent, __l12n__(_.lng)['ERR_STOP'] + " " + __l12n__(_.lng)['ERR_MAXRECURSION'] % sys.getrecursionlimit(), __l12n__(_.lng)['LIBRELOGO'])
544  elif "cannot initialize memory" in message or "Couldn't instantiate" in message:
545  MessageBox(parent, __l12n__(_.lng)['ERR_STOP'] + " " + __l12n__(_.lng)['ERR_MEMORY'], __l12n__(_.lng)['LIBRELOGO'])
546  elif "ZeroDivisionError" in message:
547  MessageBox(parent, __l12n__(_.lng)['ERR_ZERODIVISION'], caption, "errorbox")
548  elif "IndexError" in message:
549  MessageBox(parent, __l12n__(_.lng)['ERR_INDEX'], caption, "errorbox")
550  elif "KeyError" in message:
551  MessageBox(parent, __l12n__(_.lng)['ERR_KEY'] % eval(re.search("KeyError: ([^\n]*)", message).group(1)), caption, "errorbox")
552  elif "NameError" in message:
553  if "__repeat__" in message:
554  MessageBox(parent, __l12n__(_.lng)['ERR_ARGUMENTS'] % (__locname__('REPEAT'), 1, 0), caption, "errorbox")
555  else:
556  MessageBox(parent, __l12n__(_.lng)['ERR_NAME'] % \
557  to_unicode(re.search("(?<=name ')[\w_]*(?=')", message).group(0)), caption, "errorbox")
558  elif "TypeError" in message and "argument" in message and "given" in message:
559  r = re.search("([\w_]*)[(][)][^\n]* (\w+) arguments? [(](\d+)", message) # XXX later: handle 'no arguments' + plural
560  MessageBox(parent, __l12n__(_.lng)['ERR_ARGUMENTS'] % (__locname__(r.group(1)), r.group(2), r.group(3)), caption, "errorbox")
561  else:
562  origline = __compiled__.split("\n")[line-1]
563  if not "com.sun.star" in message and not "__repeat__" in message and not "*)" in message and ("[" in origline or "]" in origline):
564  MessageBox(parent, __l12n__(_.lng)['ERR_BLOCK'], caption, "errorbox")
565  else:
566  MessageBox(parent, __l12n__(_.lng)['ERROR'] %line, __l12n__(_.lng)['LIBRELOGO'], "errorbox")
567  __trace__()
568  except:
569  pass
570  with __lock__:
571  __thread__ = None
572 
573 # to check LibreLogo program termination (in that case, return value is False)
575  return __thread__ != None
576 
578  __strings__.append(re.sub("(\\[^\\]|\\\\(?=[‘’“”»」』]))", "", m.group(2)))
579  # replace the string with the numbered identifier _s_0___, _s_1___, ...
580  return __ENCODED_STRING__ % (len(__strings__) - 1)
581 
583  __strings__.append(re.sub("\\[^\\]", "", m.group(2)))
584  return __ENCODED_COMMENT__ % (len(__strings__) - 1)
585 
587  return "u'%s'" % __strings__[int(m.group(1))]
588 
590  return __l12n__(_.lng)['LEFTSTRING'][0] + __strings__[int(m.group(1))] + __l12n__(_.lng)['RIGHTSTRING'][0]
591 
593  return ";" + __strings__[int(m.group(1))]
594 
596  global __halt__, __thread__
598  _.zoomvalue = _.doc.CurrentController.getViewSettings().ZoomValue
599  shape = __getshape__(__TURTLE__)
600  if not shape:
601  shape = _.doc.createInstance( "com.sun.star.drawing.PolyPolygonShape" )
602  shape.AnchorType = __AT_PAGE__
603  shape.TextWrap = __THROUGH__
604  shape.Opaque = True
605  _.drawpage.add(shape)
606  shape.PolyPolygon = __TURTLESHAPE__[0]
607  _.shapecache[__TURTLE__] = shape
608  shape.Name = __TURTLE__
609  _.initialize()
610  turtlehome()
611  _.doc.CurrentController.select(shape)
612  shape.FillColor, transparence = __splitcolor__(_.areacolor, shape)
613  shape.LineColor, shape.LineTransparence = __splitcolor__(_.pencolor)
614  elif shape.Visible:
615  if shape.FillStyle == __FillStyle_NONE__:
616  _.areacolor = 0xffffffff
617  else:
618  _.areacolor = shape.FillColor + (int(255.0 * shape.FillTransparence/100) << 24)
619  if shape.LineWidth != round((1 + _.pen * 2) * __PT_TO_TWIP__ / __MM10_TO_TWIP__) and shape.LineWidth != round(__LINEWIDTH__ / __MM10_TO_TWIP__):
620  _.pensize = shape.LineWidth * __MM10_TO_TWIP__
621  if shape.LineStyle == __LineStyle_NONE__: # - none -
622  __pen__(0)
623  else:
624  if shape.LineStyle == __LineStyle_SOLID__:
625  __pen__(1)
626  _.pencolor = shape.LineColor + (int(255.0 * shape.LineTransparence/100) << 24)
627  shape.LineJoint = __ROUNDED__
628  shape.Shadow = True
629  shape.FillColor, transparence = __splitcolor__(_.areacolor, shape)
630  shape.FillTransparence = min(95, transparence)
631  shape.ShadowColor, shape.ShadowTransparence, shape.ShadowXDistance, shape.ShadowYDistance = (0, 20, 0, 0)
632  shape.LineWidth = min(_.pensize, (1 + _.pen * 2) * __PT_TO_TWIP__) / __MM10_TO_TWIP__
633  shape.SizeProtect = True
634 
635 def pagesize(n = -1):
636  if n == -1:
637  ps = _.doc.CurrentController.getViewCursor().PageStyleName
638  page = _.doc.StyleFamilies.getByName("PageStyles").getByName(ps)
639  return [page.Width * __MM10_TO_TWIP__ / __PT_TO_TWIP__, page.Height * __MM10_TO_TWIP__ / __PT_TO_TWIP__]
640  return None
641 
643  turtle = __getshape__(__TURTLE__)
644  if turtle:
645  ps = _.doc.CurrentController.getViewCursor().PageStyleName
646  page = _.doc.StyleFamilies.getByName("PageStyles").getByName(ps)
647  turtle.setPosition(__Point__((page.Width - turtle.BoundRect.Width)/2, (page.Height - turtle.BoundRect.Height)/2))
648  turtle.LineStyle = __LineStyle_SOLID__
649  turtle.LineJoint = __MITER__
650  turtle.LineWidth = min(_.pensize, (1 + _.pen * 2) * __PT_TO_TWIP__) / __MM10_TO_TWIP__
651  turtle.LineColor, none = __splitcolor__(_.pencolor)
652  turtle.LineTransparence = 25
653  turtle.RotateAngle = 0
654  turtle.ZOrder = 1000
655 
656 def __pen__(n):
657  _.pen = n
658  turtle = __getshape__(__TURTLE__)
659  if turtle:
660  if n:
661  turtle.LineStyle = __LineStyle_SOLID__
662  turtle.LineWidth = min(_.pensize, 3 * __PT_TO_TWIP__) / __MM10_TO_TWIP__
663  else:
664  turtle.LineStyle = __LineStyle_DASHED__
665  turtle.LineDash = __LineDash__(__DashStyle_RECT__, 0, 0, 1, __PT_TO_TWIP__, __PT_TO_TWIP__)
666  turtle.LineWidth = min(_.pensize, __PT_TO_TWIP__) / __MM10_TO_TWIP__
667 
668 
669 def __visible__(shape, visible = -1): # for OOo 3.2 compatibility
670  try:
671  if visible == -1:
672  return shape.Visible
673  shape.Visible = visible
674  except:
675  return True
676 
678  turtle = __getshape__(__TURTLE__)
679  if turtle and turtle.Visible:
680  z = turtle.getPosition()
681  z = __Point__(z.X + turtle.BoundRect.Width / 2.0, z.Y + turtle.BoundRect.Height / 2.0)
682  turtle.PolyPolygon = __TURTLESHAPE__[1]
683  __visible__(turtle, False)
684  turtle.LineTransparence, turtle.FillTransparence = 100, 100 # for saved files
685  turtle.setPosition(z)
686  __dispatcher__(".uno:Escape")
687 
689  turtle = __getshape__(__TURTLE__)
690  if turtle and not turtle.Visible:
691  if not turtle.Parent:
692  _.drawpage.add(turtle)
693  z = turtle.getPosition()
694  r, turtle.RotateAngle = turtle.RotateAngle, 0
695  turtle.PolyPolygon, turtle.RotateAngle = __TURTLESHAPE__[0], r
696  z = __Point__(z.X - turtle.BoundRect.Width / 2.0, z.Y - turtle.BoundRect.Height / 2.0)
697  turtle.setPosition(z)
698  __visible__(turtle, True)
699  pencolor(_.pencolor)
700  fillcolor(_.areacolor)
701  pensize(_.pensize/__PT_TO_TWIP__)
702  _.doc.CurrentController.select(__getshape__(__TURTLE__))
703  elif not turtle:
705 
706 def left(arg=None):
707  if __thread__:
708  return None
710  turtle = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.drawing.ShapeCollection')
711  turtle.add(__getshape__(__TURTLE__))
712  _.doc.CurrentController.select(turtle)
713  rotate(__TURTLE__, 1500)
714  return None
715 
716 def right(arg=None):
717  if __thread__:
718  return None
720  turtle = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.drawing.ShapeCollection')
721  turtle.add(__getshape__(__TURTLE__))
722  _.doc.CurrentController.select(turtle)
723  rotate(__TURTLE__, -1500)
724  return None
725 
726 def goforward(arg=None):
727  if __thread__:
728  return None
730  turtle = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.drawing.ShapeCollection')
731  turtle.add(__getshape__(__TURTLE__))
732  _.doc.CurrentController.select(turtle)
733  forward(10)
734  return None
735 
736 def gobackward(arg=None):
737  if __thread__:
738  return None
740  turtle = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.drawing.ShapeCollection')
741  turtle.add(__getshape__(__TURTLE__))
742  _.doc.CurrentController.select(turtle)
743  backward(10)
744  return None
745 
746 def commandline(arg=None, arg2=None):
747  run(arg, arg2)
748 
750  global _
751  c = _.doc.CurrentController.getViewCursor()
752  locs = [i for i in [c.CharLocale, c.CharLocaleAsian, c.CharLocaleComplex] if i.Language != 'zxx'] # not None language
753  # FIXME-BCP47: this needs adaption to language tags, a simple split on
754  # '-' and assuming second field would be country would already fail if
755  # a script tag was present.
756  loc = Locale(__uilocale__.split('-')[0], __uilocale__.split('-')[1], '')
757  if locs and loc not in locs:
758  loc = locs[0]
759  _.lng = loc.Language + '_' + loc.Country
760  if not __l12n__(_.lng):
761  _.lng = loc.Language
762  if not __l12n__(_.lng):
763  _.lng = "en_US"
764 
765 def run(arg=None, arg2 = -1):
766  global _, __thread__, __halt__, _, __prevcode__, __prevlang__, __prevcompiledcode__
767  if __thread__:
768  return None
769  with __lock__:
770  __thread__ = 1
771  try:
773  _.origcursor = [None, None]
774  if arg2 == -1:
775  _.origcursor, _.cursor = __getcursor__(False), __getcursor__(True)[0]
776  __dispatcher__(".uno:Escape")
777  c = _.doc.Text.createTextCursor() # go to the first page
778  c.gotoStart(False)
779  _.doc.CurrentController.getViewCursor().gotoRange(c, False)
781  __setlang__()
782  arg2 = _.cursor.getString()
783  if len(arg2) > 20000:
784  if MessageBox(_.doc.CurrentController.Frame.ContainerWindow, __l12n__(_.lng)['ERR_NOTAPROGRAM'], __l12n__(_.lng)['LIBRELOGO'], "querybox", __YES_NO_CANCEL__) != 2:
785  with __lock__:
786  __thread__ = None
787  return None
788  elif len(arg2) == 0 and _.origcursor[1]:
789  _.origcursor[0].setString("fontcolor 'green'\nlabel 'LIBRE'\npu\nback 30\npic [\n\tfc any\n\tcircle 40\n\tfontcolor 'black'\n\tlabel 'LOGO'\n\tleft 180\n\tfd 20\n\tpd\n\tpc any\n\tps 1\n\tfd 40\n\trepeat 20 [\n\t\tfd repcount*2\n\t\trt 90\n\t]\n]\npu pos any pd")
790  __translate__()
791  _.origcursor, _.cursor = __getcursor__(False), __getcursor__(True)[0]
792  arg2 = _.cursor.getString()
793  else:
795  __setlang__()
796  if __prevcode__ and __prevcode__ == arg2 and __prevlang__ == _.lng:
797  __thread__ = LogoProgram(__prevcompiledcode__)
798  else:
799  __prevcode__ = arg2
800  __prevlang__ = _.lng
801  __prevcompiledcode__ = __compil__(arg2)
802  __thread__ = LogoProgram(__prevcompiledcode__)
803  __halt__ = False
804  turtle = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.drawing.ShapeCollection')
805  turtle.add(__getshape__(__TURTLE__))
806  _.doc.CurrentController.select(turtle)
807  # set working directory for file operations
808  if _.doc.hasLocation():
809  name = os.chdir(unohelper.fileUrlToSystemPath(re.sub("[^/]*$", "", _.doc.getURL())))
810  else:
811  name = os.chdir(os.path.expanduser('~'))
812  __thread__.start()
813  except Exception as e:
814  __thread__ = None
815  __trace__()
816  return None
817 
818 def stop(arg=None):
819  global __halt__
820  with __lock__:
821  __halt__ = True
822  return None
823 
824 def home(arg=None):
825  if __thread__:
826  return None
828  turtle = __getshape__(__TURTLE__)
829  if turtle:
830  __removeshape__(__TURTLE__)
831  _.drawpage.remove(turtle)
833  __dispatcher__(".uno:Escape")
834  if not __halt__:
835  return None
836  _.pencolor = 0
837  _.pensize = __LINEWIDTH__
838  _.areacolor = __FILLCOLOR__
839  pen = 1
840  __removeshape__(__ACTUAL__)
841 
842 def clearscreen(arg=None):
843  if __thread__:
844  return None
846  turtle = __getshape__(__TURTLE__)
847  if not turtle:
849  if not __halt__:
850  # avoid unintentional image deletion in large documents
851  if len(__getcursor__(True)[0].getString()) < 5000:
852  __cs__(False)
853  return
854  __cs__(False)
855  __dispatcher__(".uno:Escape")
856 
858  global __thread__, __halt__
859  if __halt__:
860  with __lock__:
861  __thread__ = None
862  sys.exit()
863 
864 def __cs__(select = True):
865  turtle = __getshape__(__TURTLE__)
866  visible = False
867  if turtle and turtle.Visible:
868  __visible__(turtle, False)
869  visible = True
870  if _.doc.CurrentController.select(_.drawpage) and \
871  _.doc.CurrentController.getSelection().ImplementationName == "com.sun.star.drawing.SvxShapeCollection":
872  __dispatcher__(".uno:Delete")
873  if turtle and visible:
874  __visible__(turtle, True)
875  if select:
876  _.doc.CurrentController.select(_.drawpage)
877 
878 def __dispatcher__(s, properties = (), doc = 0):
879  ctx = XSCRIPTCONTEXT.getComponentContext()
880  d = ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
881  if doc != 0:
882  d.executeDispatch(doc.CurrentController.Frame, s, "", 0, properties)
883  else:
884  d.executeDispatch(_.doc.CurrentController.Frame, s, "", 0, properties)
885 
886 def __getshape__(shapename):
887  try:
888  if _.shapecache[shapename].Parent:
889  return _.shapecache[shapename]
890  _.shapecache.pop(shapename)
891  except:
892  pass
893  return None
894 
895 def __angle__(deg):
896  if deg == u'any':
897  return random.random() * 36000
898  return deg * 100
899 
900 def turnleft(deg):
901  rotate(__TURTLE__, __angle__(deg))
902 
903 def turnright(deg):
904  rotate(__TURTLE__, -__angle__(deg))
905 
906 def heading(deg = -1, go = False):
907  turtle = __getshape__(__TURTLE__)
908  if deg == -1:
909  return -turtle.RotateAngle / 100 + 360
910  else:
911  if deg == u'any':
912  turtle.RotateAngle = random.random() * 36000
913  elif type(deg) == list:
914  pos = turtle.getPosition()
915  px, py = pos.X + turtle.BoundRect.Width / 2.0, pos.Y + turtle.BoundRect.Height / 2.0
916  dx = px * __MM10_TO_TWIP__ - deg[0] * __PT_TO_TWIP__
917  dy = deg[1] * __PT_TO_TWIP__ - py * __MM10_TO_TWIP__
918  n = sqrt(dx**2 + dy**2)
919  if dy > 0 and n > 0:
920  turtle.RotateAngle = a = -(180 + asin(dx / n) / (pi/180)) * 100 + 72000 # +720 for max(angle, preciseAngle) of __go__()
921  elif n > 0:
922  turtle.RotateAngle = a = asin(dx / n) / (pi/180) * 100 + 72000
923  if go and n > 0:
924  __go__(__TURTLE__, -n, False, a)
925  else:
926  turtle.RotateAngle = -deg * 100
927 
928 def rotate(shapename, deg):
929  shape = __getshape__(shapename)
930  if shape:
931  shape.RotateAngle = shape.RotateAngle + deg
932 
933 def forward(n):
934  if type(n) == list:
935  pos = position()
936  angle = heading()
937  dx = n[1] * sin((pi/180) * angle) + n[0] * sin((pi/180)*(angle + 90))
938  dy = n[1] * cos((pi/180) * angle) + n[0] * cos((pi/180)*(angle + 90))
939  position([pos[0] + dx, pos[1] - dy])
940  elif type(n) == str:
941  siz = label([1, 1, n])
942  shape = __getshape__(__ACTUAL__)
943  pos = position()
944  angle = heading()
945  w, h = siz.Width / (__PT_TO_TWIP__ / __MM10_TO_TWIP__), siz.Height / (__PT_TO_TWIP__ / __MM10_TO_TWIP__)
946  dx = 0 * sin((pi/180) * (angle)) + w * sin((pi/180)*(angle + 90))
947  dy = 0 * cos((pi/180) * (angle)) + w * cos((pi/180)*(angle + 90))
948  position([pos[0] + dx, pos[1] - dy])
949  heading(angle)
950  else:
951  __go__(__TURTLE__, -n * __PT_TO_TWIP__)
952 
953 def backward(n):
954  if type(n) == list:
955  forward([-n[0], -n[1]])
956  turnright(180)
957  else:
958  __go__(__TURTLE__, n * __PT_TO_TWIP__)
959 
960 def __dots__(n, pos, dx, dy, r = -1, q = 0): # dots for dotted polyline or circle
961  f = [1, 4, 4, 4, 4][q]
962  k = abs(int(1.0 * n / max(20, _.pensize) / 2.0 / f))
963  dots = []
964  px, py = pos.X, pos.Y
965  for i in range(k + 1):
966  if k > 0:
967  if r != -1:
968  px, py = pos.X + sin(((f-1)*(q-1)*30 + 360.0/f/k * i) * pi/180.0) * r[0], pos.Y + cos(((f-1)*(q-1)*30 + 360.0/f/k * i) * pi/180) * r[1]
969  else:
970  px, py = pos.X + round(i * dx/k), pos.Y + round(i * dy/k)
971  dots += [(__Point__(px, py), __Point__(px + 7, py + 7))]
972  return dots
973 
974 def __draw__(d, count = True):
975  shape = _.doc.createInstance( "com.sun.star.drawing." + d)
976  shape.AnchorType = __AT_PAGE__
977  shape.TextWrap = __THROUGH__
978  __visible__(shape, False)
979  while __zoom__(): # temporary fix program halt with continuous zoom
980  while __zoom__():
981  __time__.sleep(0.2)
982  __time__.sleep(0.2)
983  _.drawpage.add(shape)
984  if __group__ != 0:
985  __group__.add(shape)
986  if count:
987  _.shapecache[next(_.shapecount)] = str(_.time)
988  return shape
989 
990 def __zoom__():
991  z = _.doc.CurrentController.getViewSettings().ZoomValue
992  if z != _.zoomvalue:
993  _.zoomvalue = z
994  return True
995  return False
996 
997 def __lefthang__(shape):
998  global __grouplefthang__
999  if __group__ != 0:
1000  p = shape.getPosition()
1001  if p.X < __grouplefthang__:
1002  __grouplefthang__ = p.X
1003 
1004 def __go__(shapename, n, dot = False, preciseAngle = -1):
1005  turtle = __getshape__(shapename)
1006  turtlepos = None
1007  if shapename == __TURTLE__:
1008  try:
1009  turtlepos = turtle.PolyPolygon[-1][-1]
1010  except:
1011  pass
1012  pos = turtle.getPosition()
1013  dx = n * sin((pi/180)*(max(turtle.RotateAngle, preciseAngle)/100))
1014  dy = n * cos((pi/180)*(max(turtle.RotateAngle, preciseAngle)/100))
1015  turtle.setPosition(__Point__(pos.X + dx / __MM10_TO_TWIP__, pos.Y + dy / __MM10_TO_TWIP__))
1016  if (_.pencolor != _.oldlc or _.pensize != _.oldlw or _.linestyle != _.oldls or _.linejoint != _.oldlj or _.linecap != _.oldlcap):
1017  __removeshape__(__ACTUAL__)
1018  shape = None
1019  else:
1020  shape = __getshape__(__ACTUAL__)
1021  _.oldlw = _.pensize
1022  _.oldlc = _.pencolor
1023  _.oldls = _.linestyle
1024  _.oldlj = _.linejoint
1025  _.oldlcap = _.linecap
1026  if shape and not _.pen and not dot:
1027  _.continuous = False
1028  return
1029  c, c2 = __Point__(pos.X + turtle.BoundRect.Width / 2.0, pos.Y + turtle.BoundRect.Height / 2.0), __Point__(round(dx / __MM10_TO_TWIP__), round(dy / __MM10_TO_TWIP__))
1030  if shape and "LineShape" in shape.ShapeType:
1031  if _.continuous or dot:
1032  last = shape.PolyPolygon[-1][-1]
1033  if not (turtlepos and (abs(last.X - turtlepos.X) > 100 or abs(last.Y - turtlepos.Y) > 100) and
1034  (__group__ == 0 or (shape.getPosition().X > 0 and turtle.getPosition().X > 0))): # picture [ ] keeps hanging shapes
1035  if dot or _.linestyle == __LineStyle_DOTTED__:
1036  shape.PolyPolygon = tuple( list(shape.PolyPolygon) + __dots__(n, turtlepos, dx, dy))
1037  else:
1038  last.X = last.X + c2.X
1039  last.Y = last.Y + c2.Y
1040  shape.PolyPolygon = tuple( list(shape.PolyPolygon[:-1]) + [tuple( list(shape.PolyPolygon[-1]) + [last])])
1041  __lefthang__(shape)
1042  return
1043  elif turtlepos:
1044  shape.PolyPolygon = tuple( list(shape.PolyPolygon) + [(turtlepos, __Point__(turtlepos.X + c2.X, turtlepos.Y + c2.Y))])
1045  _.continuous = True
1046  __lefthang__(shape)
1047  return
1048  if not _.pen and not dot:
1049  return
1050  if _.pen and not dot:
1051  _.points = [] # new line drawing: forget the points
1052  shape = __draw__("PolyLineShape")
1053  shape.RotateAngle = 0
1054  shape.PolyPolygon = tuple([tuple([__Point__(0, 0)])])
1055  shape.setPosition(c)
1056  last = shape.PolyPolygon[-1][-1]
1057  last2 = __Point__(last.X + c2.X, last.Y + c2.Y)
1058  shape.LineStyle, shape.LineDash = __linestyle__(_.linestyle)
1059  shape.LineJoint = _.linejoint
1060  shape.LineCap = _.linecap
1061  if dot or _.linestyle == __LineStyle_DOTTED__:
1062  shape.PolyPolygon = tuple( list(shape.PolyPolygon) + __dots__(n, last, c2.X, c2.Y))
1063  shape.LineStart = __bezierdot__
1064  shape.LineStartCenter = True
1065  shape.LineStartWidth = max(20, _.pensize) / __MM10_TO_TWIP__
1066  shape.LineWidth = 0
1067  else:
1068  shape.PolyPolygon = tuple([tuple( list(shape.PolyPolygon[-1]) + [last2])])
1069  shape.LineWidth = _.pensize / __MM10_TO_TWIP__
1070  shape.LineColor, shape.LineTransparence = __splitcolor__(_.pencolor)
1071  if shape.LineTransparence == 100:
1072  shape.LineStyle = 0
1073  __visible__(shape, True)
1074  shape.Name = __ACTUAL__
1075  _.shapecache[__ACTUAL__] = shape
1076  _.oldlw = _.pensize
1077  _.oldlc = _.pencolor
1078  _.oldls = _.linestyle
1079  _.oldlj = _.linejoint
1080  _.oldlcap = _.linecap
1081  _.continuous = True
1082  __lefthang__(shape)
1083 
1084 def __fillit__(filled = True):
1085  oldshape = __getshape__(__ACTUAL__)
1086  if (oldshape and oldshape.LineStartCenter) or _.points:
1087  if oldshape:
1088  __removeshape__(__ACTUAL__) # FIXME close dotted polyline
1089  if _.points:
1090  p = position()
1091  h = heading()
1092  for i in _.points:
1093  position(i)
1094  __pen__(1)
1095  __checkhalt__()
1096  _.points = []
1097  __fillit__(filled)
1098  __pen__(0)
1099  position(p)
1100  heading(h)
1101  return
1102  if oldshape and "LineShape" in oldshape.ShapeType:
1103  shape = __draw__("PolyPolygonShape", False)
1104  shape.PolyPolygon = oldshape.PolyPolygon
1105  shape.setPosition(oldshape.getPosition())
1106  shape.LineStyle, shape.LineDash = __linestyle__(_.linestyle)
1107  shape.LineJoint = _.linejoint
1108  shape.LineCap = _.linecap
1109  shape.LineWidth = _.pensize / __MM10_TO_TWIP__
1110  shape.LineColor, shape.LineTransparence = __splitcolor__(_.pencolor)
1111  shape.FillColor, shape.FillTransparence = __splitcolor__(_.areacolor, shape)
1112  if _.hatch:
1113  shape.FillBackground = True if shape.FillTransparence != 100 else False
1114  shape.FillHatch = _.hatch
1115  shape.FillStyle = 3
1116  elif type(_.areacolor) != tuple:
1117  shape.FillStyle = int(filled)
1118  if shape.LineTransparence == 100:
1119  shape.LineStyle = 0
1120  if shape.FillTransparence == 100:
1121  shape.FillTransparence = 0 # for hatching and better modifications on UI
1122  if not _.hatch:
1123  shape.FillStyle = 0
1124  shape.setString(oldshape.getString())
1125  oldshape.Name = ""
1126  shape.Name = __ACTUAL__
1127  _.shapecache[__ACTUAL__] = shape
1128  if __group__ != 0:
1129  __group__.remove(oldshape)
1130  __visible__(shape, True)
1131  _.drawpage.remove(oldshape)
1132  elif oldshape and "PolyPolygon" in oldshape.ShapeType:
1133  oldshape.LineStyle = int(_.pen)
1134  oldshape.LineJoint = _.linejoint
1135  oldshape.LineCap = _.linecap
1136  if _.hatch:
1137  oldshape.FillBackground = True
1138  oldshape.FillHatch = _.hatch
1139  oldshape.FillStyle = 3
1140  else:
1141  oldshape.FillStyle = int(filled)
1142  oldshape.LineWidth = _.pensize / __MM10_TO_TWIP__
1143  oldshape.LineColor, oldshape.LineTransparence = __splitcolor__(_.pencolor)
1144  oldshape.FillColor, oldshape.FillTransparence = __splitcolor__(_.areacolor, oldshape)
1145 
1146 def point():
1147  oldpen, _.pen = _.pen, 1
1148  oldstyle, _.linestyle = _.linestyle, __LineStyle_DOTTED__
1149  __go__(__TURTLE__, 0, True)
1150  _.pen, _.linestyle = oldpen, oldstyle
1151  _.points.append(position())
1152 
1153 def __boxshape__(shapetype, l):
1154  turtle = __getshape__(__TURTLE__)
1155  shape = __draw__(shapetype + "Shape")
1156  pos = turtle.getPosition()
1157  pos.X = pos.X - (l[0] * __PT_TO_TWIP__ / __MM10_TO_TWIP__ / 2) + turtle.BoundRect.Width / 2.0
1158  pos.Y = pos.Y - (l[1] * __PT_TO_TWIP__ / __MM10_TO_TWIP__ / 2) + turtle.BoundRect.Height / 2.0
1159  shape.setPosition(pos)
1160  shape.setSize(__Size__(l[0] * __PT_TO_TWIP__ / __MM10_TO_TWIP__, l[1] * __PT_TO_TWIP__ / __MM10_TO_TWIP__))
1161  shape.LineStyle, shape.LineDash = __linestyle__(_.linestyle)
1162  shape.LineWidth = _.pensize / __MM10_TO_TWIP__
1163  shape.LineJoint = _.linejoint
1164  shape.LineCap = _.linecap
1165  shape.LineColor, shape.LineTransparence = __splitcolor__(_.pencolor)
1166  shape.FillColor, shape.FillTransparence = __splitcolor__(_.areacolor, shape, turtle.RotateAngle)
1167  if _.hatch:
1168  shape.FillBackground = True if shape.FillTransparence != 100 else False
1169  shape.FillHatch = _.hatch
1170  shape.FillStyle = 3
1171  elif type(_.areacolor) != tuple:
1172  shape.FillStyle = 1
1173  if shape.LineTransparence == 100:
1174  shape.LineStyle = 0
1175  if shape.FillTransparence == 100:
1176  shape.FillTransparence = 0 # for hatching and better modifications on UI
1177  if not _.hatch:
1178  shape.FillStyle = 0
1179  shape.RotateAngle = turtle.RotateAngle
1180  if shapetype == "Rectangle" and len(l) > 2:
1181  shape.CornerRadius = (l[2] * __PT_TO_TWIP__) / __MM10_TO_TWIP__
1182  elif shapetype == "Ellipse" and len(l) > 2:
1183  oldBoundRect = shape.BoundRect
1184  try:
1185  shape.CircleKind = __SECTION__
1186  shape.CircleStartAngle = (-l[3] - 270) * 100
1187  shape.CircleEndAngle = (-l[2] - 270) * 100
1188  shape.CircleKind = [__FULL__, __SECTION__, __CUT__, __ARC__][l[4]]
1189  except:
1190  pass
1191  pos.X = pos.X + shape.BoundRect.X - oldBoundRect.X
1192  pos.Y = pos.Y + shape.BoundRect.Y - oldBoundRect.Y
1193  shape.setPosition(pos)
1194  __visible__(shape, True)
1195  __removeshape__(__ACTUAL__)
1196  _.shapecache[__ACTUAL__] = shape
1197  __lefthang__(shape)
1198 
1199 def ellipse(l):
1200  if type(l) != type([]): # default for circle and square
1201  l = [l, l]
1202  if _.linestyle == __LineStyle_DOTTED__:
1203  __groupstart__()
1204  _.linestyle = __LineStyle_SOLID__
1205  pc, _.pencolor = _.pencolor, 0xff000000
1206  ellipse(l)
1207  _.pencolor, _.linestyle = pc, __LineStyle_DOTTED__
1208  point()
1209  shape = __getshape__(__ACTUAL__)
1210  shape.PolyPolygon = tuple(__dots__(max(l[0], l[1]) * pi * __PT_TO_TWIP__, shape.PolyPolygon[0][0], 0, 0, [i/2.0 * __PT_TO_TWIP__ for i in l]))
1211  turtle = __getshape__(__TURTLE__)
1212  shape.RotateAngle = turtle.RotateAngle
1213  __groupend__()
1214  else:
1215  __boxshape__("Ellipse", l)
1216 
1217 def rectangle(l):
1218  if type(l) != type([]): # default for circle and square
1219  l = [l, l]
1220  if _.linestyle == __LineStyle_DOTTED__:
1221  __groupstart__()
1222  _.linestyle = __LineStyle_SOLID__
1223  pc, _.pencolor = _.pencolor, 0xff000000
1224  rectangle(l)
1225  _.pencolor, _.linestyle = pc, __LineStyle_DOTTED__
1226  point()
1227  shape = __getshape__(__ACTUAL__)
1228  if type(l) != type([]):
1229  l = [l, l]
1230  if len(l) == 2:
1231  l = l + [0]
1232  l = [i * __PT_TO_TWIP__ for i in l]
1233  c = shape.PolyPolygon[0][0]
1234  k = [min(l[0] / 2.0, l[2]), min(l[1] / 2.0, l[2])]
1235  p = __dots__(l[0] - 2 * k[0], __Point__(c.X - l[0]/2 + k[0], c.Y - l[1]/2), l[0] - 2 * k[0], 0)
1236  p = p[:-1] + __dots__(l[1] - 2 * k[1], __Point__(c.X + l[0]/2, c.Y - l[1]/2 + k[1]), 0, l[1] - 2 * k[1])
1237  p = p[:-1] + __dots__(l[0] - 2 * k[0], __Point__(c.X + l[0]/2 - k[0], c.Y + l[1]/2), -l[0] + 2 * k[0], 0)
1238  p = p[:-1] + __dots__(l[1] - 2 * k[1], __Point__(c.X - l[0]/2, c.Y + l[1]/2 - k[1]), 0, -l[1] + 2 * k[1])
1239  if l[2] > 0:
1240  p = p + __dots__(max(k) * 2 * pi, __Point__(c.X - l[0]/2 + k[0], c.Y - l[1]/2 + k[1]), 0, 0, k, 3)[1:]
1241  p = p + __dots__(max(k) * 2 * pi, __Point__(c.X + l[0]/2 - k[0], c.Y - l[1]/2 + k[1]), 0, 0, k, 2)[1:]
1242  p = p + __dots__(max(k) * 2 * pi, __Point__(c.X + l[0]/2 - k[0], c.Y + l[1]/2 - k[1]), 0, 0, k, 1)[1:]
1243  p = p + __dots__(max(k) * 2 * pi, __Point__(c.X - l[0]/2 + k[0], c.Y + l[1]/2 - k[1]), 0, 0, k, 4)[1:]
1244  shape.PolyPolygon = tuple(p)
1245  turtle = __getshape__(__TURTLE__)
1246  shape.RotateAngle = turtle.RotateAngle
1247  __groupend__()
1248  else:
1249  __boxshape__("Rectangle", l)
1250 
1251 def label(st):
1252  if type(st) != type([]):
1253  st = [0, 0, st]
1254  # get text size
1255  shape = _.doc.createInstance( "com.sun.star.drawing.TextShape")
1256  shape.TextAutoGrowWidth = True
1257  shape.Visible = False
1258  actual = __getshape__(__ACTUAL__)
1259  _.drawpage.add(shape)
1260  text(shape, st[2])
1261  z = shape.getSize()
1262  # show text using RectangleShape (for correct SVG export)
1263  ac, pc = _.areacolor, _.pencolor
1264  _.areacolor, _.pencolor = 0xff000000, 0xff000000 # invisible
1265  rectangle([z.Width / (__PT_TO_TWIP__ / __MM10_TO_TWIP__), z.Height / (__PT_TO_TWIP__ / __MM10_TO_TWIP__)])
1266  _.drawpage.remove(shape)
1267  _.pencolor, _.areacolor = pc, ac
1268  lab = __getshape__(__ACTUAL__)
1269  text(lab, st[2])
1270  if st[0] != 0 or st[1] != 0:
1271  pos = position()
1272  angle = heading()
1273  n = [st[0] * z.Width/2, st[1] * z.Height/2]
1274  dx = n[1] * sin((pi/180) * angle) + n[0] * sin((pi/180)*(angle + 90))
1275  dy = n[1] * cos((pi/180) * angle) + n[0] * cos((pi/180)*(angle + 90))
1276  lab.setPosition(__Point__(round(pos[0] * __PT_TO_TWIP__ / __MM10_TO_TWIP__ + dx - lab.BoundRect.Width/2), round(pos[1] * __PT_TO_TWIP__ / __MM10_TO_TWIP__ - dy - lab.BoundRect.Height/2)))
1277  _.shapecache[__ACTUAL__] = actual
1278  return z
1279 
1280 def text(shape, st):
1281  if shape:
1282  shape.setString(__string__(st, _.decimal))
1283  c = shape.createTextCursor()
1284  c.gotoStart(False)
1285  c.gotoEnd(True)
1286  c.CharColor, none = __splitcolor__(_.textcolor)
1287  c.CharHeight = _.fontheight
1288  c.CharWeight = __fontweight__(_.fontweight)
1289  c.CharPosture = __fontstyle__(_.fontstyle)
1290  c.CharFontName = _.fontfamily
1291 
1292 def sleep(t):
1293  _.time = _.time + t
1294  __removeshape__(__ACTUAL__)
1295  for i in range(int(t/__SLEEP_SLICE_IN_MILLISECONDS__)):
1296  __checkhalt__()
1297  __time__.sleep(0.5)
1298  __checkhalt__()
1299  __time__.sleep(t%__SLEEP_SLICE_IN_MILLISECONDS__/1000.0)
1300 
1301 def __removeshape__(shapename):
1302  try:
1303  _.shapecache.pop(shapename).Name = ""
1304  except:
1305  pass
1306 
1308  if type(w) == int:
1309  return w
1310  elif re.match(__l12n__(_.lng)['BOLD'], w, flags = re.I):
1311  return 150
1312  elif re.match(__l12n__(_.lng)['NORMAL'], w, flags = re.I):
1313  return 100
1314  return 100
1315 
1317  if type(w) == int:
1318  return w
1319  elif re.match(__l12n__(_.lng)['ITALIC'], w, flags = re.I):
1320  return __Slant_ITALIC__
1321  elif re.match(__l12n__(_.lng)['UPRIGHT'], w, flags = re.I):
1322  return __Slant_NONE__
1323  return __Slant_NONE__
1324 
1325 def __color__(c):
1326  if type(c) in [int, float, long]:
1327  return c
1328  if type(c) == unicode:
1329  if c == u'any':
1330  rc, rv, rgray = __NORMCOLORS__[int(random.random()*7)], random.random(), random.random() ** 0.5
1331  ratio = 1.0*abs(rc[2])/(abs(rc[2]) + abs(rc[4]))
1332  newcol = list(rc[0])
1333  if rv < ratio:
1334  newcol[rc[1]] += rc[2] * rv/ratio
1335  else:
1336  newcol[rc[3]] += rc[4] * (rv - ratio)/(1 - ratio)
1337  # random grayness
1338  rdark = 1 - 2**4 * (random.random()-0.5)**4
1339  for i in range(0, 3):
1340  newcol[i] = 255 * (rgray + (newcol[i]/255.0 - rgray) * rdark)
1341  return __color__(newcol)
1342  if c[0:1] == '~':
1343  c = __componentcolor__(__colors__[_.lng][c[1:].lower()])
1344  for i in range(3):
1345  c[i] = max(min(c[i] + int(random.random() * 64) - 32, 255), 0)
1346  return __color__(c)
1347  return __colors__[_.lng][c.lower()]
1348  if type(c) == list:
1349  if len(c) == 1: # color index
1350  return __COLORS__[int(c[0])][1]
1351  elif len(c) == 3: # RGB
1352  return (int(c[0])%256 << 16) + (int(c[1])%256 << 8) + int(c[2])%256
1353  elif len(c) == 2 or len(c) > 4: # gradient
1354  return (__color__(c[0]), __color__(c[1])) + tuple(c[2:])
1355  return (int(c[3])%256 << 24) + (int(c[0])%256 << 16) + (int(c[1])%256 << 8) + int(c[2])%256 # RGB + alpha
1356 
1358  if _.pen == 0:
1359  return 0, __LineDash__()
1360  if _.linestyle == __LineStyle_DASHED__:
1361  return _.linestyle, __LineDash__(__DashStyle_RECT__, 0, 0, 1, 100, 100)
1362  elif _.linestyle == __LineStyle_DOTTED__:
1363  return __LineStyle_DASHED__, __LineDash__(__DashStyle_RECT__, 1, 1, 0, 0, 100000)
1364  elif type(s) == list:
1365  return __LineStyle_DASHED__, __LineDash__((s[5:6] or [0])[0], s[0], s[1] * __PT_TO_TWIP__, s[2], s[3] * __PT_TO_TWIP__, s[4] * __PT_TO_TWIP__)
1366  return s, __LineDash__()
1367 
1368 def fillstyle(s):
1369  if type(s) == list:
1370  color, null = __splitcolor__(__color__(s[1]))
1371  _.hatch = __Hatch__(s[0] - 1, color, s[2] * __PT_TO_TWIP__, s[3] * 10)
1372  elif s == 0:
1373  _.hatch = None
1374  elif s <= 10: # using hatching styles of Writer
1375  fillstyle([[1, 0, 5, 0], [1, 0, 5, 45], [1, 0, 5, -45], [1, 0, 5, 90], [2, [127, 0, 0], 5, 45], [2, [127, 0, 0], 5, 0], [2, [0, 0, 127], 5, 45], [2, [0, 0, 127], 5, 0], [3, [0, 0, 127], 5, 0], [1, 0, 25, 45]][s-1])
1376 
1377 def __splitcolor__(c, shape = None, angle = None):
1378  if shape and (type(c) == tuple or type(_.t10y) == list):
1379  angle = heading() if angle == None else -angle / 100 + 360
1380  if type(c) == tuple:
1381  shape.FillStyle = __FillStyle_GRADIENT__
1382  # gradient color: [color1, color2, style, angle(must be positive for I/O), border, x_percent, y_percent, color1_intensity_percent, color2_intensity_percent]
1383  d, d[0:len(c)], c = [0, 0, __GradientStyle_LINEAR__, 0, 0, 0, 0, 100, 100], c, c[0]
1384  shape.FillGradient = __Gradient__(d[2], d[0], d[1], (-angle + d[3]) * 10 % 3600, d[4], d[5], d[6], d[7], d[8], 0)
1385  if type(_.t10y) == list: # transparency gradient: [begin_percent, end_percent, style, angle, border, x_percent, y_percent]
1386  table = _.doc.createInstance("com.sun.star.drawing.TransparencyGradientTable")
1387  if not table.hasByName(str(_.t10y) + str(angle)):
1388  t, t[0:len(_.t10y)] = [100, __GradientStyle_LINEAR__, 0, 0, 0, 0, 0], _.t10y
1389  table.insertByName(str(_.t10y) + str(angle), __Gradient__(t[2], t[0] * 0xffffff / 100.0, t[1] * 0xffffff / 100.0, (-angle + t[3]) * 10 % 3600, t[4], t[5], t[6], 100, 100, 0))
1390  shape.FillTransparenceGradientName = str(_.t10y) + str(angle)
1391  c = 0 if type(c) == tuple else c & 0xffffff
1392  else:
1393  shape.FillStyle = __FillStyle_GRADIENT__
1394  c = int(_.t10y * 255.0/100) << 24
1395  """Split color constants to RGB (3-byte) + transparency (%)"""
1396  return int(c) & 0xffffff, (int(c) >> 24) / (255.0/100)
1397 
1399  a = [ (c & 0xff0000) >> 16, (c & 0xff00) >> 8, c & 0xff ]
1400  if c > 2**24:
1401  a.append((c & 0xff000000) >> 24)
1402  return a
1403 
1404 def pencolor(n = -1):
1405  if n != -1:
1406  _.pencolor = __color__(n)
1407  turtle = __getshape__(__TURTLE__)
1408  if turtle and __visible__(turtle):
1409  turtle.LineColor, turtle.LineTransparence = __splitcolor__(_.pencolor)
1410  else:
1411  return __componentcolor__(_.pencolor)
1412 
1413 def pensize(n = -1):
1414  if n != -1:
1415  if n == 'any':
1416  _.pensize = random.random() * 10 * __PT_TO_TWIP__
1417  else:
1418  _.pensize = n * __PT_TO_TWIP__
1419  turtle = __getshape__(__TURTLE__)
1420  if turtle and __visible__(turtle):
1421  turtle.LineWidth = min(_.pensize, (1 + _.pen * 2) * __PT_TO_TWIP__) / __MM10_TO_TWIP__
1422  return _.pensize / __PT_TO_TWIP__
1423 
1424 def penstyle(n = -1):
1425  if n == -1:
1426  try:
1427  return __locname__(_.linestyle.value)
1428  except:
1429  return __locname__('DOTTED')
1430  if type(n) == list and len(n) >= 5:
1431  _.linestyle = n
1432  elif re.match(__l12n__(_.lng)['SOLID'], n, flags = re.I):
1433  _.linestyle = __LineStyle_SOLID__
1434  elif re.match(__l12n__(_.lng)['DASH'], n, flags = re.I):
1435  _.linestyle = __LineStyle_DASHED__
1436  elif re.match(__l12n__(_.lng)['DOTTED'], n, flags = re.I):
1437  _.linestyle = __LineStyle_DOTTED__
1438 
1439 def penjoint(n = -1):
1440  if n == -1:
1441  return __locname__(_.linejoint.value)
1442  if re.match(__l12n__(_.lng)['NONE'], n, flags = re.I):
1443  _.linejoint = __Joint_NONE__
1444  elif re.match(__l12n__(_.lng)['BEVEL'], n, flags = re.I):
1445  _.linejoint = __BEVEL__
1446  elif re.match(__l12n__(_.lng)['MITER'], n, flags = re.I):
1447  _.linejoint = __MITER__
1448  elif re.match(__l12n__(_.lng)['ROUNDED'], n, flags = re.I):
1449  _.linejoint = __ROUNDED__
1450 
1451 def pencap(n = -1):
1452  if n == -1:
1453  return __locname__(_.linecap.value.replace('BUTT', 'NONE'))
1454  if re.match(__l12n__(_.lng)['NONE'], n, flags = re.I):
1455  _.linecap = __Cap_NONE__
1456  elif re.match(__l12n__(_.lng)['ROUNDED'], n, flags = re.I):
1457  _.linecap = __Cap_ROUND__
1458  elif re.match(__l12n__(_.lng)['SQUARE'], n, flags = re.I):
1459  _.linecap = __Cap_SQUARE__
1460 
1461 def fillcolor(n = -1):
1462  if n != -1:
1463  _.areacolor = __color__(n)
1464  if type(_.areacolor) != tuple:
1465  _.t10y = (int(_.areacolor) >> 24) / (255.0/100)
1466  else:
1467  _.t10y = 0
1468  turtle = __getshape__(__TURTLE__)
1469  if turtle and __visible__(turtle):
1470  turtle.FillColor, transparence = __splitcolor__(_.areacolor, turtle)
1471  turtle.FillTransparence = min(95, transparence)
1472  else:
1473  return __componentcolor__(_.areacolor)
1474 
1475 def filltransparency(n = -1):
1476  if n != -1:
1477  if n == u'any':
1478  n = 100 * random.random()
1479  if type(n) != list:
1480  if type(_.areacolor) != tuple:
1481  fillcolor((_.areacolor & 0xffffff) + (int(n * (255.0/100)) << 24))
1482  else:
1483  _.t10y = n
1484  else:
1485  _.t10y = n
1486  else:
1487  return _.t10y
1488 
1489 def pentransparency(n = -1):
1490  if n != -1:
1491  if n == u'any':
1492  n = 100 * random.random()
1493  pencolor((_.pencolor & 0xffffff) + (int(n * (255.0/100)) << 24))
1494  else:
1495  return _.pencolor >> 24
1496 
1497 def fontcolor(n = -1):
1498  if n != -1:
1499  _.textcolor = __color__(n)
1500  else:
1501  return __componentcolor__(_.textcolor)
1502 
1503 def position(n = -1):
1504  turtle = __getshape__(__TURTLE__)
1505  if turtle:
1506  if n != -1:
1507  if n == 'any':
1508  ps = pagesize()
1509  heading([random.random() * ps[0], random.random() * ps[1]], True)
1510  else:
1511  heading(n, True)
1512  else:
1513  pos = turtle.getPosition()
1514  pos.X, pos.Y = pos.X + turtle.BoundRect.Width / 2.0, pos.Y + turtle.BoundRect.Height / 2.0
1515  return [ pos.X * __MM10_TO_TWIP__ / __PT_TO_TWIP__, pos.Y * __MM10_TO_TWIP__ / __PT_TO_TWIP__ ]
1516 
1517 def __groupstart__(name = ""):
1518  global __group__, __grouplefthang__, __groupstack__
1519  __removeshape__(__ACTUAL__)
1520  __groupstack__.append(__group__)
1521  if name != "": # store pic name (for correct repcount)
1522  __groupstack__.append(name)
1523  if ".SVG" == name[-4:].upper():
1524  _.time = 0
1525  _.shapecount = itertools.count()
1526  __groupstack__.append(__grouplefthang__)
1527  __group__ = uno.getComponentContext().ServiceManager.createInstance('com.sun.star.drawing.ShapeCollection')
1528  __grouplefthang__ = 0
1529 
1531  global _
1532  id = int(m.group(1))
1533  if id - 3 in _.shapecache:
1534  t = _.shapecache[id-3]
1535  opacity = "100" if t == "0" else "0"
1536  name = "" if id != 3 else "id=\"first\""
1537  start = "%sms;last.end+%sms" % (t, t) if id == 3 else "first.end+%dms" % (int(t) - int(_.shapecache[0]))
1538  return '<g id="id%s" opacity="0"><animate %s attributeName="opacity" from="100" to="100" begin="%s" dur="1ms" fill="freeze"/><animate attributeName="opacity" from="100" to="%s" begin="last.end" dur="1ms" fill="freeze"/>' % (m.group(1), name, start, opacity)
1539  return m.group()
1540 
1542  with open(filename, "r") as f:
1543  s = f.read()
1544  s = re.sub('(?s)(<g\\sid="[^"]*)\(([^"]*)\)', '\\1\\2', s) # bad "(", ")" in xml:id
1545  s = re.sub('(?s)<g\\sooo:[^>]*>', '', s) # remove non standard attributes
1546  s = re.sub('(?s)<defs class="EmbeddedBulletChars">.*(?=<defs class="TextEmbeddedBitmaps")', '', s) # remove unused parts
1547  s = re.sub('(?s)(<path stroke-width="[^"]*"[^<]*)stroke-width="[^"]*"', '\\1', s) # double stroke-width
1548  s = re.sub('(?s)<svg\\s+version="1.2"', '<svg version="1.1"', s) # for W3C Validator
1549  if _.time > 0:
1550  s = re.sub('<g id="id([0-9]+)">', create_svg_animation, s)
1551  m = re.match('(?s)(.*<animate[^>]*first[.]end.([0-9]+)[^>]* dur=")1ms"', s)
1552  lasttime = _.time - int(m.group(2)) - int(_.shapecache[0]) + 1
1553  if lasttime > 1:
1554  s = re.sub('(?s)(.*<animate[^>]*first[.]end.([0-9]+)[^>]* dur=")1ms"', m.group(1) + str(lasttime) + 'ms" id="last"', s)
1555  with open(filename, 'w') as f:
1556  f.write(s)
1557 
1558 def __groupend__(name = ""):
1559  global __group__, __grouplefthang__, __groupstack__, __halt__
1560  g = 0
1561  if __group__.getCount() > 1:
1562  if __grouplefthang__ < 0:
1563  for i in range(__group__.Count):
1564  s = __group__.getByIndex(i)
1565  p = s.getPosition()
1566  p.X = p.X + -__grouplefthang__
1567  s.setPosition(p)
1568  g = _.drawpage.group(__group__)
1569  p = g.getPosition()
1570  p.X = p.X + __grouplefthang__
1571  g.setPosition(p)
1572  else:
1573  g = _.drawpage.group(__group__)
1574  g.TextWrap = __THROUGH__
1575  elif __group__.getCount() == 1:
1576  g = __group__.getByIndex(0)
1577  __grouplefthang__ = min(__groupstack__.pop(), __grouplefthang__)
1578  if name != "":
1579  name = __groupstack__.pop()
1580  if name and ".SVG" == name[-4:].upper() and g != 0:
1581  _.doc.CurrentController.select(g)
1582  __dispatcher__(".uno:Copy")
1583  ctx = XSCRIPTCONTEXT.getComponentContext()
1584  d = ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
1585  draw = d.loadComponentFromURL("private:factory/sdraw", "_blank", 0, ())
1586  drawpage = draw.getDrawPages().getByIndex(0)
1587  while XSCRIPTCONTEXT.getDocument() != draw:
1588  if XSCRIPTCONTEXT.getDocument() not in [draw, _.doc, None]:
1589  __halt__ = True
1590  return
1591  __time__.sleep(0.1)
1592  __dispatcher__(".uno:Paste", (), draw)
1593  __dispatcher__(".uno:FormatGroup", (), draw)
1594  pic = drawpage.getByIndex(0)
1595  pic.setPosition(__Point__((g.BoundRect.Width - g.Size.Width)//2, (g.BoundRect.Height - g.Size.Height)//2))
1596  drawpage.Height, drawpage.Width = g.BoundRect.Height, g.BoundRect.Width
1597  if not os.path.isabs(name):
1598  name = os.getcwd() + os.path.sep + name
1599  __dispatcher__(".uno:ExportTo", (__getprop__("URL", unohelper.systemPathToFileUrl(name)), __getprop__("FilterName", "draw_svg_Export")), draw)
1600  draw.close(True)
1601  while XSCRIPTCONTEXT.getDocument() != _.doc:
1602  if XSCRIPTCONTEXT.getDocument() not in [draw, _.doc, None]:
1603  __halt__ = True
1604  return
1605  __time__.sleep(0.1)
1606  create_valid_svg_file(name)
1607  __group__ = __groupstack__.pop()
1608  if __group__ != 0 and g != 0:
1609  __group__.add(g)
1610  __removeshape__(__ACTUAL__)
1611 
1612 def __int__(x): # handle eg. int("10cm")
1613  if type(x) == str or type(x) == unicode:
1614  x = __float__(x)
1615  return int(x)
1616 
1617 def __float__(x): # handle eg. float("10,5cm")
1618  if type(x) == str or type(x) == unicode:
1619  for i in __comp__[_.lng]:
1620  x = re.sub(u"(?iu)" + i[0], i[1], x)
1621  x = eval(x)
1622  return float(x)
1623 
1624 def fontheight(n = -1):
1625  if n != -1:
1626  _.fontheight = n
1627  else:
1628  return _.fontheight
1629 
1630 def fontweight(n = -1):
1631  if n != -1:
1632  _.fontweight = n
1633  else:
1634  return _.fontweight
1635 
1636 def fontfamily(s = -1):
1637  if s != -1:
1638  _.fontfamily = s
1639  else:
1640  return _.fontfamily
1641 
1642 def fontstyle(n = -1):
1643  if n != -1:
1644  _.fontstyle = n
1645  else:
1646  return _.fontstyle
1647 
1648 def __loadlang__(lang, a):
1649  global comp, __colors__
1650  __colors__[lang] = {}
1651  for i in __COLORS__:
1652  for j in a[i[0]].split("|"):
1653  __colors__[lang][j.lower()] = i[1]
1654  for i in a:
1655  if not i[0:3] in ["LIB", "ERR", "PT", "INC", "MM", "CM", "HOU", "DEG"] and not i in __STRCONST__: # uppercase native commands
1656  a[i] = a[i].upper()
1657  repcount = a['REPCOUNT'].split('|')[0]
1658  loopi = itertools.count()
1659  loop = lambda r: "%(i)s = 1\n%(orig)s%(j)s = %(i)s\n%(i)s += 1\n" % \
1660  { "i": repcount + str(next(loopi)), "j": repcount, "orig": re.sub( r"(?ui)(?<!:)\b%s\b" % repcount, repcount + str(next(loopi)-1), r.group(0)) }
1661  __comp__[lang] = [
1662  [r"(?i)(?<!:)(\b|(?=[-:]))(?:%s)\b" % "|".join([a[i].lower() for i in a if not "_" in i and i != "DECIMAL"]), lambda s: s.group().upper()], # uppercase all native commands in the source code
1663  [r"(?<!:)\b(?:%s) \[(?= |\n)" % a['GROUP'], "\n__groupstart__()\nfor __groupindex__ in range(2):\n[\nif __groupindex__ == 1:\n[\n__groupend__()\nbreak\n]\n"],
1664  [r"(?<!:)\b(?:%s) (%s[^[]*)\[(?= |\n)" % (a['GROUP'], __DECODE_STRING_REGEX__), "\n__groupstart__(\\1)\nfor __groupindex__ in range(2):\n[\nif __groupindex__ == 1:\n[\n__groupend__(\\1)\nbreak\n]\n"],
1665  [r"(?<!:)\b(?:%s)\b" % a['GROUP'], "\n__removeshape__(__ACTUAL__)\n"],
1666  [r"(\n| )][ \n]*\[(\n| )", "\n]\nelse:\n[\n"], # if/else block
1667  [r"(?<!\n)\[(?= |\n)", ":\n[\n"], # start block
1668  [r"( ]|\n]$)", "\n]\n"], # finish block
1669  [r"(?<!:)\b(?:%s)\b" % a['FOR'], "\nfor"],
1670  [r"(?<!:)\b(?:%s)\b" % a['REPEAT'], "\n__repeat__"],
1671  [r"(?<!:)\b(?:%s)\b" % a['BREAK'], "\nbreak"],
1672  [r"(?<!:)\b(?:%s)\b" % a['CONTINUE'], "\ncontinue"],
1673  [r"(?<!:)\b(?:%s)\b" % a['REPCOUNT'], repcount],
1674  [r"(?<!:)\b(?:%s)\b" % a['IF'], "\nif"],
1675  [r"(?<!:)\b(?:%s)\b" % a['WHILE'], "\nwhile"],
1676  [r"(?<!:)\b(?:%s)\b" % a['OUTPUT'], "\nreturn"],
1677  [r"\n(if|while|return) [^\n]*", lambda r: re.sub("(?<![=!<>])=(?!=)", "==", r.group(0))], # = -> ==, XXX x = y = 1?
1678  [r"(?<=\n)(for\b :?\w+) ([^\n]+)(?<=\w|]|}|\))(?=-|:)(?:%s)\b" % a['IN'], "\\1 in \\2"], # "for x y-in" -> "for x in y"
1679  [r"(:?\b\w+|[[][^[\n]*])\b(?:%s)\b" % a['IN'], "in \\1"], # "x y-in" -> "x in y"
1680  [r"(?<!:)\b(?:%s)\b" % a['IN'], "in"],
1681  [r"(?<!:)\b(?:%s)\b[ \t]+(:?\w+)\b(?! in\b)" % a['FOR'], "\nfor \\1 in"],
1682  [r"(?<=\n)__repeat__ :\n", "while True:\n"], # infinite loop
1683  [r"(?<=\n)(for|while) (?!__groupindex__)[^\n]*:\n\[\n", loop], # loop variables for repcount (not groupindex loop)
1684  [r"(?<=\n)__repeat__([^\n]*\w[^\n]*):(?=\n)", "for %s in range(1, 1+int(\\1)):" % repcount], # repeat block
1685  [r"(?<=\d)[%s](?=\d)" % a['DECIMAL'], "."], # decimal sign
1686  [r"(?<!/)/(?!/)", "*1.0/"], # fix division: /1 -> /1.0, but not with //
1687  [r"\b([0-9]+([,.][0-9]+)?)(%s)\b" % a['HOUR'], lambda r: str(float(r.group(1).replace(",", "."))*30)], # 12h = 12*30°
1688  [r"(?<=\d)(%s)" % a['DEG'], ""], # 1° -> 1
1689  [r"(?<!:)\b(?:__def__)[ \t]+(\w+)\b[ \t]*([:]?\w[^\n]*)", "\ndef \\1(\\2):\n["],
1690  [r"(?<!:)\b(?:__def__)\s+(\w+)", "\ndef \\1():\n["],
1691  [r"(?<!:)\b(?:%s)\b" % a['END'], "\n]"],
1692  [r"(?<!:)\b(?:%s)\b" % a['GLOBAL'], "global"],
1693  [r"(?<!:)\b(?:%s)\b" % a['TRUE'], "True"],
1694  [r"(?<!:)\b(?:%s)\b" % a['FALSE'], "False"],
1695  [r"(?<!:)\b(?:%s)\b" % a['NOT'], "not"],
1696  [r"(?<!:)\b(?:%s)\b" % a['AND'], "and"],
1697  [r"(?<!:)\b(?:%s)\b" % a['OR'], "or"],
1698  [r"(?<!:)\b(?:%s)\b" % a['INT'], "__int__"],
1699  [r"(?<!:)\b(?:%s)\b" % a['FLOAT'], "__float__"],
1700  [r"(?<!:)\b(?:%s)\b" % a['STR'], "__string__"],
1701  [r"(?<!:)\b(?:%s)\b" % a['COUNT'], "len"],
1702  [r"(?<!:)\b(?:%s)\b" % a['ROUND'], "round"],
1703  [r"(?<!:)\b(?:%s)\b" % a['ABS'], "abs"],
1704  [r"(?<!:)\b(?:%s)\b" % a['SIN'], "sin"],
1705  [r"(?<!:)\b(?:%s)\b" % a['COS'], "cos"],
1706  [r"(?<!:)\b(?:%s)\b" % a['PI'], "pi"],
1707  [r"(?<!:)\b(?:%s)\b" % a['SQRT'], "sqrt"],
1708  [r"(?<!:)\b(?:%s)\b" % a['LOG10'], "log10"],
1709  [r"(?<!:)\b(?:%s)\b" % a['MIN'], "min"],
1710  [r"(?<!:)\b(?:%s)\b" % a['MAX'], "max"],
1711  [r"(?<!:)\b(?:%s)\b" % a['STOP'], "\nreturn None"],
1712  [r"(?<!:)\b(?:%s)\b" % a['CLEARSCREEN'], "\n__cs__()"],
1713  [r"(?<!:)\b(?:%s)(\s+|$)" % a['PENCOLOR'], "\n)pencolor("],
1714  [r"(?<!:)\b(?:%s)(\s+|$)" % a['PENSTYLE'], "\n)penstyle("],
1715  [r"(?<!:)\b(?:%s)(\s+|$)" % a['PENJOINT'], "\n)penjoint("],
1716  [r"(?<!:)\b(?:%s)(\s+|$)" % a['PENCAP'], "\n)pencap("],
1717  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FILLCOLOR'], "\n)fillcolor("],
1718  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FILLTRANSPARENCY'], "\n)filltransparency("],
1719  [r"(?<!:)\b(?:%s)(\s+|$)" % a['PENTRANSPARENCY'], "\n)pentransparency("],
1720  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FILLSTYLE'], "\n)fillstyle("],
1721  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FONTCOLOR'], "\n)fontcolor("],
1722  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FONTFAMILY'], "\n)fontfamily("],
1723  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FONTHEIGHT'], "\n)fontheight("],
1724  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FONTWEIGHT'], "\n)fontweight("],
1725  [r"(?<!:)\b(?:%s)(\s+|$)" % a['FONTSTYLE'], "\n)fontstyle("],
1726  [r"(?<!:)\b(?:%s)(\s+|$)" % a['PENWIDTH'], "\n)pensize("],
1727  [r"(?<!:)\b(?:%s)\b" % a['PENDOWN'], "\n__pen__(1)"],
1728  [r"(?<!:)\b(?:%s)\b" % a['PENUP'], "\n__pen__(0)"],
1729  [r"(?<!:)\b(?:%s)\b" % a['HIDETURTLE'], "\nhideturtle()"],
1730  [r"(?<!:)\b(?:%s)\b" % a['SHOWTURTLE'], "\nshowturtle()"],
1731  [r"(?<!:)\b(?:%s)\b\[" % a['POSITION'], "position()["],
1732  [r"(?<!:)\b(?:%s)\b(?!\()" % a['POSITION'], "\n)position("],
1733  [r"(?<!:)\b(?:%s)\b" % a['HEADING'], "\n)heading("],
1734  [r"(?<!:)\b(?:%s)\b" % a['PAGESIZE'], "pagesize()"],
1735  [r"(?<!:)\b(?:%s)\b" % a['POINT'], "\npoint()"],
1736  [r"(?<!:)\b(?:%s)\b" % (a['ELLIPSE'] + "|" + a['CIRCLE']), "\n)ellipse("],
1737  [r"(?<!:)\b(?:%s)\b" % (a['RECTANGLE'] + "|" + a['SQUARE']), "\n)rectangle("],
1738  [r"(?<!:)\b(?:%s)\b" % a['CLOSE'], "\n__fillit__(False)"],
1739  [r"(?<!:)\b(?:%s)\b" % a['FILL'], "\n__fillit__()"],
1740  [r"(?<!:)\b(?:%s)\b" % a['LABEL'], "\n)label("],
1741  [r"(?<!:)\b(?:%s)\b" % a['TEXT'], "\n)text(__getshape__(__ACTUAL__),"],
1742  [r"(text\([ \t]*\"[^\"\n\)]*)", "\\1\"\n"],
1743  [r"(?<!:)\b(?:%s)\b" % a['HOME'], "\nturtlehome()"],
1744  [r"(?<!:)\b(?:%s)\b" % a['SLEEP'], "\n)sleep("],
1745  [r"(?<!:)\b(?:%s)\b" % a['FORWARD'], "\n)forward("],
1746  [r"(?<!:)\b(?:%s)\b" % a['BACKWARD'], "\n)backward("],
1747  [r"(?<!:)\b(?:%s)\b" % a['TURNRIGHT'], "\n)turnright("],
1748  [r"(?<!:)\b(?:%s)\b" % a['RANDOM'], "Random"],
1749  [r"(?<!:)\b(?:%s)\b" % a['SET'], "set"],
1750  [r"(?<!:)\b(?:%s)\b" % a['RANGE'], "range"],
1751  [r"(?<!:)\b(?:%s)\b" % a['LIST'], "list"],
1752  [r"(?<!:)\b(?:%s)\b" % a['TUPLE'], "tuple"],
1753  [r"(?<!:)\b(?:%s)\b" % a['SORTED'], "sorted"],
1754  [r"(?<!:)\b(?:%s)\b ?\(" % a['RESEARCH'], "re.search('(?u)'+"],
1755  [r"(?<!:)\b(?:%s)\b ?\(" % a['RESUB'], "re.sub('(?u)'+"],
1756  [r"(?<!:)\b(?:%s)\b ?\(" % a['REFINDALL'], "re.findall('(?u)'+"],
1757  [r"(?<!:)\b(?:%s)\b" % a['ANY'], "u'any'"],
1758  [r"(?<!:)\b(?:%s) (\w+|[[][^\]]*])\b" % a['INPUT'], " Input(\\1)"],
1759  [r"(?<!:)\b(?:%s)\b" % a['PRINT'], "\nPrint"],
1760  [r"(?<!:)\b(?:%s)\b" % a['TURNLEFT'], "\n)turnleft("],
1761  [r"\b([0-9]+([,.][0-9]+)?)(%s)\b" % a['PT'], "\\1"],
1762  [r"\b([0-9]+([,.][0-9]+)?)(%s)(?!\w)" % a['INCH'], lambda r: str(float(r.group(1).replace(",", "."))*72)],
1763  [r"\b([0-9]+([,.][0-9]+)?)(%s)\b" % a['MM'], lambda r: str(float(r.group(1).replace(",", "."))*__MM_TO_PT__)],
1764  [r"\b([0-9]+([,.][0-9]+)?)(%s)\b" % a['CM'], lambda r: str(float(r.group(1).replace(",", "."))*__MM_TO_PT__*10)],
1765  [r"(?<=[-*/=+,]) ?\n\)(\w+)\(", "\\1()"], # read attributes, eg. x = fillcolor
1766  [r"(?<=return) ?\n\)(\w+)\(", "\\1()"], # return + user function
1767  ]
1768 
1769 def __concatenation__(r): # keep line positions with extra line breaks
1770  s = re.subn("~[ \t]*\n", " ", r.group(0))
1771  return s[0] + "\n" * s[1]
1772 
1773 # convert Logo expressions to Python ones by adding
1774 # missing parentheses to procedure and function calls
1775 # f x y z -> f(x, y, z)
1776 # a = [sin len f [cos 45, 6] [1, 2, 3] sin 90] ->
1777 # a = [sin(len(f([cos(45),6],[1, 2, 3], sin(90))]
1778 # NOTE: "f(45)" and "f (45)" are not the same:
1779 # sin(45) + cos 45 -> sin(45) + cos(45)
1780 # sin (45) + cos 45 -> sin(45 + cos(45))
1781 def __l2p__(i, par, insub, inarray):
1782  first = True
1783  while par["pos"] < len(i):
1784  pos = par["pos"]
1785  ch = i[pos]
1786  ignored = False
1787  # starting parenthesis
1788  if ch in "([":
1789  if insub and not inarray and not first and par["out"][-1:] != "]":
1790  return
1791  par["out"] += ch
1792  par["pos"] += 1
1793  __l2p__(i, par, insub, True)
1794  # ending parenthesis
1795  elif ch in ")]":
1796  if insub and not inarray:
1797  return
1798  # put character before terminating spaces
1799  par["out"] = re.sub("( *)$", ch + "\\1", par["out"])
1800  par["pos"] += 1
1801  return
1802  # starting a subroutine
1803  elif pos in par["sub"]:
1804  if insub and not inarray and not first:
1805  return
1806  first = False
1807  subname = i[pos:par["sub"][pos]]
1808  par["pos"] += len(subname)
1809  par["out"] += subname
1810  # Logo syntax: add parentheses
1811  # for example: foo x y z -> foo(x, y, z)
1812  par["out"] += "("
1813  for j in range(par["names"][subname]):
1814  # add commas, except if already added, eg. with special RANGE
1815  # (variable argument counts: RANGE 1 or RANGE 1 100 or RANGE 1 100 10)
1816  if j > 0 and par["out"].rstrip()[-1] != ",":
1817  par["out"] = re.sub("( +),$",",\\1", par["out"] + ",")
1818  __l2p__(i, par, True, False)
1819  par["out"] = re.sub("( +)\\)$", ")\\1", par["out"] + ")")
1820  # operators
1821  elif pos in par["op"]:
1822  op = i[pos:par["op"][pos]]
1823  par["out"] += op
1824  par["pos"] += len(op)
1825  __l2p__(i, par, insub, False)
1826  # other atoms
1827  elif pos in par["atom"]:
1828  if insub and not inarray and not first:
1829  return
1830  first = False
1831  atom = i[pos:par["atom"][pos]]
1832  par["out"] += atom
1833  par["pos"] += len(atom)
1834  # handle subroutines with explicit parentheses
1835  # and array indices
1836  if i[par["pos"]:par["pos"]+1] in "([":
1837  first = True
1838  continue
1839  # optional negative or positive sign
1840  elif ch in "-+":
1841  if insub and not inarray and not first:
1842  return
1843  par["out"] += ch
1844  par["pos"] += 1
1845  ignored = first
1846  elif ch == " ":
1847  par["out"] += ch
1848  par["pos"] += 1
1849  ignored = first
1850  elif insub and ((ch == "," and not inarray) or (ch != ",")):
1851  return
1852  else:
1853  par["out"] += ch
1854  par["pos"] += 1
1855  # end of first subexpression, except in the case of ignored characters
1856  if not ignored:
1857  first = False
1858 
1859 def __compil__(s):
1860  global _, comp, __strings__, __compiled__
1861  try:
1862  c = _.doc.CurrentController.getViewCursor()
1863  locs = [i for i in [c.CharLocale, c.CharLocaleAsian, c.CharLocaleComplex] if i.Language != 'zxx'] # not None language
1864  loc = Locale(__uilocale__.split('-')[0], __uilocale__.split('-')[1], '')
1865  if locs and loc not in locs:
1866  loc = locs[0]
1867  try:
1868  _.lng = loc.Language + '_' + loc.Country
1869  __loadlang__(_.lng, __l12n__(_.lng))
1870  except:
1871  __trace__()
1872  _.lng = loc.Language
1873  __loadlang__(_.lng, __l12n__(_.lng))
1874  except:
1875  __trace__()
1876  # for testing compiling, we create a not document based namespace
1877  if "_" not in locals():
1878  _ = lambda: None
1879  _.lng = 'en_US'
1880  if not _.lng in __comp__:
1881  __loadlang__(_.lng, __l12n__(_.lng))
1882 
1883  _.decimal = __l12n__(_.lng)['DECIMAL']
1884 
1885  rmsp = re.compile(r"[ ]*([=+*/]|==|<=|>=|<>|!=|-[ ]+)[ ]*")
1886  chsp = re.compile(r"[ \t]+")
1887  chch = re.compile(r"(?u)(?<!\w):(?=\w)")
1888 
1889  # remove CR characters and split lines
1890  s = re.sub(r'[ \t\r]*(?=\n)', '', s)
1891 
1892  # remove full line comments
1893  s = re.sub(r"^[ \t]*[;#][^\n]*", "", s)
1894  s = re.sub(r"(?<=\n)[ \t]*[;#][^\n]*", "", s)
1895 
1896  # concatenate lines
1897  __compiled__ = re.sub(r'([^\n]*~[ \t]*\n)+[^\n]*', __concatenation__, s)
1898 
1899  # sign original line breaks
1900  s = re.sub("(?<=\n)", __LINEBREAK__ + "\n", __compiled__)
1901 
1902  # encode strings
1903  lq = '\'' + __l12n__(_.lng)['LEFTSTRING'].replace("|", "")
1904  rq = '\'' + __l12n__(_.lng)['RIGHTSTRING'].replace("|", "")
1905  __strings__ = []
1906  s = re.sub("(?u)([%s])((?:[^\n%s]|\\\\[%s])*)(?<!\\\\)[%s]" % (lq, rq, rq, rq), __encodestring__, s)
1907  s = re.sub('(?u)(?<![0-9])(")(~?\w*)', __encodestring__, s)
1908 
1909  # remove extra spaces
1910  s = chsp.sub(" ", s)
1911 
1912  # remove inline comments
1913  s = re.sub(r"[ ]*;[^\n]*", "", s)
1914 
1915  # n-dash and m-dash as minus signs
1916  s = re.sub(r"(?u)[–—]", "-", s)
1917 
1918  # replace procedure names
1919  s = re.sub(r"(?i)^[ ]*(%s)[ ]+" % __l12n__(_.lng)['TO'], "__def__ ", s)
1920  s = re.sub(r"(?i)\n[ ]*(%s)[ ]+" % __l12n__(_.lng)['TO'], "\n__def__ ", s)
1921  subnames = re.findall(u"(?iu)(?<=__def__ )\w+", s)
1922  globs = ""
1923  functions = ["range", "__int__", "__float__", "Random", "Input", "__string__", "len", "round", "abs", "sin", "cos", "sqrt", "log10", "set", "list", "tuple", "re.sub", "re.search", "re.findall", "sorted", "min", "max"]
1924  defaultfunc = ["Print"] # TODO handle all default procedures
1925 
1926  if len(subnames) > 0:
1927  globs = "global %s" % ", ".join(subnames)
1928  # search user functions (function calls with two or more arguments need explicit Python parentheses)
1929  ends = __l12n__(_.lng)["END"] # support multiple names of "END"
1930  firstend = ends.split("|")[0]
1931  s = re.sub(r"(?<!:)\b(?:%s)\b" % ends, firstend, s)
1932  __l12n__(_.lng)["END"] = firstend
1933  functions += [ re.findall("(?u)\w+",i[0])[0] for i in re.findall(r"""(?iu)(?<=__def__ )([^\n]*)\n # beginning of a procedure
1934  (?:[^\n]*(?<!\b(%(END)s))\n)* # 0 or more lines (not END)
1935  [^\n]*\b(?:%(OUTPUT)s)\b[^\n]*\n # line with OUTPUT (functions = procedures with OUTPUT)
1936  (?:[^\n]*(?<!\b(?:%(END)s))\n)* # 0 or more lines (not END)
1937  [ \t]*\b(?:%(END)s)\b""" % __l12n__(_.lng), s, re.X) ]
1938  __l12n__(_.lng)["END"] = ends
1939  # add line breaks before procedure calls
1940  procedures = set(subnames) - set(functions)
1941  if len(procedures) > 0:
1942  s = re.sub(r"(?<!__def__)(?<![-+=*/])(?<!%s)(?:^|[ \t]+)(" % ")(?<!".join(functions) + "|".join(procedures) + ")(?!\w)", r"\n\1", s)
1943 
1944  # substitute LibreLogo functions and specifiers with their Python equivalents
1945  for i in __comp__[_.lng]:
1946  s = re.sub(u"(?u)" + i[0], i[1], s)
1947 
1948  indent = 0 # Python indentation level
1949  result = ""
1950  func = re.compile("(?iu)(def (\w+))(\(.*\):)")
1951 
1952  # compile to Python
1953  subroutines = re.compile(r"(?iu)(?<!def )(?<![_\w])\b(%s)\b(?![\w(])" % "|".join(subnames + functions + defaultfunc))
1954  operators = re.compile(r"(?iu)(%s)" % "(?:[ ]*([+*/<>]|//|==|<=|>=|<>|!=)[ ]*|[ ]*-[ ]+|(?<! )-[ ]*|[ ]*[*][*][ ]*)") # operators, eg. " - ", "-", "- "
1955  atoms = re.compile(r"(?iu)(%s)" % "[0-9]+([.,][0-9]+)?|:?\w+([.]\w)?")
1956 
1957  # store argument numbers of all subroutines in dictionary "names"
1958  names = {key: 1 for key in functions + defaultfunc}
1959  names["range"] = names["re.sub"] = 3
1960  names["re.search"] = names["re.findall"] = 2
1961 
1962  # match a function header
1963  search_funcdef = re.compile(r"(^|\n) *(def (\w+))(\([^\n]*\):) *(?=\n)")
1964 
1965  # "multiline" lambda function to process function headers: add commas to argument list and
1966  # add {"subroutine_name": argument_count} into names using a temporary array
1967  # (instead of using global variable "names" and a new global function to process the matching patterns)
1968  # for example: "def f(x y z):" -> "def f(x,y,z):" and names = {"f": 3}
1969  process_funcdef = lambda r: r.group(1) + r.group(2) + \
1970  [chsp.sub(", ", r.group(4)), names.update({r.group(3): len(re.findall(r"\w+", r.group(4)))})][0]
1971  # process all function headers calling process_funcdef for every matching
1972  # (before parsing Logo expressions line by line, we need to know about all functions,
1973  # because functions can be defined in any order, ie. their calls can be before
1974  # their definitions)
1975  s = search_funcdef.sub(process_funcdef, s)
1976 
1977  # process line by line
1978  for i in s.split("\n"):
1979  i = i.strip()
1980 
1981  # convert Logo expressions to Python ones using regex based tokenization
1982  # tokens: {startpos: endpos} dictionaries for subroutine names, operators and other tokens
1983 
1984  # sub: subroutine tokens = positions of Logo subroutine names
1985  # (without explicit parentheses, for example: "f x" or "f (x*2)", but not "f(x)")
1986  sub = {key: value for (key, value) in [j.span() for j in list(subroutines.finditer(i))]}
1987  if sub != {}:
1988  # op: operator tokens
1989  op = {key: value for (key, value) in [j.span() for j in list(operators.finditer(i))]}
1990  # atom: other tokens (variable names, numbers and function names)
1991  atom = {key: value for (key, value) in [j.span() for j in list(atoms.finditer(i))]}
1992  par = {"pos": 0, "out": "", "sub": sub, "op": op, "atom": atom, "names": names}
1993  __l2p__(i, par, False, False)
1994  i = par["out"]
1995  # starting program block
1996  if i[0:1] == '[':
1997  i = i[1:]
1998  indent += 1
1999  # check program stop, for example, in every execution of a loop
2000  result = result + "\n" + " " * indent + "__checkhalt__()\n"
2001  # fix position of ending parenthesis
2002  if i[0:1] == ')':
2003  i = i[1:] + ')'
2004  result = result + "\n" + " " * indent + i
2005  # ending program block
2006  if i[0:1] == ']':
2007  result = result[:-1]
2008  indent -= 1
2009 
2010  # colon_to_underline in Logo variables
2011  result = chch.sub("_", result)
2012 
2013  # character encoding
2014  result = to_ascii(result).replace(r"\n", "\n")
2015 
2016  # decode strings
2017  result = re.sub(__DECODE_STRING_REGEX__, __decodestring__, result)
2018  return to_ascii(globs) + "\n" + result
2019 
2021  _.cursor.collapseToStart()
2022  for i in range(1, n):
2023  _.cursor.gotoNextParagraph(False)
2024  try:
2025  _.doc.CurrentController.getViewCursor().gotoRange(_.cursor, False)
2026  except:
2027  __dispatcher__(".uno:Escape")
2028  _.doc.CurrentController.getViewCursor().gotoRange(_.cursor.getStart(), False)
2029 
2030 g_exportedScripts = left, right, goforward, gobackward, run, stop, home, clearscreen, commandline, __translate__
2031 
2032 # vim: set shiftwidth=4 softtabstop=4 expandtab:
2033 
2034 __lng_fallback__ = {
2035 'ORANGE':{'lt': 'oranžinė', 'sid': 'burtukaane', 'fi': 'oranssi', 'ro': 'orange|portocaliu', 'lv': 'oranžs', 'kn': 'ವ್ಯಾಪ್ತಿ', 'nn': 'oransje|orange', 'tr': 'turuncu', 'es': 'naranja', 'el': 'πορτοκαλί|orange', 'hr': 'narančasta', 'cs': 'oranžová', 'sr_Latn': 'narandžasta', 'he': 'כתום', 'nl': 'oranje', 'hu': 'narancssárga|narancs', 'hi': 'दायरा', 'ml': 'ഓറഞ്ച്', 'gu': 'નારંગી', 'ko': '오렌지', 'zh_TW': '橘黃|橙黃|橙|橘|orange', 'mr': 'नारंगी', 'ru': 'оранжевый', 'sl': 'oranžna', 'bn_IN': 'পরিসর', 'am': 'ብርቱካን', 'et': 'oranž|apelsinikarva', 'uk': 'оранжевий', 'pt_BR': 'laranja', 'kk': 'қызғылт-сары', 'te': 'ఆరెంజ్', 'br': 'orañjez', 'is': 'appelsínugult', 'km': '\u200bទឹក\u200bក្រូច', 'bs': 'narandžasta', 'eu': 'laranja', 'cy': 'oren', 'pa_IN': 'ਰੇਜ਼', 'ast': 'naranxa', 'gug': 'narã', 'vi': 'phạm vi', 'as': 'সুমথীৰা', 'gd': 'orains', 'or': 'କମଳା', 'ja': 'オレンジ|オレンジ色|orange', 'hsb': 'oranžowy', 'nb': 'oransje|orange', 'be': 'аранжавы', 'oc': 'irange', 'gl': 'laranxa', 'ar': 'برتقالي', 'en_US': 'orange', 'sk': 'oblasť', 'sr': 'наранџаста', 'zh_CN': '橙色|橙|orange', 'eo': 'oranĝa', 'ta': 'ஆரஞ்சு', 'ca_valencia': 'taronja', 'ne': 'दायरा', 'ca': 'taronja', 'si': 'පරාසය', 'my': 'ကန့်သတ်နယ်ပယ်', 'ka': 'ფორთოხლისფერი'},
2036 'POINT':{'lt': 'skritulys', 'th': 'จุด', 'sid': 'bixxille', 'fi': 'piste', 'ro': 'point|punct', 'lv': 'punkts', 'kn': 'ಬಿಂದುಗಳು', 'hsb': 'dypk', 'tr': 'nokta', 'es': 'punto', 'el': 'σημείο|point', 'hr': 'točka', 'cs': 'bod|puntík', 'de': 'punkt', 'mn': 'цэг', 'he': 'נקודה', 'nl': 'punt', 'hu': 'pont', 'hi': 'बिंदु', 'ml': 'പോയിന്റ്', 'gu': 'બિંદુ', 'my': 'အမှတ်', 'ko': '점', 'zh_TW': '點|point', 'mr': 'बिंदू', 'ru': 'точка', 'sl': 'točka', 'bn_IN': 'পয়েন্ট', 'am': 'ነጥቦች', 'et': 'punkt', 'uk': 'точка', 'pt_BR': 'ponto', 'kk': 'нүкте', 'te': 'బిందువు', 'br': 'poent', 'is': 'punktur', 'km': 'ចំណុច', 'bs': 'tačka', 'eu': 'puntua', 'cy': 'pwynt', 'pa_IN': 'ਬਿੰਦੂ', 'ast': 'puntu', 'gug': 'kyta', 'vi': 'điểm', 'as': 'বিন্দু', 'gd': 'puing', 'or': 'ବିନ୍ଦୁ', 'ja': '点|point', 'nn': 'punkt|point', 'nb': 'punkt|point', 'be': 'пункт', 'sq': 'pikë', 'oc': 'punt', 'gl': 'punto', 'ar': 'نقطة', 'en_US': 'point', 'sk': 'bod', 'zh_CN': '点|point', 'eo': 'punkto', 'ta': 'புள்ளி', 'ca_valencia': 'punt', 'ne': 'प्वाइन्ट', 'ca': 'punt', 'si': 'ලක්ෂ්\u200dය', 'ug': 'نۇقتا', 'ka': 'წერტილი'},
2037 'LEFTSTRING':{'lt': '„|“|‘', 'hsb': '„|‚|"|\'', 'hu': '„', 'fi': '"|\'|”', 'en_US': '“|‘', 'sk': '„|"', 'nn': '“|‘|«', 'es': '“|‘|«', 'el': '“|‘|"|\'', 'et': '„', 'zh_TW': '「|『|“|‘', 'cs': '„|"', 'de': '„|‚|"|\'', 'zh_CN': '「|『|“|‘'},
2038 'ABS':{'lt': 'ilgis|abs|modulis', 'sid': 'abse', 'ka': 'ტაბულაციები', 'fi': 'itseisarvo', 'br': 'dizave', 'pa_IN': 'ਟੈਬ', 'kn': 'ಟ್ಯಾಬ್\u200cಗಳು', 'hsb': 'absolutny', 'bn_IN': 'ট্যাব', 'el': 'απόλυτο', 'lv': 'modulis', 'tr': 'Sekmeler', 'vi': 'Tab', 'cs': 'absolutní', 'de': 'betrag', 'he': 'ערך מוחלט', 'hu': 'abszolútérték|absz?', 'hi': 'टैब्स', 'ar': 'مطلق', 'en_US': 'abs', 'te': 'టాబ్ లు', 'ko': '탭', 'ne': 'ट्याबहरू', 'zh_TW': '絕對值|abs', 'mr': 'ॲब्स', 'si': 'පටිති', 'zh_CN': '绝对值|abs', 'ja': '絶対値|abs', 'my': 'အကွက်ခုန်များ', 'am': 'ፍጹም', 'et': 'absoluutväärtus|abs'},
2039 'RESUB':{'lt': 'keisk', 'sid': 'cinaancho', 'pt_BR': 'subst', 'fi': 'korvaa', 'br': 'is', 'uk': 'зам', 'lv': 'aizvietot', 'kn': 'ಉಪ', 'nn': 'byt|byt ut|sub', 'ja': '文字のおきかえ|置換|sub', 'el': 'αντικατάσταση', 'cs': 'nahraď', 'de': 'ersetzt', 'nl': 'onderlijn', 'or': 'ଉପ', 'sl': 'zam', 'hsb': 'naruna', 'eu': 'azpi', 'nb': 'bytt|bytt ut|sub', 'hu': 'cserél', 'ar': 'استبدل', 'gu': 'ઉપ', 'en_US': 'sub', 'sk': 'nahraď', 'eo': 'anstataŭu|anst', 'zh_TW': '替換|sub', 'mr': 'सब', 'he': 'שגרה', 'zh_CN': '替换|sub', 'am': 'ንዑስ', 'et': 'asenda'},
2040 'FILLCOLOR':{'lt': 'spalvinimo.spalva|ssp', 'sid': 'kuulawonshi|kuulawonshi|kw', 'fi': 'täyttöväri|tv', 'ro': 'fillcolor|fillcolour|fc|culoareumplere', 'lv': 'pildījuma_krāsa|pk', 'kn': 'ಬಣ್ಣತುಂಬಿಸು|ಬಣ್ಣತುಂಬಿಸು|fc', 'hsb': 'pjelnjacabarba|pb', 'tr': 'renkdoldur|renkdoldur|rd', 'es': 'color.relleno|cr|fc', 'el': 'χρώμαγεμίσματος|χε|fillcolor|fillcolour|fc', 'hr': 'boja punjenja|boja punjenja|bp', 'cs': 'barvavýplně|bv', 'de': 'füllfarbe|ff', 'he': 'צבעמילוי|צמ', 'nl': 'opvulkleur|ok', 'hu': 'töltőszín|töltőszín!|tlsz!?', 'ko': '색상채우기|색상채우기|fc', 'zh_TW': '填入顏色|填入色彩|填色|fillcolor|fillcolour|fc', 'mr': 'फिलकलर|फिलकलर|fc', 'ru': 'цвет_заливки|цз', 'sl': 'barvapolnila|polnilnabarva|bp', 'am': 'ቀለም መሙያ|ቀለም መሙያ|ቀ.መ', 'et': 'täitevärv|tv', 'uk': 'колір_заповнення|кз', 'pt_BR': 'mudarCorDaPintura|mCorPi|mudecp', 'kk': 'толтыру_түсі|тт', 'km': 'ពណ៌\u200bបំពេញ|fillcolour|fc', 'nb': 'fyllfarge|ff|fillcolor', 'bs': 'popuniboju|popuniboju|fc', 'eu': 'betetzekolorea|bk', 'ast': 'colorrellenu|cr', 'gug': "sa'y.henyhe|ch", 'oc': 'coloremplenatge|coloremplenatge|cr', 'or': 'ରଙ୍ଗପୁରଣ|ରଙ୍ଗପୁରଣ|fc', 'ja': '塗りつぶしの色|fillcolor|fc', 'nn': 'fyllfarge|ff|fillcolor', 'fr': 'couleurremplissage|cremplissage|cr', 'gl': 'cambiarcor|cambiodecor|cc', 'ar': 'ملأ_لون', 'en_US': 'fillcolor|fillcolour|fc', 'sk': 'farbavýplne|fv', 'eo': 'pleniga_koloro|plenkoloro|plk', 'ca_valencia': 'color.emplenament|ce', 'ca': 'color.emplenament|ce', 'zh_CN': '填充颜色|填充色|填色|fillcolor|fillcolour|fc'},
2041 'SIN':{'sid': 'sayine', 'pt_BR': 'sen', 'gl': 'sen', 'fi': 'sini', 'ar': 'جا', 'en_US': 'sin', 'sat': 'SIN', 'is': 'sín', 'kok': 'SIN', 'sa_IN': 'SIN', 'es': 'sen', 'el': 'ημίτονο|sin', 'mr': 'साइन', 'ast': 'sen', 'dgo': 'SIN', 'gug': 'sen', 'zh_TW': '正弦|sin', 'zh_CN': '正弦|sin', 'am': 'ሳይን', 'he': 'סינוס'},
2042 'BEVEL':{'lt': 'nuožulnus', 'sid': 'beevele', 'fi': 'viisto', 'ro': 'bevel|teșit', 'lv': 'nošķelts', 'kn': 'ಸ್ತರ', 'hsb': 'nakósny', 'tr': 'eğim', 'es': 'bisel', 'el': 'λοξό|bevel', 'hr': 'nagib', 'cs': 'šikmé', 'de': 'schräg', 'he': 'קטום', 'nl': 'afschuinen', 'hu': 'tompa', 'hi': 'स्तर', 'ml': 'തലം', 'gu': 'સ્તર', 'my': 'အဆင့်', 'ko': '수준', 'zh_TW': '平角|bevel', 'mr': 'बेवेल', 'ru': 'скос', 'sl': 'vbočeno', 'bn_IN': 'স্তর', 'am': 'ስላሽ', 'et': 'faasitud', 'uk': 'скіс', 'pt_BR': 'cortado', 'kk': 'көлбеу', 'te': 'స్థాయి', 'br': 'beskell', 'is': 'flái', 'km': 'ជ្រុង\u200bទេរ', 'nb': 'skråkant|bevel', 'bs': 'kosina', 'eu': 'alakatua', 'cy': 'befel', 'pa_IN': 'ਲੈਵਲ', 'ast': 'moldura', 'gug': 'bisel', 'vi': 'Cấp', 'or': 'ସ୍ତର', 'gd': 'beibheal', 'ja': '角を落とす|bevel', 'nn': 'skråkant|bevel', 'fr': 'biseau', 'be': 'скос', 'oc': 'bisèl', 'gl': 'bisel', 'ar': 'مشطوف', 'ug': 'يانتۇ يۈز', 'sk': 'šikmé', 'zh_CN': '平角|bevel', 'eo': 'bivela', 'ta': 'பெவல்', 'ca_valencia': 'bisell', 'ne': 'स्तर', 'ca': 'bisell', 'si': 'මට්ටම', 'en_US': 'bevel', 'ka': 'დონე'},
2043 'OUTPUT':{'lt': 'grąžink|išvesk', 'sid': 'guma', 'fi': 'kirjoita', 'ro': 'output|ieșire', 'lv': 'izvade', 'kn': 'ಔಟ್\u200cಪುಟ್', 'hsb': 'wudaće', 'tr': 'çıktı', 'es': 'salida', 'el': 'έξοδος|output', 'hr': 'rezultat', 'cs': 'výsledek', 'de': 'rückgabe', 'he': 'פלט', 'nl': 'output|uitvoer', 'hu': 'eredmény', 'hi': 'आउटपुट', 'ml': 'ഔട്ട്പുട്ട്', 'gu': 'આઉટપુટ', 'ko': '출력', 'zh_TW': '輸出|output', 'mr': 'आउटपुट', 'ru': 'вывод', 'sl': 'izhod', 'bn_IN': 'আউটপুট', 'am': 'ውጤት', 'et': 'väljund', 'uk': 'вивести', 'pt_BR': 'retornar|retorne|devolver|devolva|envie', 'kk': 'шығыс', 'te': 'అవుట్పుట్', 'br': "ec'hankad", 'is': 'frálag', 'km': 'លទ្ធផល', 'nb': 'utdata|output', 'bs': 'izlaz', 'eu': 'Irteera', 'cy': 'allbwn', 'pa_IN': 'ਆਉਟਪੁੱਟ', 'ast': 'salida', 'gug': 'ñeseha', 'vi': 'Đầu ra', 'as': 'আউটপুট', 'or': 'ଫଳାଫଳ', 'ja': '値を返す|output', 'nn': 'utdata|output', 'fr': 'sortie', 'oc': 'sortida', 'gl': 'saída', 'ar': 'أخرِج', 'en_US': 'output', 'sk': 'Výstup', 'zh_CN': '输出|output', 'eo': 'eligaĵo', 'ta': 'வெளியீடு', 'ca_valencia': 'eixida', 'ne': 'निर्गत', 'ca': 'sortida', 'si': 'ප්\u200dරතිදානය', 'my': 'အထုတ်', 'ka': 'გამონატანი'},
2044 'TUPLE':{'sid': 'tupile', 'ja': '変更できないリスト|タプル|tuple', 'pt_BR': 'tupla', 'kk': 'кортеж', 'fi': 'pari', 'br': 'kemalenn', 'eo': 'opo', 'ro': 'tuple|fix', 'uk': 'кортеж', 'lv': 'kortežs', 'kn': 'ಟಪಲ್', 'hsb': 'tupl', 'tr': 'tüp', 'es': 'tupla', 'be': 'картэж', 'el': 'πλειάδα|tuple', 'ast': 'tupla', 'gug': 'tupla', 'cs': 'ntice', 'de': 'tupel', 'nl': 'tuple|tupel', 'bs': 'pobrojane', 'he': 'סדרהסדורה', 'eu': 'tuploa', 'hu': 'fix', 'gl': 'tupla', 'ca': 'tupla', 'gu': 'ટપલ', 'en_US': 'tuple', 'sk': 'ntica', 'ko': '튜플', 'or': 'ଟ୍ୟୁପଲ', 'ca_valencia': 'tupla', 'zh_TW': '元組|tuple', 'et': 'ennik|korteež', 'ru': 'кортеж', 'sl': 'par', 'zh_CN': '元组|tuple', 'am': 'ቱፕል', 'mr': 'टपल'},
2045 'ANY':{'lt': 'bet.kas', 'th': 'ใดๆ', 'sid': 'ayee', 'fi': 'jokin', 'ro': 'any|oricare', 'lv': 'jebkurš', 'kn': 'ಯಾವುದಾದರೂ', 'hsb': 'někajki', 'tr': 'herhangi', 'es': 'cualquiera', 'vec': 'calsiasi', 'el': 'όλα|any', 'hr': 'bilo koja', 'cs': 'libovolně|lib', 'de': 'beliebig|bel', 'mn': 'хамаагүй|хам', 'he': 'כלשהו', 'nl': 'elke', 'hu': 'tetszőleges|tetsz', 'hi': 'कोई भी', 'ml': 'ഏതെങ്കിലും', 'gu': 'કોઇપણ', 'ko': '모두', 'sd': 'ڪابە', 'zh_TW': '任一|any', 'mr': 'कोणतेहि', 'sat': 'जाहां गे', 'ru': 'любой', 'sl': 'poljubno', 'sa_IN': 'कांह तॊ', 'bn_IN': 'যেকোনো', 'am': 'ማንኛውም', 'et': 'mistahes', 'uk': 'довільний', 'pt_BR': 'qualquer', 'kk': 'кез-келген', 'te': 'ఏదైనా', 'km': 'ណាមួយ', 'nb': 'alle|any', 'kok': 'कोणूयKoncheim', 'bs': 'bilo koji', 'eu': 'edozein', 'cy': 'unrhyw un', 'pa_IN': 'ਕੋਈ ਵੀ', 'ast': 'cualquier', 'gug': 'mavave', 'as': 'যিকোনো', 'gd': 'gin', 'or': 'ଯେକୌଣସି', 'ja': 'なんでも|どこでも|乱数|any', 'nn': 'alle|any', 'fr': 'tout', 'gl': 'calquera', 'ar': 'أي', 'en_US': 'any', 'sk': 'ľubovoľný|?', 'eo': 'ajna', 'ca_valencia': 'qualsevol', 'ca': 'qualsevol', 'dgo': 'कोई बी', 'zh_CN': '任意|any'},
2046 'GOLD':{'lt': 'auksinė', 'th': 'ทอง', 'sid': 'clka', 'fi': 'kulta', 'ro': 'gold|auriu', 'lv': 'zelta', 'kn': 'ಬೋಲ್ಡ್\u200d', 'nn': 'gull|gold', 'tr': 'altın rengi', 'es': 'oro', 'el': 'χρυσαφί|gold', 'hr': 'zlatna', 'cs': 'zlatá', 'sr_Latn': 'zlatna', 'he': 'זהב', 'nl': 'goud', 'hu': 'aranysárga|arany', 'hi': 'मोटा', 'ml': 'സ്വര്\u200dണ്ണം', 'gu': 'સોનુ', 'ko': '금색', 'zh_TW': '金黃|金|gold', 'mr': 'सोनेरी', 'ru': 'золотой', 'sl': 'zlata', 'bn_IN': 'গাঢ়', 'am': 'ወርቅማ', 'et': 'kuldne', 'uk': 'золотий', 'pt_BR': 'ouro', 'kk': 'алтын', 'te': 'బంగారం', 'br': 'aour', 'is': 'gull', 'km': 'មាស', 'nb': 'gull|gold', 'bs': 'zlatna', 'eu': 'urrea', 'cy': 'aur', 'pa_IN': 'ਗੂੜ੍ਹੇ', 'ast': 'doráu', 'gug': 'oro', 'vi': 'Đậm', 'as': 'সোন', 'gd': 'òir', 'or': 'ସ୍ୱର୍ଣ୍ଣ', 'ja': '金|金色|gold', 'hsb': 'złoty', 'fr': 'or', 'be': 'залаты', 'oc': 'aur', 'gl': 'ouro', 'ar': 'ذهبي', 'en_US': 'gold', 'sk': 'Tučné', 'sr': 'златна', 'zh_CN': '金色|金|gold', 'eo': 'ora', 'ta': 'தங்கம்', 'ca_valencia': 'or|daurat', 'ne': 'बाक्लो', 'ca': 'or|daurat', 'si': 'තදකුරු', 'my': 'စာလုံးမဲ', 'ka': 'შეკვრა'},
2047 'NOT':{'lt': 'priešingai', 'sid': "dee'ni", 'fi': 'ei', 'ro': 'not|nu', 'lv': 'nav', 'kn': 'ಇಲ್ಲ', 'hsb': 'nic', 'tr': 'değil', 'es': 'no', 'el': 'όχι|not', 'hr': 'nije', 'cs': 'není', 'de': 'nicht', 'he': 'לא', 'nl': 'niet', 'hu': 'nem', 'hi': 'नहीं', 'gu': 'નથી', 'ko': '없음', 'sd': 'NOT', 'zh_TW': '非|not', 'mr': 'नॉट', 'sat': 'NOT', 'ru': 'не', 'sl': 'ni', 'sa_IN': 'NOT', 'bn_IN': 'নয়', 'am': 'አይደለም', 'et': 'pole|mitte', 'uk': 'не', 'pt_BR': 'não', 'kk': 'емес', 'te': 'కాదు', 'br': 'ket', 'is': 'ekki', 'nb': 'ikke|not', 'kok': 'NOT', 'bs': 'ne', 'eu': 'ez', 'ast': 'non', 'gug': 'no', 'or': 'ନୁହଁ', 'gd': 'chan e', 'ja': '正しくない|否|not', 'nn': 'ikkje|not', 'fr': 'non', 'gl': 'non', 'ar': 'ليس', 'en_US': 'not', 'sk': 'nieje', 'zh_CN': '非|not', 'eo': 'ne', 'ca_valencia': 'no', 'ca': 'no', 'dgo': 'NOT', 'oc': 'non'},
2048 'PENUP':{'lt': 'eisim|es|pakelk.pieštuką|pakelk.trintuką', 'th': 'ปากกาขึ้น|pu', 'sid': 'biireworora|bw', 'fi': 'kynäylös|ky', 'ro': 'penup|pu|stilousus', 'lv': 'pacelt_spalvu|ps', 'kn': 'ಲೇಖನಿಎತ್ತು|pu', 'hsb': 'lećeć|le', 'tr': 'kalemyukarı|ky', 'es': 'sinpluma|subirlapiz|sp|sl', 'el': 'γραφίδαπάνω|γπ|penup|pu', 'hr': 'olovka gore|og', 'cs': 'peronahoru|pn', 'de': 'fliegen', 'he': 'להריםעט|עטלמעלה|הרםעט|לע', 'nl': 'penomhoog|po', 'hu': 'tollatfel|tf', 'ko': '펜을위로|pu', 'zh_TW': '提筆|penup|pu', 'mr': 'पेनअप|pu', 'ru': 'поднять_перо|пп', 'sl': 'perogor|pg', 'am': 'ብዕር ወደ ላይ |pu', 'et': 'pliiats_üles|pü', 'uk': 'підніми_перо|пп', 'pt_BR': 'usarNada|un|useNada', 'kk': 'қаламды_көтеру|қк', 'nb': 'penn opp|po|penup', 'bs': 'pengore|pu', 'eu': 'lumagora|lg', 'ast': 'llapizxubir|lx', 'gug': "bolígrafo'ỹre|bỹ", 'or': 'ପେନଉପରକୁ|pu', 'ja': 'ペンをあげる|penup|pu', 'nn': 'penn opp|po|penup', 'fr': 'levecrayon|lc', 'gl': 'senestilo|se', 'ar': 'ارفع_القلم|ارفع', 'en_US': 'penup|pu', 'sk': 'perohore|ph', 'eo': 'plumofor|pf', 'ca_valencia': 'aixeca.llapis|al', 'ca': 'aixeca.llapis|al', 'zh_CN': '提笔|抬笔|penup|pu'},
2049 'FONTFAMILY':{'lt': 'garnitūras|šriftų.šeima|šš', 'sid': 'borangichumine', 'fi': 'fonttiperhe', 'ro': 'fontfamily|familiefont', 'lv': 'fontu_saime', 'kn': 'ಅಕ್ಷರಶೈಲಿಸಮೂಹ', 'hsb': 'družinapisma|dp', 'es': 'tipo.letra|letra|fuente', 'el': 'οικογένειαγραμματοσειράς|fontfamily', 'hr': 'skupina fontova', 'cs': 'druhpísma', 'de': 'schriftart|scha', 'he': 'משפחתגופנים', 'nl': 'tekstfamilie', 'hu': 'betűcsalád', 'gu': 'ફોન્ટકુટુંબ', 'ko': '글꼴 모음', 'zh_TW': '字型家族|字族|fontfamily', 'mr': 'फाँटफॅमिलि', 'ru': 'семейство_шрифтов', 'sl': 'vrstapisave', 'am': 'የፊደል ቤተሰብ', 'et': 'fondi_perekond', 'uk': 'гарнітура', 'pt_BR': 'mudarTipoDaLetra|mTipLe', 'kk': 'қаріптер_отбасы', 'te': 'ఫాంట్\u200cఫ్యామిలీ', 'br': 'spletad nodrezhoù', 'is': 'leturtegund', 'km': 'ក្រុម\u200bពុម្ពអក្សរ', 'nb': 'skriftfamilie|fontfamily', 'bs': 'fontfamilija', 'eu': 'letrafamilia', 'ast': 'familiafonte', 'tr': 'yazıtipi ailesi', 'or': 'ଅକ୍ଷରରୂପ ପରିବାର', 'gd': "teaghlach a' chruth-chlò", 'ja': '文字の種類|フォントファミリー|fontfamily', 'nn': 'skriftfamilie|fontfamily', 'fr': 'famillepolice', 'be': 'гарнітура', 'gl': 'familia de tipo de letra', 'ar': 'عائلة_خط', 'en_US': 'fontfamily', 'sk': 'druhpísma|dp', 'eo': 'tiparofamilio', 'ta': 'எழுத்துரு குடும்பம்', 'ca_valencia': 'família.lletra|fl', 'ca': 'família.lletra|fl', 'zh_CN': '字体|字体家族|字型|fontfamily'},
2050 'PENJOINT':{'lt': 'pieštuko.sujungimas|linijos.sujungimas|psj', 'sid': 'biiretexaado|xuruuruxaado', 'ja': 'ペンのつなぎ方|角のつなぎ方|penjoint', 'pt_BR': 'mudarCantoDaLinha|mCanLi', 'kk': 'қаламды_біріктіру|сызықтарды_біріктіру', 'fi': 'kynänmuoto', 'eo': 'liniartiko|plumligo', 'ro': 'penjoint|linejoint|colțstilou', 'fr': 'jointurestylo|jointureligne', 'lv': 'spalvas_salaidums|līnijas_salaidums', 'kn': 'ಲೇಖನಿಜೋಡಣೆ|ರೇಖೆಜೋಡಣೆ', 'eu': 'lumajuntura|marrajuntura', 'hr': 'spoj olovke|spoj linije', 'es': 'conjuntopluma|conjuntolínea', 'ca': 'unió.llapis|unió.línia|ul', 'el': 'ένωσηγραφίδας|ένωσηγραμμής|penjoint|linejoint', 'pa_IN': 'ਪੈੱਨ ਜੁਆਇੰਟIਲਾਈਨ ਜੁਆਇੰਟ', 'uk': 'сполучити_перо|сполучити_лінії', 'gug': 'atybolígrafo|atylínea', 'cs': 'napojenípera|napojeníčáry', 'de': 'stiftübergang|linienübergang|sü|lü', 'tr': 'kalembirleşimi|satırbirleşimi', 'nl': 'penverbinding|lijnverbinding', 'bs': 'vezaolovke|vezalinije', 'he': 'מצרףעט|מצרףקו', 'hsb': 'přechodpisaka|přechodlinije|pp|pl', 'nn': 'linjekopling|penjoint', 'nb': 'linjekobling|penjoint', 'hu': 'tollsarok|vonalsarok', 'gl': 'estilounión|uniónliña', 'en_US': 'penjoint|linejoint', 'sk': 'napojeniepera|napojeniečiary|np|nč', 'ko': '펜조인트|선조인트', 'or': 'ପେନସନ୍ଧି|linejoint', 'ca_valencia': 'unió.llapis|unió.línia|ul', 'zh_TW': '筆接點|線接點|線接|penjoint|linejoint', 'mr': 'पेनजॉइंट|लाइनजॉइंट', 'ast': 'llapizxunir|lliniaxunir|lx', 'ru': 'соединить_перо|соединить_линии', 'sl': 'stikperesa|stikčrt', 'zh_CN': '笔接点|线接点|线接|penjoint|linejoint', 'am': 'የብዕር መገናኛ |የመስመር መገናኛ', 'et': 'pliiatsiühendus|jooneühendus'},
2051 'PI':{'sid': 'payi|π', 'be': 'pi|пі|π', 'kk': 'pi|пи|π', 'gl': 'pi|n', 'fi': 'pii|π', 'ar': 'ط|باي|π', 'en_US': 'pi|π', 'uk': 'pi|пі|π', 'ko': '파이|π', 'el': 'πι|pi|π', 'et': 'pii|π', 'zh_TW': 'pi|π|拍', 'ru': 'pi|пи|π', 'ja': '円周率|pi|π', 'mr': 'पाय|π', 'zh_CN': '圆周率|pi|π', 'am': 'ፓይ|π', 'he': 'פאי|פיי'},
2052 'NONE':{'fi': 'eimitään', 'kn': 'ಏನೂ ಇಲ್ಲ', 'xh': 'akukho', 'hr': 'ništa', 'de': 'kein', 'he': 'ללא', 'nl': 'geen', 'hu': 'nincs', 'ml': 'ഒന്നുമില്ല', 'st': 'ha di teng', 'ko': '없음', 'mr': 'काहीही नाही', 'mai': 'किछु नहि', 'am': 'ምንም', 'et': 'puudub', 'kk': 'жоқ', 'te': 'ఏదీ కాదు', 'af': 'geen', 'tg': 'ягон', 'km': 'គ្មាន', 'fr': 'aucun(e)', 'kok': 'कोण ना', 'eu': 'bat ere ez', 'pa_IN': 'ਕੋਈ ਨਹੀਂ', 'gug': 'mavave', 'vi': 'không có', 'lo': 'ບໍ່ມີ', 'gd': 'chan eil gin', 'rw': 'ntacyo', 'hsb': 'žadyn', 'nb': 'ingen|none', 'be': 'няма', 'sq': 'asnjë', 'om': 'homaa', 'ug': 'يوق', 'sk': 'žiadne', 'br': 'tra ebet', 'ta': 'ஏதுமில்லை', 'dgo': 'कोई नेईं', 'en_US': 'none', 'lt': 'nieko', 'th': 'ไม่มี', 'sid': 'dino', 'zu': 'lutho', 'mk': 'Нема', 'ro': 'none|nimic', 'lv': 'nav', 'as': 'কোনো নহয়', 'nn': 'ingen|none', 'es': 'ninguno', 'vec': 'njanca uno', 'el': 'κανένα', 'dz': 'ཅི་མེད།', 'tn': 'sepe', 'cs': 'žádné', 'sl': 'brez', 'hi': 'कोई नहीं', 'gu': 'કંઇ નહિં', 've': 'a huna', 'or': 'କିଛି ନାହିଁ', 'sd': 'ڪجهہ بہ نہ', 'zh_TW': '無|none', 'sat': 'ओका हों बाङजाहानाक् बाङ', 'bo': 'མེད་པ།', 'ru': 'нет', 'nso': 'ga go na selo', 'bn_IN': 'কোনটি না', 'uk': 'немає', 'kmr_Latn': 'ne yek jî', 'pt_BR': 'nenhum', 'bn': 'কোনটি না', 'is': 'ekkert', 'bs': 'ništa', 'sa_IN': 'न कोऽपि', 'sw_TZ': 'bila', 'ks': 'كہین نئ', 'my': 'မရှိပါ', 'ast': 'dengún', 'tr': 'hiçbiri', 'brx': 'रावबो नङा', 'mn': 'байхгүй', 'lb': 'keen', 'ja': 'つながない|none', 'cy': 'dim', 'fa': 'هیچ\u200cکدام', 'gl': 'ningún', 'ar': 'بلا', 'oc': 'pas cap', 'zh_CN': '无|none', 'eo': 'neniu', 'ca_valencia': 'cap', 'ne': 'कुनै पनि होइन', 'ca': 'cap', 'si': 'කිසිවක් නැත', 'ts': 'ku hava', 'uz': 'yoʻq', 'mni': 'অমত্তা নত্তবা', 'ka': 'ცარიელი'},
2053 'FILLSTYLE':{'lt': 'spalvinimo.stilius|sst', 'th': 'กระบวนแบบการเติมสี', 'sid': 'akatawonshi', 'fi': 'täyttötyyli', 'ro': 'fillstyle|stilumplere', 'lv': 'pildījuma_stils', 'kn': 'ತುಂಬಿಸುವ ಶೈಲಿ', 'hsb': 'pjelnjenskistil|ps', 'tr': 'dolgu biçemi', 'es': 'estilorelleno', 'el': 'μορφήγεμίσματος|fillstyle', 'hr': 'stil ispune', 'cs': 'druhvýplně', 'de': 'füllstil|fs', 'he': 'סגנון מילוי', 'nl': 'vulling', 'hu': 'töltőstílus', 'hi': 'भरने की शैली', 'ml': 'നിറയ്ക്കുന്ന ശൈലി', 'id': 'fontcolor|textcolor|textcolour', 'gu': 'ભરવાની શૈલી', 'my': 'စတိုင်လ် ဖြည့်ပါ', 'ko': '채우기 스타일', 'zh_TW': '填入樣式|填樣式|fillstyle', 'mr': 'भरण्याची शैली', 'ru': 'стиль_заливки', 'sl': 'slogpolnila', 'bn_IN': 'ভরাট শৈলী', 'am': 'መሙያ ዘዴ', 'et': 'täitestiil', 'uk': 'стиль_заповнення', 'pt_BR': 'mudarEstiloDaPintura|mEstPi', 'kk': 'толтыру_түрі', 'te': 'నింపు శైలి', 'br': 'stil leuniañ', 'is': 'stíll fyllingar', 'km': 'រចនាប័ទ្ម\u200b\u200bបំពេញ', 'nb': 'fyllstil|fillstyle', 'bs': 'stil popunjavanja', 'eu': 'betetzeestiloa', 'pa_IN': 'ਭਰਨ ਸਟਾਈਲ', 'ast': 'estiluderrellenu', 'gug': 'estilohenyhe', 'vi': 'Kiểu tô đầy', 'or': 'ଶୌଳୀ ପୁରଣ କର', 'gd': 'stoidhle an lìonaidh', 'ja': '塗りつぶしの模様|fillstyle', 'nn': 'fyllstil|fillstyle', 'fr': 'styleremplissage', 'oc': "Estil d'emplenament", 'gl': 'estilo de recheo', 'ar': 'نمط_الملأ', 'ug': 'تولدۇرۇش ئۇسلۇبى', 'sk': 'Výplň', 'zh_CN': '填充样式|填样式|填式|fillstyle', 'eo': 'pleniga_stilo', 'ca_valencia': 'estil.emplenament|ee', 'ne': 'शैली भर्नुहोस्', 'ca': 'estil.emplenament|ee', 'si': 'පිරවුම් රටාව', 'en_US': 'fillstyle', 'ka': 'ჩასხმის სტილი'},
2054 'FONTWEIGHT':{'lt': 'šrifto.storis|teksto.storis', 'sid': 'brrangichu ayirreenya', 'fi': 'fontinpaksuus', 'ro': 'fontweight|grosimefont', 'lv': 'fonta_treknums', 'kn': 'ಅಕ್ಷರಶೈಲಿ ತೂಕ', 'hsb': 'pismowawaha|pw', 'es': 'peso.letra|pl', 'el': 'πάχοςγραμματοσειράς|fontweight', 'hr': 'debljina slova', 'cs': 'tloušťkapísma', 'de': 'schriftgewicht|schgw', 'he': 'משקלגופן', 'nl': 'letterdikte|tekstdikte', 'hu': 'betűvastagság', 'hi': 'फ़ॉन्ट भार', 'ml': 'ഫോണ്ഡിന്റെ തൂക്കം', 'gu': 'ફોન્ટનો ભાર', 'my': 'စာလုံး အလေးချိန်', 'ko': '글꼴 굵기', 'zh_TW': '字型重量|字重|字粗細|字粗|fontweight', 'mr': 'फाँटचे वजन', 'ru': 'толщина_шрифта', 'sl': 'debelinapisave', 'bn_IN': 'ফন্টের পুরুত্ব', 'am': 'የፊደል ክብደት', 'et': 'fondi_paksus', 'uk': 'товщина_символів', 'pt_BR': 'mudarEspessuraDaLetra|mEspLe', 'kk': 'қаріп_жуандығы', 'te': 'అక్షరశైలి భారం', 'br': 'lard', 'is': 'leturbreidd', 'km': 'កម្រាស់\u200bពុម្ពអក្សរ', 'nb': 'skrifttykkelse|fontweight', 'bs': 'težinafonta', 'eu': 'letralodiera', 'cy': 'pwysau ffont', 'pa_IN': 'ਫੋਂਟ ਗੂੜਾਪਨ', 'ast': 'pesudefonte', 'tr': 'yazı tipi genişliği', 'vi': 'Độ đậm chữ', 'or': 'ଅକ୍ଷରରୂପ ଉଚ୍ଚତା', 'ja': '文字の太さ|フォントの太さ|fontweight', 'nn': 'skrifttjukkleik|fontweight', 'fr': 'graisse', 'oc': 'Graissa', 'gl': 'grosura de tipo de letra', 'ar': 'عرض_الخط', 'ug': 'خەت نۇسخا ئىنچىكە توملۇقى', 'sk': 'Váha písma', 'zh_CN': '字体粗细|字粗细|字粗|fontweight', 'eo': 'tiparopezo', 'ta': 'எழுத்துரு தடிமன்', 'ca_valencia': 'pes.lletra|pl', 'ne': 'फन्ट वजन', 'ca': 'pes.lletra|pl', 'si': 'අකුරු බර', 'en_US': 'fontweight', 'ka': 'შრიფტის სიგანე'},
2055 'POSITION':{'lt': 'eik.į', 'sid': 'ofolla|ofo|ofoqineessi', 'fi': 'paikka', 'ro': 'position|pos|setpos|poziție', 'lv': 'pozīcija|poz|iest_poz', 'kn': 'ಸ್ಥಾನ|pos|ಸ್ಥಾನಹೊಂದಿಸು', 'hsb': 'pozicija|poz', 'es': 'posición|pos|fijar.posición', 'el': 'θέση|θσ|ορισμόςθέσης|βάλε|position|pos|setpos', 'hr': 'pozicija|poz|postavipoz', 'cs': 'pozice|poz|nastavpoz', 'de': 'position|pos', 'he': 'מיקום|מקום|הגדרמקום|הגדרתמקום|מקו', 'nl': 'positie|pos|setpos', 'hu': 'hely|hely!|pozíció|xy!', 'ko': '위치|pos|위치설정', 'zh_TW': '位置|定位|position|pos|setpos', 'mr': 'स्थान|पॉस|सेटपॉस', 'ru': 'позиция|поз|установить_позицию', 'sl': 'položaj|pol|določipoložaj', 'am': 'ቦታ|ቦታ|ቦታ ማሰናጃ', 'et': 'asukoht|koht|määra_koht', 'uk': 'позиція|поз|встановити_позицію', 'pt_BR': 'posicionar|pos', 'kk': 'орны|орн|орнын_көрсету', 'br': "lec'hiadur|pos|setpos", 'nb': 'plassering|plasser|position', 'bs': 'pozicija|pos|postavipos', 'eu': 'posizioa|pos|ezarriposizioa', 'ast': 'posición|pos|dirposición', 'tr': 'konum|knm|knmayarla', 'oc': 'posicion|pos|definirpos', 'or': 'ସ୍ଥାନ|pos|setpos', 'ja': '位置|場所|position', 'nn': 'plassering|plasser|pos|position', 'fr': 'position|pos|fixepos', 'gl': 'posición|pos|estabelecerposición', 'ar': 'موقع|عين_موقع', 'en_US': 'position|pos|setpos', 'sk': 'pozícia|poz|nastavpoz|np', 'eo': 'pozicio|poz', 'ca_valencia': 'posició|pos|estableix.posició', 'ca': 'posició|pos|estableix.posició', 'zh_CN': '位置|定位|position|pos|setpos'},
2056 'STOP':{'lt': 'baik', 'sid': 'uurri', 'fi': 'pysäytä', 'lv': 'apturēt', 'kn': 'ನಿಲ್ಲಿಸು', 'hsb': 'stój', 'tr': 'dur', 'es': 'detener', 'el': 'τερματισμός|stop', 'hr': 'zaustavi', 'cs': 'zastav', 'de': 'stopp', 'he': 'עצור|עצירה|לעצור', 'hu': 'stop|visszatér', 'hi': 'रोकें', 'ml': 'നിര്\u200dത്തുക', 'gu': 'અટકાવો', 'ko': '중지', 'sd': 'رُڪو', 'zh_TW': '中止|止|stop', 'mr': 'स्टॉप', 'ru': 'стоп', 'sl': 'ustavi', 'sa_IN': 'ठॆहर', 'bn_IN': 'থামান', 'am': 'ማስቆሚያ', 'et': 'peata', 'uk': 'зупини', 'pt_BR': 'parar|pare', 'kk': 'тоқтату', 'te': 'ఆపుము', 'br': 'arsaviñ', 'is': 'stöðva', 'km': 'បញ្ឈប់', 'bs': 'zaustavi', 'eu': 'gelditu', 'cy': 'atal', 'pa_IN': 'ਰੋਕੋ', 'ast': 'parar', 'gug': 'pyta', 'oc': 'arrestar', 'as': 'বন্ধ কৰক', 'gd': 'sguir', 'or': 'ବନ୍ଦ କର', 'ja': '動きから出る|stop', 'nn': 'stopp|stop', 'nb': 'stopp|stop', 'gl': 'parar', 'ar': 'أوقف', 'en_US': 'stop', 'sk': 'zastav', 'zh_CN': '停止|中止|stop', 'eo': 'haltu', 'ta': 'நிறுத்து', 'ca_valencia': 'atura|para', 'ca': 'atura|para', 'dgo': 'रोको', 'my': 'ရပ်ပါ'},
2057 'DASH':{'lt': 'brūkšneliai', 'th': 'เส้นประ', 'sid': 'daashshaamo', 'fi': 'katkonainen', 'ro': 'dashed|culiniuțe', 'lv': 'svītrots', 'kn': 'ಅಡ್ಡಗೆರೆಗಳುಳ್ಳ', 'hsb': 'smužkowany', 'tr': 'kesik çizgi', 'es': 'discontinua', 'el': 'με παύλες|dashed', 'hr': 'iscrtkano', 'cs': 'čárkovaná', 'de': 'gestrichelt', 'he': 'מיקוף', 'nl': 'gestreept', 'hu': 'szaggatott', 'hi': 'डैश किया हुआ', 'ml': 'ഡാഷ്ഡ്', 'gu': 'તૂટક', 'my': 'မျဉ်းရှည်', 'ko': '파선', 'zh_TW': '虛線|dashed', 'mr': 'डॅश्ड', 'ru': 'штриховая', 'sl': 'črtkano', 'bn_IN': 'ড্যাশযুক্ত', 'am': 'ዳሽ', 'et': 'kriipsudega', 'uk': 'штрихова', 'pt_BR': 'tracejado', 'kk': 'штрихті', 'te': 'గీతగీయబడెను', 'br': 'gourzhelloù', 'is': 'strikað', 'km': '\u200bដាច់ៗ', 'nb': 'stiplet|dashed', 'bs': 'isprekidano', 'eu': 'marratua', 'cy': 'toredig', 'pa_IN': 'ਧਾਰੀਦਾਰ', 'ast': 'discontinuu', 'gug': 'discontinua', 'vi': 'Gạch gạch', 'as': 'ডেশ্বযুক্ত', 'gd': 'strìochagach', 'or': 'ଡାସ', 'ja': '破線|dashed', 'nn': 'stipla|streka|dashed', 'fr': 'tiret', 'be': 'рыскі', 'oc': 'jonhent', 'gl': 'raiado', 'ar': 'متقطع', 'en_US': 'dashed', 'sk': 'Čiarky', 'zh_CN': '虚线|dashed', 'eo': 'streketa', 'ta': 'டேஷ்', 'ca_valencia': 'traçat', 'ne': 'ड्यासभएको', 'ca': 'traçat', 'si': 'ඉරි යෙදූ', 'ug': 'سىزىقچە', 'ka': 'წყვეტილი'},
2058 'TEAL':{'lt': 'tamsiai.žydra', 'sid': 'shiima dakiyye', 'fi': 'sinivihreä', 'lv': 'zilzaļš', 'kn': 'ಗಾಢನೀಲಿಹಸಿರು', 'nn': 'mørk grønblå|teal', 'tr': 'deniz mavisi', 'es': 'jade', 'vec': 'grizo-verde', 'el': 'γαλαζοπράσινο|teal', 'hr': 'tirkizna', 'cs': 'zelenomodrá', 'sr_Latn': 'til', 'he': 'צהבהב', 'nl': 'groenblauw|blauwgroen', 'de': 'blaugrün', 'hi': 'हरा-नीला', 'gu': 'બતક', 'zh_TW': '藍綠|teal', 'mr': 'टिअल', 'ru': 'сине-зелёный', 'sl': 'modrozelena', 'bn_IN': 'টিল', 'am': 'ቲል', 'et': 'sinakasroheline', 'uk': 'синьо-зелений', 'pt_BR': 'turquesa', 'kk': 'жасыл_көк', 'te': 'టీల్', 'br': 'houad', 'is': 'djúp-blágrænt', 'km': 'ខៀវ\u200bបៃតង\u200bក្រមៅ', 'nb': 'mørk grønnblå|teal', 'bs': 'grogotovac', 'eu': 'anila', 'hu': 'kékeszöld', 'ast': 'xade', 'gug': 'aky-hovyha', 'as': 'টিল', 'gd': 'dath na crann-lach', 'or': 'କଳହଂସ', 'ja': 'マガモ色|くすんで暗い青|ティール|teal', 'hsb': 'módrozeleny', 'fr': 'bleuclair', 'be': 'бірузовы', 'gl': 'turquesa', 'ar': 'أزرق_مخضر', 'en_US': 'teal', 'sk': 'tyrkysová', 'sr': 'тил', 'zh_CN': '蓝绿色|蓝绿|teal', 'eo': 'bluverda', 'ta': 'டீல்', 'ca_valencia': 'jade', 'ca': 'jade', 'oc': 'baluclar'},
2059 'FILLTRANSPARENCY':{'lt': 'spalvinimo.skaidrumas|ssk', 'uk': 'прозорість_заповнення', 'ja': '塗りつぶしの透明度|filltransparency', 'pt_BR': 'mudarTransparênciaDaPintura|mTraPi', 'kk': 'толтыру_мөлдірлілігі', 'fi': 'täyttöläpinäkyvyys', 'br': 'boullderleuniañ', 'km': 'បំពេញ\u200bភាព\u200bថ្លា', 'fr': 'transparenceremplir', 'pa_IN': 'ਪਾਰਦਰਸ਼ਤਾ ਭਰੋ', 'kn': 'ಪಾರದರ್ಶಕತೆಭರ್ತಿಮಾಡು', 'eu': 'betetzegardentasuna', 'hr': 'prozirnostispune', 'es': 'relleno.transparencia', 'el': 'διαφάνειαγεμίσματος', 'lv': 'pildījuma_caurspīdīgums', 'gug': 'myenyhẽ.tesakã', 'oc': 'transparénciaemplenar', 'cs': 'průhlednostvýplně|průhlvýplně', 'de': 'fülltransparenz|ft', 'tr': 'şeffaflıkladoldur', 'nl': 'vullingstransparantie', 'or': 'ପୂରଣସ୍ୱଚ୍ଛତା', 'he': 'שקיפות_המילוי', 'hsb': 'pjelnjacatransparenca', 'nn': 'fyllgjennomsikt', 'nb': 'fyllgjennomsiktighet', 'hu': 'töltőátlátszóság', 'gl': 'transparenciarecheo', 'ar': 'ملأ_شفافية', 'en_US': 'filltransparency', 'sk': 'priehľadnosťvýplne|pv', 'ko': '투명채우기', 'eo': 'plenigtravideblo', 'ca_valencia': 'transparència.emplenament', 'zh_TW': '填入透明|填透明|filltransparency', 'et': 'täite_läbipaistvus|tlp', 'zh_CN': '填充透明|填透明|filltransparency', 'ru': 'прозр_заливки|пз', 'sl': 'prosojnostpolnila', 'ug': 'تولدۇرۇش سۈزۈكلۈكى', 'am': 'ግልጽነት መሙያ', 'ca': 'transparència.emplenament'},
2060 'BACKWARD':{'lt': 'atgal|at', 'th': 'กลับหลัง|bk', 'sid': 'badhera|br', 'fi': 'taakse|tk', 'ro': 'back|bk|înapoi', 'lv': 'atpakaļ|at', 'kn': 'ಹಿಂದಕ್ಕೆ|bk', 'hsb': 'wróćo|wr', 'tr': 'geri|ge', 'es': 'retrocede|atras|re|at', 'el': 'πίσω|πι|back|bk', 'hr': 'nazad|nz', 'cs': 'vzad|vz', 'de': 'zurück|zk', 'he': 'אחורה|אח', 'nl': 'terug|tg', 'hu': 'hátra|h', 'ko': '뒤로|bk', 'zh_TW': '後退|退|back|bk', 'mr': 'मागे|bk', 'ru': 'назад|н', 'sl': 'nazaj|nz', 'am': 'ወደ ኋላ|ወደ ኋላ', 'et': 'tagasi|t', 'uk': 'назад|нд', 'pt_BR': 'paraTrás|pt', 'kk': 'артқа|ар', 'br': 'war-gil|bk', 'km': 'ថយក្រោយ|bk', 'nb': 'tilbake|bakover|tb', 'bs': 'nazad|bk', 'eu': 'atzera|atz', 'ast': 'atrás|pt', 'gug': 'tapykuépe|jere', 'or': 'ପଛକୁ|bk', 'ja': 'もどる|back|bk', 'nn': 'tilbake|bakover|tb|back', 'fr': 'recule|re', 'be': 'назад|нз', 'sq': 'prapa|bk', 'gl': 'atrás|bk', 'ar': 'للخلف|خف', 'en_US': 'back|bk', 'sk': 'vzad|vz', 'eo': 'retro|r', 'ca_valencia': 'retrocedeix|recula|arrere|re', 'ca': 'retrocedeix|recula|enrere|re', 'zh_CN': '后退|退|back|bk'},
2061 'BLUE':{'lt': 'mėlyna', 'th': 'น้ำเงิน', 'sid': 'gordaamo', 'fi': 'sininen', 'ro': 'blue|albastru', 'lv': 'zils', 'kn': 'ನೀಲಿ', 'hsb': 'módry', 'tr': 'mavi', 'es': 'azul', 'vec': 'blè', 'el': 'γαλάζιο|blue', 'hr': 'plava', 'cs': 'modrá', 'sr_Latn': 'plava', 'he': 'כחול', 'nl': 'blauw', 'de': 'blau', 'hi': 'नीला', 'ml': 'നീല', 'gu': 'વાદળી', 'my': 'အပြာရောင်', 'ko': '청색', 'zh_TW': '藍|blue', 'mr': 'निळा', 'ru': 'синий', 'sl': 'modra', 'bn_IN': 'নীল', 'am': 'ሰማያዊ', 'et': 'sinine', 'uk': 'синій', 'pt_BR': 'azul', 'kk': 'көк', 'te': 'నీలం', 'br': 'glas', 'is': 'blátt', 'km': 'ខៀវ', 'nb': 'blå|blue', 'bs': 'plava', 'eu': 'urdina', 'hu': 'kék', 'cy': 'glas', 'pa_IN': 'ਨੀਲਾ', 'ast': 'azul', 'gug': 'hovy', 'vi': 'Xanh', 'as': 'নীলা', 'gd': 'gorm', 'or': 'ନୀଳ', 'ja': '青|blue', 'nn': 'blå|blue', 'fr': 'bleu', 'be': 'сіні', 'oc': 'blau', 'gl': 'azul', 'ar': 'أزرق', 'en_US': 'blue', 'sk': 'modrá', 'sr': 'плава', 'zh_CN': '蓝|蓝色|blue', 'eo': 'blua', 'ta': 'நீலம்', 'ca_valencia': 'blau', 'ne': 'नीलो', 'ca': 'blau', 'si': 'නිල්', 'ug': 'كۆك', 'ka': 'ლურჯი'},
2062 'GRAY':{'lt': 'pilka', 'sid': 'boora|bulla', 'fi': 'harmaa', 'ro': 'gray|grey|gri', 'lv': 'pelēks', 'kn': 'ಬೂದು|ಬೂದು', 'hsb': 'šěry', 'tr': 'gri|gri', 'es': 'gris', 'el': 'γκρίζο|gray|grey', 'hr': 'sivo|sivo', 'cs': 'šedá', 'sr_Latn': 'siva', 'he': 'אפור', 'nl': 'grijs', 'de': 'grau', 'ko': '회색|회색', 'zh_TW': '灰|gray|grey', 'mr': 'ग्रे|ग्रे', 'ru': 'серый', 'sl': 'siva', 'am': 'ግራጫ|ግራጫ', 'et': 'hall', 'uk': 'сірий', 'pt_BR': 'cinza', 'kk': 'сұр', 'br': 'loued|grey', 'is': 'grátt', 'km': 'ប្រផះ|grey', 'nb': 'grå|gray', 'bs': 'siva|siva', 'eu': 'grisa', 'hu': 'szürke', 'ast': 'buxu', 'gug': 'hũndy', 'or': 'ଧୂସର|grey', 'ja': '灰色|gray', 'nn': 'grå|gray', 'fr': 'gris|gris', 'be': 'шэры', 'gl': 'gris', 'ar': 'رمادي|رصاصي', 'en_US': 'gray|grey', 'sk': 'sivá', 'sr': 'сива', 'zh_CN': '灰|灰色|gray|grey', 'eo': 'griza', 'ca_valencia': 'gris', 'ca': 'gris', 'oc': 'gris|gris'},
2063 'SQRT':{'lt': 'šaknis|sqrt', 'uk': 'корінь', 'ja': '平方根|sqrt', 'pt_BR': 'raiz|raizQ', 'fi': 'neliöjuuri', 'br': 'daouvonad', 'sat': 'SQRT', 'is': 'kvaðratr', 'fr': 'racine', 'kok': 'SQRT', 'bs': 'korijen', 'hsb': 'korjeń', 'tr': 'karekök', 'es': 'raiz.cuadrada|raiz|sqrt', 'ca': 'arrel', 'el': 'τετραγωνικήρίζα|sqrt', 'lv': 'kvadrātsakne', 'ast': 'raiz', 'gug': 'raiz.cuadrada|raiz|sqrt', 'cs': 'odmocnina', 'de': 'wurzel', 'nl': 'sqrt|vierkantswortel|vw', 'he': 'שורש', 'nn': 'kvrot|rot|sqrt', 'nb': 'kvrot|sqrt', 'hu': 'gyök', 'gl': 'raizc', 'ar': 'الجذر_التربيعي', 'en_US': 'sqrt', 'sk': 'odmocnina', 'eo': 'kvrad', 'ca_valencia': 'arrel', 'zh_TW': '開根|方根|sqrt', 'et': 'ruutjuur|rtjr|√', 'dgo': 'SQRT', 'sl': 'koren', 'sa_IN': 'SQRT', 'zh_CN': '平方根|方根|开方|sqrt', 'am': 'ስኴር ሩት', 'mr': 'स्केअररूट'},
2064 'FONTHEIGHT':{'lt': 'šrifto.dydis|teksto.dydis', 'sid': 'borangichu bikka|borrotebikka|borrotehojja', 'ja': '文字の大きさ|フォントの大きさ|fontsize|fontheight', 'pt_BR': 'mudarTamanhoDaLetra|mTamLe', 'kk': 'қаріп_өлшемі|мәтін_өлшемі|мәтін_биіктігі', 'fi': 'fonttikoko', 'ro': 'fontsize|textsize|textheight|mărimefont', 'km': 'ទំហំ\u200bពុម្ពអក្សរ|textsize|textheight', 'fr': 'taillepolice|tailletexte|largeurtexte', 'lv': 'fonta_izmērs|teksta_izmērs|teksta_augstums', 'kn': 'ಅಕ್ಷರಶೈಲಿಗಾತ್ರ|ಪಠ್ಯಗಾತ್ರ|ಪಠ್ಯಎತ್ತರ', 'eu': 'letratamaina|testutamaina|testualtuera', 'tr': 'yazıtipiboyutu|metinboyutu|metinyüksekliği', 'es': 'tamaño.texto|tamaño.letra', 'ca': 'mida.lletra|mida.text', 'el': 'μέγεθοςγραμματοσειράς|μέγεθοςκειμένου|ύψοςκειμένου|fontsize|textsize|textheight', 'uk': 'кегль|розмір_символів|висота_символів', 'hr': 'veličina fonta|veličina teksta|visina teksta', 'cs': 'velikostpísma|velikosttextu', 'de': 'schriftgrösse|textgrösse|schgr|tgr', 'nl': 'lettergrootte|tekstgrootte|teksthoogte', 'bs': 'veličinafonta|veličinateksta|visinateksta', 'he': 'גודלגופן|גודלטקסט|גובהטקסט', 'hsb': 'wulkosćpisma|wulkosćteksta|wysokosćteksta|wp|wt', 'nn': 'tekststorleik|teksthøgd|textsize', 'nb': 'tekststørrelse|teksthøyde|textsize', 'hu': 'betűméret', 'gl': 'tamañodeletra|tamañodetexto|alturadetexto', 'ar': 'حجم_الخط', 'en_US': 'fontsize|textsize|textheight', 'sk': 'veľkosťpísma|veľkosťtextu|vp|vt', 'ko': '글꼴크기|글자크기|글자높이', 'or': 'ଅକ୍ଷରରୂପ ଆକାର|ପାଠ୍ୟଆକାର|textheight', 'eo': 'tiparogrando|tekstoalto|tekstogrando', 'ca_valencia': 'mida.lletra|mida.text', 'zh_TW': '字型大小|文字大小|字大小|字高|字級|fontsize|textsize|textheight', 'mr': 'फाँटआकार|मजकूरआकार|मजकूरऊंची', 'ast': 'tamañulletra|tamañutestu|altortestu', 'ru': 'кегль|размер_текста|высота_текста', 'sl': 'velikostpisave|velikostčrk|velikostbesedila', 'zh_CN': '文字大小|字体大小|字大小|字高|fontsize|textsize|textheight', 'am': 'የፊደል መጠን|የጽሁፍ መጠን|የጽሁፍ እርዝመት', 'et': 'fondi_suurus|teksti_suurus|teksti_kõrgus'},
2065 'BLACK':{'lt': 'juoda', 'sid': 'kolishsho', 'zu': 'okumnyama', 'fi': 'musta', 'ss': 'mnyama', 'nr': 'nzima', 'ro': 'black|negru', 'lv': 'melns', 'kn': 'ಕಪ್ಪು', 'hsb': 'čorny', 'tr': 'siyah', 'xh': 'mnyama', 'el': 'μαύρο|black', 'hr': 'crna', 'tn': 'bontsho', 'cs': 'černé', 'sr_Latn': 'crna', 'he': 'שחור', 'nl': 'zwart', 'de': 'schwarz', 'hi': 'काला', 'ml': 'കറുത്ത', 'nso': 'ntsho', 'gu': 'કાળો', 've': 'ntswu', 'my': 'အနက်', 'ko': '검정', 'st': 'botsho', 'tt': 'кара', 'zh_TW': '黑|black', 'mr': 'काळा', 'sat': 'हेंदे', 'oc': 'negre', 'ru': 'чёрный', 'sl': 'črna', 'sa_IN': 'करूहुन', 'bn_IN': 'কালো', 'am': 'ጥቁር', 'et': 'must', 'lb': 'schwaarz', 'uk': 'чорний', 'kmr_Latn': 'reş', 'pt_BR': 'preto', 'kk': 'қара', 'te': 'నలుపు', 'af': 'swart', 'is': 'svart', 'km': 'ខ្មៅ\u200b', 'nb': 'svart|black', 'bs': 'crna', 'eu': 'beltza', 'hu': 'fekete', 'cy': 'du', 'pa_IN': 'ਕਾਲਾ', 'ast': 'prietu', 'gug': 'hũ', 'vi': 'đen', 'as': 'কলা', 'gd': 'dubh', 'eo': 'nigra', 'or': 'କଳା', 'ja': '黒|black', 'nn': 'svart|black', 'fr': 'noir', 'be': 'чорны', 'br': 'Du', 'fa': 'سیاه', 'gl': 'negro', 'ar': 'أسود', 'en_US': 'black', 'sk': 'čierna', 'es': 'negro', 'sr': 'црна', 'zh_CN': '黑|黑色|black', 'bn': 'কালো', 'ta': 'கருப்பு', 'ca_valencia': 'negre', 'ne': 'कालो', 'ca': 'negre', 'si': 'කළු', 'ts': 'ntima', 'ug': 'قارا', 'ka': 'შავი'},
2066 'HOME':{'lt': 'namo', 'th': 'บ้าน', 'sid': 'Mine', 'fi': 'kotiin', 'ro': 'home|acasă', 'lv': 'mājas', 'kn': 'ನೆಲೆ', 'hsb': 'spočatk', 'tr': 'başlangıç', 'es': 'inicio|casa|centro', 'el': 'αρχή|home', 'hr': 'polazno', 'cs': 'domů', 'de': 'anfang', 'mn': 'эхлэл хуудас', 'he': 'בית', 'nl': 'thuis', 'hu': 'haza', 'hi': 'घर', 'ml': 'ആസ്ഥാനം', 'gu': 'ઘર', 'ko': '처음', 'sd': 'گهر', 'zh_TW': '回家|家|home', 'mr': 'होम', 'sat': 'ओड़ाक्', 'ru': 'начало', 'sl': 'začetek', 'bn_IN': 'Home', 'am': 'ቤት', 'et': 'koju', 'uk': 'центр', 'pt_BR': 'paraCentro|centro|pc', 'kk': 'басы', 'te': 'నివాసం', 'br': 'Degemer', 'is': 'heim', 'km': 'ដើម', 'nb': 'hjem|home', 'kok': 'घरGhor', 'bs': 'kući', 'eu': 'hasiera', 'cy': 'cartref', 'pa_IN': 'ਘਰ', 'ast': 'aniciu', 'gug': 'óga', 'vi': 'Home', 'as': 'ঘৰ', 'gd': 'dhachaigh', 'or': 'ମୂଳ ସ୍ଥାନ', 'ja': 'もとの場所へ|home', 'nn': 'heim|home', 'fr': 'origine', 'sq': 'shtëpia', 'oc': 'acuèlh', 'gl': 'inicio', 'ar': 'المنزل', 'en_US': 'home', 'sk': 'domov', 'zh_CN': '归位|回归|回家|家|home', 'eo': 'hejmen', 'ca_valencia': 'inici|centre', 'ca': 'inici|centre', 'si': 'සමහර', 'dgo': 'घर', 'my': 'အချို့'},
2067 'ROUND':{'lt': 'apvalink', 'sid': 'doyiissi', 'fi': 'pyöreä', 'ro': 'round|rotund', 'lv': 'apaļš', 'kn': 'ದುಂಡಾದ', 'hsb': 'kulojty', 'tr': 'yuvarla', 'es': 'redondear', 'el': 'στρογγυλοποίηση|round', 'hr': 'okruglo', 'cs': 'oblé', 'de': 'runde', 'he': 'עגול', 'nl': 'rondaf', 'hu': 'kerek', 'hi': 'गोल', 'ml': 'ഉരുണ്ട', 'gu': 'રાઉન્ડ', 'my': 'ပတ်လည်', 'ko': '반올림', 'zh_TW': '四捨五入|round', 'mr': 'गोलाकार', 'ru': 'скруглить', 'sl': 'zaokroži', 'bn_IN': 'রাউন্ড', 'am': 'ክብ', 'et': 'ümar', 'uk': 'закруглити', 'pt_BR': 'arred|arredonde', 'kk': 'домалақтау', 'te': 'రౌండ్', 'br': 'ront', 'is': 'rúnnað', 'km': 'មូល', 'nb': 'avrund|round', 'bs': 'okruglo', 'eu': 'biribildua', 'cy': 'crwn', 'pa_IN': 'ਗੋਲ', 'ast': 'redondu', 'gug': "emoapu'a", 'vi': 'Làm tròn', 'as': 'গোলাকাৰ', 'gd': 'cruinn', 'or': 'ଗୋଲାକାର', 'ja': '四捨五入|round', 'nn': 'avrund|round', 'fr': 'arrondi', 'sq': 'rrumbullak', 'oc': 'arredondit', 'gl': 'arredondar', 'ar': 'دائري', 'en_US': 'round', 'sk': 'Zaokrúhlenie', 'zh_CN': '四舍五入|舍入|round', 'eo': 'ronda', 'ta': 'வட்டம்', 'ca_valencia': 'arrodoneix|arrod', 'ne': 'गोलाकार', 'ca': 'arrodoneix|arrod', 'si': 'වටකුරු', 'ug': 'يۇمۇلاق', 'ka': 'მრგვალი'},
2068 'BREAK':{'lt': 'nutrauk', 'sid': 'tayisi', 'fi': 'keskeytä', 'ro': 'break|întrerupere', 'lv': 'pārtraukt', 'kn': 'ತಡೆ', 'hsb': 'přetorhnjenje', 'tr': 'sonlandır', 'es': 'saltar|interrumpir', 'el': 'διακοπή|break', 'hr': 'prijelom', 'cs': 'ukonči', 'de': 'abbruch', 'he': 'שבירה|לשבור', 'nl': 'afbreken', 'hu': 'kilép', 'hi': 'खण्डन', 'ml': 'വിഭജിക്കുക', 'gu': 'વિભાજક', 'ko': '분할', 'zh_TW': '中斷|斷|break', 'mr': 'ब्रेक', 'ru': 'прервать', 'sl': 'prekini', 'bn_IN': 'বিরতি', 'am': 'መጨረሻ', 'et': 'katkesta', 'uk': 'перерви', 'pt_BR': 'interromper|interrompa', 'kk': 'үзу', 'te': 'విరుపు', 'br': 'rannadur', 'is': 'rofstaður', 'km': 'បំបែក', 'nb': 'avbryt|break', 'bs': 'iskoči', 'eu': 'jauzia', 'cy': 'toriad', 'pa_IN': 'ਬਰੇਕ', 'ast': 'saltu', 'gug': 'kytĩ', 'vi': 'Ngắt', 'or': 'ଭାଙ୍ଗ', 'ja': 'くりかえしから出る|break', 'nn': 'avbryt|break', 'fr': 'saut', 'oc': 'fraccionar', 'gl': 'quebrar', 'ar': 'اكسر', 'en_US': 'break', 'sk': 'Zalomenie', 'zh_CN': '中断|break', 'eo': 'saltu', 'ta': 'முறி', 'ca_valencia': 'salta|trenca', 'ne': 'विच्छेद', 'ca': 'salta|trenca', 'si': 'බිදුම', 'my': 'ကြားဖြတ်ပါ', 'ka': 'შეწყვეტა'},
2069 'PURPLE':{'lt': 'violetinė', 'sid': 'Hamara', 'fi': 'purppura', 'ro': 'purple|violet', 'lv': 'purpura', 'kn': 'ನೇರಳೆ', 'hsb': 'purpurny', 'tr': 'mor', 'es': 'púrpura|morado', 'vec': 'vioła', 'el': 'πορφυρό|purple', 'hr': 'ljubičasta', 'cs': 'tmavě purpurová', 'sr_Latn': 'ljubičasta', 'he': 'סגול', 'nl': 'lila', 'de': 'lila', 'hi': 'बैंगनी', 'ml': 'പര്\u200dപ്പിള്\u200d', 'gu': 'જાંબુડિયો', 'ko': '자주색', 'sd': 'واڱڻائي', 'zh_TW': '紫|purple', 'mr': 'जांभळा', 'sat': 'कुरसे बाहा रोङ गाड़माक्', 'ru': 'фиолетовый', 'sl': 'škrlatna', 'sa_IN': 'परपोल', 'bn_IN': 'গোলাপী', 'am': 'ወይን ጠጅ', 'et': 'lilla', 'uk': 'фіолетовий', 'pt_BR': 'roxo', 'kk': 'күлгін', 'te': 'వంకాయరంగు', 'br': 'limestra', 'is': 'purpurablátt', 'km': 'ស្វាយ', 'nb': 'lilla|purple', 'kok': 'जांबळोZamblli', 'bs': 'ljubičasta', 'eu': 'morea', 'hu': 'lila', 'cy': 'porffor', 'pa_IN': 'ਵੈਂਗਣੀ', 'ast': 'púrpura', 'gug': 'lila', 'vi': 'Tía', 'as': 'জামুকলীয়া', 'gd': 'purpaidh', 'or': 'ବାଇଗଣୀ', 'ja': '紫|purple', 'nn': 'lilla|purple', 'fr': 'pourpre', 'be': 'пурпурны', 'gl': 'púrpura', 'ar': 'بنفسجي', 'en_US': 'purple', 'sk': 'Purpurová', 'sr': 'љубичаста', 'zh_CN': '紫|紫色|purple', 'eo': 'purpura', 'ta': 'ஊதா', 'ca_valencia': 'porpra|púrpura', 'ca': 'porpra|púrpura', 'dgo': 'जामुनी', 'oc': 'porpra'},
2070 'BROWN':{'lt': 'ruda', 'th': 'น้ำตาล', 'sid': 'daama', 'fi': 'ruskea', 'ro': 'brown|maro', 'lv': 'brūns', 'kn': 'ಕಂದು', 'hsb': 'bruny', 'tr': 'kahverengi', 'es': 'marrón|café', 'el': 'καφέ|brown', 'hr': 'smeđa', 'cs': 'hnědá', 'sr_Latn': 'braon', 'he': 'חום', 'nl': 'bruin', 'de': 'braun', 'hi': 'भूरा', 'ml': 'ബ്രൌണ്\u200d', 'gu': 'તપખીરિયા રંગનું', 'ko': '갈색', 'zh_TW': '棕|brown', 'mr': 'ब्राउन', 'ru': 'коричневый', 'sl': 'rjava', 'bn_IN': 'বাদামি', 'am': 'ቡናማ', 'et': 'pruun', 'uk': 'коричневий', 'pt_BR': 'marrom', 'kk': 'қоңыр', 'te': 'గోధుమరంగు', 'br': 'liv kistin', 'is': 'brúnt', 'km': 'ត្នោត', 'nb': 'brun|brown', 'bs': 'smeđa', 'eu': 'marroia', 'hu': 'barna', 'pa_IN': 'ਭੂਰਾ', 'ast': 'marrón', 'gug': 'marrón', 'vi': 'Nâu', 'as': 'মূগা', 'gd': 'donn', 'or': 'ବାଦାମୀ', 'ja': '茶色|ブラウン|brown', 'nn': 'brun|brown', 'fr': 'marronclair', 'be': 'карычневы', 'oc': 'marron', 'gl': 'marrón', 'ar': 'بني', 'en_US': 'brown', 'sk': 'Hnedá', 'sr': 'браон', 'zh_CN': '棕色|棕|brown', 'eo': 'bruna', 'ta': 'பழுப்பு', 'ca_valencia': 'marró', 'ne': 'कैलो', 'ca': 'marró', 'si': 'දුඹුරු', 'my': 'အညို', 'ka': 'ყავისფერი'},
2071 'FALSE':{'lt': 'melas', 'th': 'เท็จ', 'sid': 'xara', 'fi': 'epätosi', 'ro': 'false|fals', 'lv': 'aplams', 'kn': 'ಅಸತ್ಯ', 'hsb': 'wopačny', 'tr': 'yanlış', 'es': 'falso', 'el': 'ψευδής|false', 'hr': 'netočno', 'cs': 'nepravda', 'de': 'falsch', 'he': 'שקר', 'nl': 'onwaar', 'hu': 'hamis', 'hi': 'गलत', 'gu': 'ખોટુ', 'my': 'အမှား', 'ko': '거짓', 'br': 'diwir', 'zh_TW': '假|false', 'mr': 'फॉल्स', 'ru': 'ложь', 'sl': 'niresnično', 'bn_IN': 'মিথ্যা', 'am': 'ሀሰት', 'et': 'väär', 'uk': 'хиба', 'kmr_Latn': 'şaşî ye', 'pt_BR': 'falso', 'kk': 'жалған', 'te': 'అసత్యము', 'af': 'onwaar', 'is': 'ósatt', 'tg': 'дурӯғ', 'km': 'មិន\u200bពិត', 'nb': 'usann|false', 'eu': 'faltsua', 'cy': 'ffug', 'pa_IN': 'ਗਲਤ', 'ast': 'falso', 'gug': 'japu', 'vi': 'sai', 'as': 'মিছা', 'ja': '偽|なりたたない|false', 'nn': 'usann|false', 'fr': 'faux', 'bn': 'মিথ্যা', 'oc': 'fals', 'gl': 'falso', 'ar': 'خطأ', 'om': 'soba', 'ug': 'يالغان', 'sk': 'nepravda', 'zh_CN': '假|false', 'eo': 'falsa', 'ta': 'தவறு', 'ca_valencia': 'fals', 'ne': 'झूटो', 'ca': 'fals', 'si': 'අසත්\u200dය', 'en_US': 'false', 'ka': 'მცდარი'},
2072 'MM':{'th': 'มม.', 'uk': 'мм', 'mk': 'мм', 'kk': 'мм', 'bn': 'মিমি', 'tg': 'мм', 'km': 'ម.ម.', 'zh_CN': '毫米|mm', 'kok': 'मिमि', 'kn': 'ಮಿ.ಮಿ', 'ks': 'ملی میٹر', 'nr': 'i-mm', 'el': 'χιλιοστά|mm', 'dz': 'ཨེམ་ཨེམ་', 'as': 'মি.মি.', 'mn': 'мм', 'ru': 'мм', 'or': 'ମିଲିମିଟର', 'he': 'מ"מ|מ״מ', 'be': 'мм', 'sq': '0 mm', 'hi': 'मिमी', 'ml': 'മിമി', 'ar': 'مم', 'en_US': 'mm', 'my': 'မီလီမီတာ', 'bn_IN': 'মিমি', 'ta': 'மி.மீ', 'tt': 'мм', 'ne': 'मिलिमिटर', 'zh_TW': '公釐|mm', 'dgo': 'मी.मी.', 'bo': 'ཧའི་སྨི།', 'mai': 'मिमी', 'ja': 'ミリメートル|mm', 'mni': 'মি.মি.', 'ug': 'مىللىمېتىر', 'am': 'ሚ/ሚ', 'ka': 'მმ'},
2073 'END':{'fi': 'loppu', 'kn': 'ಕೊನೆ', 'xh': 'ekugqibeleni', 'hr': 'kraj', 'de': 'ende', 'he': 'סוף', 'nl': 'E', 'hu': 'vége', 'ml': 'അന്ത്യം', 'st': 'qetello', 'ko': '최종 기간', 'mr': 'एंड', 'mai': 'अंत', 'am': 'መጨረሻ', 'et': 'lõpp', 'kk': 'соңы', 'te': 'ముగింపు', 'af': 'einde', 'tg': 'Давраи охир', 'km': 'ពេលបញ្ចប់', 'fr': 'fin', 'kok': 'अंत', 'eu': 'amaiera', 'pa_IN': 'ਅੰਤ', 'gug': 'opa', 'vi': 'kết thúc', 'lo': 'ຈົບ', 'gd': 'deireadh', 'rw': 'impera', 'hsb': 'kónc', 'nb': 'slutt|end', 'sq': 'fund', 'om': 'dhuma', 'en_US': 'end', 'sk': 'koniec', 'ta': 'முடிவு', 'dgo': 'अंत', 'zh_CN': '定义终|终|结束|end', 'lt': 'taškas', 'th': 'สิ้นสุด', 'sid': 'gofimarcho', 'zu': 'isiphetho', 'ss': 'kugcina', 'mk': 'Крај', 'ro': 'end|sfârșit', 'lv': 'beigas', 'as': 'অন্ত', 'nn': 'slutt|end', 'es': 'fin', 'el': 'τέλος|end', 'dz': 'མཇུག', 'tn': 'bofelo', 'cs': 'konec', 'sl': 'konec', 'hi': 'अंत', 'gu': 'અંત', 've': 'magumo', 'sd': 'آخر', 'zh_TW': '結束|迄|end', 'sat': 'मुचात् मुचा़त्', 'bo': 'end_period', 'ru': 'конец', 'nso': 'mafelelo', 'bn_IN': 'শেষ', 'uk': 'Кін_період', 'kmr_Latn': 'dawî', 'pt_BR': 'fim', 'bn': 'শেষ', 'is': 'endar', 'bs': 'kraj', 'sa_IN': 'समाप्तः', 'sw_TZ': 'mwisho', 'ks': 'اند', 'my': 'အဆုံးသတ်', 'ast': 'final', 'tr': 'son', 'brx': 'जोबनाय', 'mn': 'төгсгөл', 'or': 'ଶେଷ', 'ja': 'おわり|end', 'cy': 'diwedd', 'nr': 'phela', 'br': 'Marevezh echuiñ', 'ar': 'النهاية', 'oc': 'fin', 'eo': 'fino', 'ca_valencia': 'final|fi', 'ne': 'अन्त्य', 'ca': 'final|fi', 'si': 'අවසානය', 'ts': 'makumu', 'mni': 'অরোয়বা'},
2074 'SLEEP':{'lt': 'lauk', 'sid': 'goxi', 'fi': 'nuku', 'ro': 'sleep|adormire', 'lv': 'gulēt', 'kn': 'ಜಡ', 'hsb': 'čakać', 'tr': 'askıya al', 'es': 'dormir|espera', 'el': 'αναμονή|sleep', 'hr': 'spavaj', 'cs': 'čekej', 'de': 'warte', 'he': 'לישון', 'nl': 'slaap', 'hu': 'vár|várj', 'hi': 'सुप्त', 'gu': 'નિદ્રા', 'ko': '대기 모드', 'zh_TW': '睡眠|休息|sleep', 'mr': 'स्लीप', 'ru': 'ждать', 'sl': 'miruj', 'am': 'ማስተኛ', 'et': 'oota', 'uk': 'чекай', 'pt_BR': 'esperar|espere', 'kk': 'күту', 'te': 'స్లీమ్', 'br': 'kousket', 'is': 'svæfa', 'km': 'ដេក', 'nb': 'sov|pause|sleep', 'bs': 'spavanje', 'eu': 'loegin', 'cy': 'cysgu', 'ast': 'dormir', 'gug': 'ke', 'as': 'নিদ্ৰা', 'or': 'ସୁପ୍ତ', 'ja': '待つ|sleep', 'nn': 'sov|pause|sleep', 'fr': 'suspendre', 'gl': 'durmir', 'ar': 'نَم', 'en_US': 'sleep', 'sk': 'čakaj', 'zh_CN': '休息|睡眠|sleep', 'eo': 'dormu', 'ca_valencia': 'dorm|espera', 'ca': 'dorm|espera', 'oc': 'arrestar'},
2075 'BOLD':{'lt': 'pusjuodis', 'th': 'ตัวหนา', 'sid': "kee'misi", 'zu': 'okugqamile', 'fi': 'lihavointi', 'ss': 'licinsi', 'ml': 'ബോള്\u200dഡ്', 'ro': 'bold|îngroșat', 'lv': 'trekns', 'kn': 'ಬೋಲ್ಡ್\u200d', 'hsb': 'tučny', 'tr': 'kalın', 'xh': 'ngqindilili', 'vec': 'groseto', 'el': 'έντονα|bold', 'hr': 'podebljano', 'tn': 'tiisa', 'cs': 'tučné', 'de': 'fett', 'he': 'מודגש', 'nl': 'vet', 'hu': 'félkövér|kövér|vastag', 'hi': 'मोटा', 'bn': 'গাঢ়', 'nso': 'mokoto', 'gu': 'ઘટ્ટ', 've': 'ndenya', 'my': 'မဲ', 'ko': '굵은', 'st': 'botenya', 'tt': 'калын', 'zh_TW': '粗體|粗|bold', 'mr': 'ठळक', 'oc': 'gras', 'ru': 'жирный', 'sl': 'krepko', 'bn_IN': 'গাঢ়', 'am': 'ማድመቂያ', 'et': 'paks|rasvane', 'lb': 'fett', 'uk': 'жирний', 'kmr_Latn': 'qalind', 'pt_BR': 'negrito', 'kk': 'жуан', 'te': 'మందం', 'af': 'vetdruk', 'is': 'feitletrað', 'km': 'ដិត\u200b', 'nb': 'fet|bold', 'bs': 'masno', 'eu': 'lodia', 'nr': 'darhileko', 'cy': 'trwm', 'pa_IN': 'ਗੂੜ੍ਹੇ', 'ast': 'gruesu', 'gug': "hũ'i", 'vi': 'đậm', 'as': 'ডাঠ', 'gd': 'trom', 'eo': 'grasa', 'or': 'ଗାଢ଼', 'ja': '太く|太字|bold', 'nn': 'feit|bold', 'fr': 'gras', 'be': 'цёмны', 'sq': 'të trasha', 'fa': 'ضخیم', 'gl': 'grosa', 'ar': 'عريض', 'en_US': 'bold', 'sk': 'tučné', 'es': 'grueso', 'zh_CN': '粗体|粗|bold', 'br': 'Tev', 'ta': 'தடிமன்', 'ca_valencia': 'negreta', 'ne': 'बाक्लो', 'ca': 'negreta', 'si': 'තදකුරු', 'ts': 'dzwihala', 'ug': 'توم', 'ka': 'შეკვრა'},
2076 'ELLIPSE':{'lt': 'elipsė', 'th': 'วงรี', 'sid': 'suduudaamo', 'fi': 'ellipsi', 'ro': 'ellipse|elipsă', 'lv': 'elipse', 'kn': 'ದೀರ್ಘವೃತ್ತ', 'hsb': 'elipsa', 'tr': 'elips', 'es': 'elipse', 'vec': 'ełise', 'el': 'έλλειψη|ellipse', 'hr': 'elipsa', 'cs': 'elipsa', 'mn': 'эллипс', 'he': 'אליפסה', 'nl': 'Ellips', 'hu': 'ellipszis', 'hi': 'दीर्घवृत्त', 'ml': 'അണ്ഡവൃത്തം', 'gu': 'ઉપવલય', 'my': 'ဘဲဥပုံ', 'ko': '타원', 'zh_TW': '橢圓|ellipse', 'mr': 'दीर्घवृत्त', 'ru': 'эллипс', 'sl': 'elipsa', 'bn_IN': 'উপবৃত্ত', 'am': 'ኤሊፕስ', 'et': 'ellips', 'uk': 'еліпс', 'pt_BR': 'elipse', 'kk': 'эллипс', 'te': 'దీర్ఘవృత్తం', 'br': 'elipsenn', 'is': 'sporbaugur', 'km': 'ពង\u200bក្រពើ', 'bs': 'elipsa', 'eu': 'elipsea', 'pa_IN': 'ਅੰਡਾਕਾਰ', 'ast': 'elipse', 'gug': 'elipse', 'vi': 'Bầu dục', 'as': 'উপবৃত্ত', 'gd': 'eileaps', 'or': 'ଅଣ୍ଡାକୃତ', 'ja': '楕円|ellipse', 'cy': 'elips', 'be': 'эліпс', 'sq': 'elips', 'oc': 'ellipsa', 'gl': 'elipse', 'ar': 'بيضاوي', 'ug': 'ئېللىپىس', 'sk': 'elipsa', 'zh_CN': '椭圆|ellipse', 'eo': 'elipso', 'ta': 'நீள்வட்டம்', 'ca_valencia': 'el·lipse', 'ne': 'दीर्घवृत्त', 'ca': 'el·lipse', 'si': 'ඉලිප්සය', 'en_US': 'ellipse', 'ka': 'ელიფსი'},
2077 'SHOWTURTLE':{'lt': 'rodyk.vėžliuką|rodykis|rd', 'sid': 'bukukaleelshi|bukukaleelshi|bl|aneleelshi', 'fi': 'näytäkonna|nk', 'ro': 'showturtle|st|showme|vizibil', 'lv': 'rādīt_rupuci|rr|rādīt_mani', 'kn': 'ಆಮೆತೋರಿಸು|st|ನನ್ನನ್ನುತೋರಿಸು', 'hsb': 'pokazać', 'tr': 'kaplumbağagöster|kg|benigöster', 'es': 'mostrartortuga|mt|mostrarme', 'el': 'εμφάνισηχελώνας|εμφάνισεμε|εε|showturtle|st|showme', 'hr': 'pokažikursor|st|pokažime', 'cs': 'ukažželvu|ukaž|už', 'de': 'zeigen', 'he': 'הצגצב|להציבצב|הצגתהצב|להציגאותי|הצ', 'nl': 'toon|tn', 'hu': 'látható', 'ko': '거북이표시|st|표시', 'zh_TW': '顯示海龜|顯示龜|顯示|showturtle|st|showme', 'mr': 'शोटर्टल|st|शोमि', 'ru': 'показать_черепаху|пч|показать_меня', 'sl': 'pokažiželvo|pž|pokažime', 'am': 'ኤሊ ማሳያ|st|ያሳዩኝ', 'et': 'näita|näita_kilpkonna|nk', 'uk': 'покажи_черепашку|пч', 'pt_BR': 'mostrarTat|mostreTat|at|apareçaTat|aparecerTat', 'kk': 'тасбақаны_көрсету|тк|мені_көрсету', 'br': 'diskouezbaot|st|showme', 'nb': 'vismeg|vm|showturtle', 'bs': 'prikažikornjaču|st|prikažimene', 'eu': 'erakutsidortoka|rd|erakutsini', 'ast': 'amuesatortuga|veme|vt', 'gug': 'hechaukakarumbe|hk|ajehecha', 'oc': 'afichartortuga|at|afichar', 'or': 'କଇଁଛଦର୍ଶାଇବା|st|showme', 'ja': 'タートルを出す|showturtle|st', 'nn': 'vismeg|vm|showturtle', 'fr': 'montretortue|mt|montremoi', 'gl': 'amosartartaruga|mt|amosarme', 'ar': 'أظهر_السلحفاة|أظهر', 'en_US': 'showturtle|st|showme', 'sk': 'ukážkorytnačku|ukáž|uk', 'eo': 'vidigu_testudon|vt', 'ca_valencia': 'mostra.tortuga|mt', 'ca': 'mostra.tortuga|mt', 'zh_CN': '显示海龟|显示龟|显龟|showturtle|st|showme'},
2078 'SQUARE':{'lt': 'kvadratas', 'th': 'สี่เหลี่ยมจัตุรัส', 'sid': 'isikuwere', 'fi': 'neliö', 'ro': 'square|pătrat', 'lv': 'kvadrāts', 'kn': 'ಚೌಕ', 'hsb': 'kwadrat', 'tr': 'kare', 'es': 'cuadrado', 'vec': 'cuadrato', 'el': 'τετράγωνο|square', 'hr': 'kvadrat', 'cs': 'čtverec', 'de': 'quadrat', 'mn': 'квадрат', 'he': 'ריבוע', 'nl': 'vierkant', 'hu': 'négyzet', 'hi': 'वर्ग', 'ml': 'സമചതുരം', 'gu': 'ચોરસ', 'my': 'စတုရန်း', 'ko': '정사각형', 'zh_TW': '正方形|方|square', 'mr': 'चौरस', 'ru': 'квадрат', 'sl': 'kvadrat', 'bn_IN': 'বর্গক্ষেত্র', 'am': 'ስኴር', 'et': 'ruut', 'uk': 'квадрат', 'pt_BR': 'quadrado', 'kk': 'шаршы', 'te': 'చతురస్రము', 'br': 'karrez', 'is': 'ferningur', 'km': 'ការេ', 'nb': 'kvadrat|square', 'bs': 'kvadrat', 'eu': 'koadroa', 'cy': 'sgwâr', 'pa_IN': 'ਵਰਗ', 'ast': 'cuadráu', 'gug': 'cuadrado', 'vi': 'Vuông', 'as': 'বৰ্গ', 'gd': 'ceàrnag', 'or': 'ବର୍ଗାକାର', 'ja': '正方形|square', 'nn': 'kvadrat|square', 'fr': 'carré', 'be': 'квадрат', 'sq': 'katror', 'oc': 'carrat', 'gl': 'cadrado', 'ar': 'مربع', 'en_US': 'square', 'sk': 'štvorec', 'zh_CN': '正方形|方|square', 'eo': 'kvadrato', 'ta': 'சதுரம்', 'ca_valencia': 'quadrat', 'ne': 'वर्ग', 'ca': 'quadrat', 'si': 'සමචතුරශ්\u200dරය', 'ug': 'كۋادرات', 'ka': 'კვადრატი'},
2079 'LOG10':{'zh_TW': '對數|log10', 'zh_CN': '对数|log10', 'ar': 'لوغاريثم_عشري', 'en_US': 'log10', 'ug': 'لوگارىفما|log10', 'am': 'ሎግ10', 'he': 'לוגריתם_10'},
2080 'FILL':{'lt': 'spalvink', 'th': 'เติม', 'sid': 'wonshi', 'fi': 'täytä', 'ro': 'fill|umplere', 'lv': 'aizpildīt', 'kn': 'ತುಂಬಿಸು', 'hsb': 'pjelnić', 'tr': 'doldur', 'es': 'relleno|rellenar', 'vec': 'Inpienasion', 'el': 'γέμισμα|fill', 'hr': 'ispuni', 'cs': 'vyplň', 'de': 'füllen', 'he': 'מילוי', 'nl': 'vullen', 'hu': 'tölt', 'hi': 'भरें', 'ml': 'നിറയ്ക്കുക', 'gu': 'ભરો', 'my': 'ဖြည့်ပါ', 'ko': '채우기', 'zh_TW': '填入|fill', 'mr': 'भरा', 'ru': 'заливка', 'sl': 'zapolni', 'bn_IN': 'পূরণ করুন', 'am': 'መሙያ', 'et': 'täida', 'uk': 'заповнення', 'pt_BR': 'pintar|pinte|preencher', 'kk': 'толтыру', 'te': 'నింపు', 'br': 'leuniañ', 'is': 'fylling', 'km': 'បំពេញ', 'nb': 'fyll|fill', 'bs': 'popuni', 'eu': 'bete', 'cy': 'llanw', 'pa_IN': 'ਭਰੋ', 'ast': 'rellenar', 'gug': 'myenyhẽ', 'oc': 'emplenar', 'as': 'পূৰ্ণ কৰক', 'or': 'ପୁରଣ କରନ୍ତୁ', 'ja': '塗りつぶし|fill', 'nn': 'fyll|fill', 'fr': 'remplir', 'be': 'запаўненне', 'sq': 'mbush', 'gl': 'encher', 'ar': 'املأ', 'ug': 'تولدۇر', 'sk': 'výplň', 'zh_CN': '填充|fill', 'eo': 'plenigu', 'ta': 'நிரப்பு', 'ca_valencia': 'omple|emplena', 'ne': 'भर्नुहोस्', 'ca': 'omple|emplena', 'dgo': 'भराई', 'en_US': 'fill', 'ka': 'შევსება'},
2081 'SILVER':{'lt': 'sidabrinė', 'sid': 'siwiila', 'fi': 'hopea', 'ro': 'silver|argintiu', 'lv': 'sudraba', 'kn': 'ಬೆಳ್ಳಿ', 'hsb': 'slěbro', 'tr': 'gümüş', 'es': 'plata', 'vec': 'arzento', 'el': 'ασημί|silver', 'hr': 'srebrno', 'cs': 'stříbrná', 'sr_Latn': 'srebrna', 'he': 'כסף', 'nl': 'zilver', 'de': 'silber', 'gu': 'ચાંદી', 'ko': '은색', 'zh_TW': '銀灰|銀|silver', 'mr': 'चंदेरी', 'ru': 'серебряный', 'sl': 'srebrna', 'bn_IN': 'রূপালী', 'am': 'ብር', 'et': 'hõbedane', 'uk': 'срібний', 'pt_BR': 'prata', 'kk': 'күміс', 'te': 'సిల్వర్', 'br': 'argant', 'is': 'silfur', 'km': 'ប្រាក់', 'nb': 'sølv|silver', 'bs': 'srebrena', 'eu': 'zilarra', 'hu': 'világosszürke|ezüst', 'cy': 'arian', 'ast': 'plata', 'gug': 'plata', 'as': 'ৰূপ', 'gd': 'airgid', 'or': 'ସିଲଭର', 'ja': '銀|silver', 'nn': 'sølv|silver', 'fr': 'argent', 'be': 'срэбны', 'gl': 'prata', 'ar': 'فضي', 'en_US': 'silver', 'sk': 'strieborná', 'sr': 'сребрна', 'eo': 'arĝenta', 'ta': 'சில்வர்', 'ca_valencia': 'plata|argent', 'ca': 'plata|argent', 'zh_CN': '银|银色|silver'},
2082 'VIOLET':{'lt': 'alyvų', 'sid': 'hamara', 'fi': 'violetti', 'lv': 'violets', 'kn': 'ನೇರಳೆ', 'hsb': 'fijałkojty', 'tr': 'menekşe', 'es': 'violeta', 'el': 'βιολετί|violet', 'hr': 'ljubičasta', 'cs': 'fialová', 'sr_Latn': 'ljubičasta', 'he': 'סגולעדין', 'de': 'violett', 'hi': 'बैंगनी', 'ml': 'വയലറ്റ്', 'gu': 'જાંબલી', 'my': 'ခရမ်းရောင်', 'ko': '보라색', 'zh_TW': '紫蘿蘭|藍紫|violet', 'mr': 'गडद जांभळा', 'ru': 'лиловый', 'sl': 'vijolična', 'bn_IN': 'বেগুনী', 'am': 'ወይን ጠጅ', 'et': 'violetne', 'uk': 'фіалковий', 'pt_BR': 'violeta', 'kk': 'күлгін', 'te': 'వంకాయరంగు', 'br': 'mouk', 'is': 'fjólublátt', 'km': 'ស្វាយ', 'bs': 'ljubičasta', 'eu': 'bioleta', 'hu': 'ibolyakék|ibolya|viola', 'cy': 'fioled', 'pa_IN': 'ਵੈਂਗਣੀ', 'ast': 'violeta', 'gug': 'violeta', 'vi': 'Tím xanh', 'as': 'বেঙুনীয়া', 'gd': 'purpaidh', 'or': 'ବାଇଗଣି', 'ja': 'すみれ色|バイオレット|ヴァイオレット|violet', 'nn': 'fiolett|violet', 'nb': 'fiolett|violet', 'be': 'бэзавы', 'gl': 'violeta', 'ar': 'بنفسجي', 'en_US': 'violet', 'sk': 'Fialová', 'sr': 'љубичаста', 'zh_CN': '紫罗兰|蓝紫|violet', 'eo': 'viola', 'ta': 'ஊதா', 'ca_valencia': 'violat|violeta', 'ne': 'बैजनी', 'ca': 'violat|violeta', 'si': 'ජම්බුල වර්ණය', 'ug': 'بىنەپشە', 'ka': 'იისფერი'},
2083 'ERR_BLOCK':{'lt': 'Klaida (per daug arba per mažai tarpų skliausteliuose?)', 'sid': 'Soro (qoqqowubbate aana ledote woy hawamme fooquwa?)', 'fi': 'Virhe (liikaa tai liian vähän välejä sulkumerkkien vieressä?)', 'ro': 'Eroare (spații sau paranteze în plus sau lipsă?)', 'lv': 'Kļūda (liekas vai trūkstošas atstarpes pie iekavām?)', 'kn': 'ದೋಷ (ಆವರಣಗಳಲ್ಲಿ ಹೆಚ್ಚುವರಿ ಅಂತರಗಳು ಇವೆಯೆ ಅಥವ ಕಾಣಿಸುತ್ತಿಲ್ಲವೆ?)', 'hsb': 'Zmylk (přidatne abo falowace mjezoty pola spinkow?)', 'es': 'Error (¿faltan o sobran espacios en los corchetes?)', 'vec': 'Eror (spasi in pì o in manco so łe parèntezi?)', 'el': 'Σφάλμα (πρόσθετα ή ελλείποντα κενά στις παρενθέσεις;)', 'sv': 'Fel (för många eller saknade blanksteg vid parenteser?)', 'hr': 'Greška (ima previše ili nedostaje razmaka u zagradama?)', 'cs': 'Chyba (přebývající nebo chybějící mezery u závorek?)', 'sr_Latn': 'Greška (mogući višak ili manjak razmaka uz zagrade?)', 'pl': 'Błąd (nadmiarowe lub brakujące spacje w nawiasach?)', 'he': 'שגיאה (יכול להיות שיש יותר מדי או שאין רווחים עם הסוגריים?)', 'nl': 'Error (extra of ontbrekende spaties bij haakjes?)', 'de': 'Fehler (zusätzliche oder fehlende Leerstelle bei Klammern?)', 'hi': 'त्रुटि (ब्रैकेट में अतिरिक्त या अनुपस्थित स्थान?)', 'ml': 'പിശക്', 'id': 'Galat (spasi ekstra atau kurang pada kurung?)', 'gu': 'ભૂલ (વધારાની અથવા ગેરહાજર જગ્યાઓ કૌંસમાં છે?)', 'ko': '오류 (괄호안에 불필요하게 추가되었거나 누락된 빈칸)', 'zh_TW': '錯誤 (括弧中有額外空格或遺漏空格?)', 'et': 'Viga (liiga palju või vähe tühikuid sulgude juures?)', 'ru': 'Ошибка (лишние или недостающие пробелы в скобках?)', 'sl': 'Napaka (odvečni ali manjkajoči presledki pri oklepajih?)', 'bn_IN': 'ত্রুটি (ব্র্যাকেটে অতিরিক্ত বা অনুপস্থিত স্পেস?)', 'am': 'ስህተት (ተጨማሪ ወይንም በቅንፉ ውስጥ ባዶ ቦታ የለም?)', 'mr': 'त्रुटी (ब्रॅकेट्सकडील अगाउ किंवा न आढळलेली मोकळी जागा?)', 'uk': 'Помилка (надлишок або нестача пробілів у дужках?)', 'pt_BR': 'Erro (há espaços faltando ou a mais nos colchetes?)', 'kk': 'Қате (жақша ішіндегі бос аралықтар артық немесе жетіспейді?)', 'te': 'దోషం (బ్రాకెట్ల వద్ద అదనపు లేదా లేని ఖాళీలు వున్నాయా?)', 'br': "Fazi (esaouioù a vank pe a zo re etre ar c'hrommelloù ?)", 'is': 'Villa (vantar eða er ofaukið bilum við sviga?)', 'km': 'កំហុស (បាត់\u200b ឬ\u200bមាន\u200bចន្លោះ\u200bបន្ថែម\u200bនៅ\u200bវង់\u200bក្រចក?)', 'nb': 'Feil (ekstra eller manglende mellomrom ved parenteser?)', 'bg': 'Грешка (излишни или липсващи интервали при скоби?)', 'bs': 'Greška (viška ili fali razmaka u ragradama?)', 'eu': 'Errorea (zuriuneak soberan edo faltan parentesietan?)', 'hu': 'Hiba (hiányzó vagy felesleges szóköz a kapcsos zárójelnél?)', 'cy': 'Gwall (bylchau ychwanegol neu goll wrth y cromfachau?)', 'ast': 'Error (¿sobren o falten espacios nos paréntesis?)', 'it': 'Errore (spazi aggiuntivi o mancanti alle parentesi?)', 'tr': 'Hata (köşeli ayraçlarda fazladan veya eksik boşluk?)', 'oc': 'Error (espacis suplementaris o mancants entre las parentèsis ?)', 'da': 'Fejl (ekstra eller manglende mellemrum ved kantede parenteser?)', 'as': 'ত্ৰুটি (ব্ৰেকেটসমূহত অতিৰিক্ত অথবা সন্ধানহিন স্পেইচ?)', 'gd': 'Mearachd (cus àitichean no feadhainn a dhìth aig na bracaidean?)', 'or': 'ତ୍ରୁଟି (ବନ୍ଧନିଗୁଡ଼ିକରେ ଅତିରିକ୍ତ କିମ୍ବା ଅନୁପସ୍ଥିତ ଖାଲିସ୍ଥାନ ଅଛି?)', 'ja': 'エラー(括弧の辺りにスペースが重複または不足しているかもしれません)', 'nn': 'Feil (Kan vera feil bruk av mellomrom ved parentesar)', 'fr': 'Erreur (espaces supplémentaires ou manquants entre les parenthèses ?)', 'pt': 'Erro (espaços em falta ou a mais nos parênteses?)', 'gl': 'Erro (espazos extra ou que faltan nas parénteses?)', 'ar': 'خطأ (مسافات إضافية أو مفقودة في الأقواس؟)', 'en_US': 'Error (extra or missing spaces at brackets?)', 'sk': 'Chyba (nadbytočné nebo chýbajúce medzery pri zátvorkách?)', 'sr': 'Грешка (могући вишак или мањак размака уз заграде?)', 'zh_CN': '错误 (括号处多用或少用了空格?)', 'eo': 'Eraro (ekstra aŭ mankanta spaceto ĉe krampoj?)', 'ta': 'பிழை (பிறையடைப்புகளில் இடைவெளிகள் கூடுதலாக அல்லது விடுபட்டுள்ளதா?)', 'ca_valencia': "S'ha produït un error (espais extra o omesos als parèntesis?)", 'ga': 'Earráid (spásanna breise nó ar iarraidh in aice leis na lúibíní?)', 'ca': "S'ha produït un error (espais extra o omesos als parèntesis?)", 'be': 'Памылка (лішнія ці недастатковыя прабелы ў дужках?)', 'ug': 'خاتالىق (تىرناقتا بوشلۇق ئاز ياكى كۆپ؟)'},
2084 'TURNLEFT':{'lt': 'kairėn|kr', 'th': 'ซ้าย|เลี้ยวซ้าย|lt', 'sid': 'gura|guraraqole|gr', 'fi': 'vasemmalle|vas', 'ro': 'left|turnleft|lt|stânga', 'lv': 'pa_kreisi|kreisi|gk', 'kn': 'ಎಡ|ಎಡಕ್ಕೆ ತಿರುಗಿಸು|lt', 'hsb': 'nalěwo|nl', 'tr': 'sol|soladön|sl', 'es': 'izquierda|giraizquierda|iz|gi', 'el': 'αριστερά|στροφήαριστερά|αρ|left|turnleft|lt', 'hr': 'lijevo|okreni lijevo|li', 'cs': 'vlevo|vl', 'de': 'links|li', 'he': 'שמאלה|לפנותשמאלה|פנייהשמאלה|שמ', 'nl': 'links|linksaf|ls', 'hu': 'balra|b', 'ko': '왼쪽|왼쪽으로회전|lt', 'zh_TW': '左|左轉|left|turnleft|lt', 'mr': 'डावे|डावीकडे वळा|lt', 'ru': 'влево|поворот_налево|л', 'sl': 'levo|obrnilevo|lv', 'am': 'ግራ|ወደ ግራ ማዟሪያ|ወደ ግራ', 'et': 'vasakule|vasakpööre|v', 'uk': 'ліворуч|поворот_ліворуч|лв', 'pt_BR': 'paraEsquerda|pe|girarEsquerda|giraEsquerda', 'kk': 'солға|солға_бұрылу|с', 'km': 'ឆ្វេង|turnleft|lt', 'nb': 'venstre|snu venstre|ve', 'bs': 'lijevo|skrenilijevo|lt', 'eu': 'ezkerra|ezkerrera|ezk', 'ast': 'izquierda|xiraizquierda|xi', 'gug': 'asúpe|jereasúpe|as', 'or': 'ବାମକୁ|ବାମକୁ ଯାଆନ୍ତୁ|lt', 'ja': '左|左に曲がる|left|turnleft|lt', 'nn': 'venstre|snu venstre|ve|left', 'fr': 'gauche|tournegauche|ga', 'be': 'улева|паварот_улева|лв', 'sq': 'majtaj|kthehumajtas|lt', 'gl': 'esquerda|voltaesquerda|lt', 'ar': 'لليسار', 'en_US': 'left|turnleft|lt', 'sk': 'vľavo|vl', 'eo': 'maldekstren|turnu_liven|lt', 'ca_valencia': 'esquerra|giraesquerra|gira.esquerra|ge', 'ca': 'esquerra|giraesquerra|gira.esquerra|ge', 'zh_CN': '左|左转|left|turnleft|lt'},
2085 'NAVY':{'lt': 'jūros', 'sid': 'baaruwolqa', 'fi': 'laivasto', 'lv': 'tumšzils', 'kn': 'ಗಾಢಬೂದು ನೀಲಿ', 'hsb': 'ćmowomódry', 'tr': 'lacivert', 'es': 'azul.marino|marino', 'vec': 'blè marina', 'el': 'θαλασσί|navy', 'hr': 'tamnoplava', 'cs': 'tmavomodrá', 'sr_Latn': 'mornarsko plava', 'he': 'כחולכהה', 'nl': 'navyblauw', 'de': 'dunkelblau', 'hi': 'नेवी', 'ml': 'നേവി', 'gu': 'નેવી', 'ko': '군청색', 'zh_TW': '海藍|靛|深藍|navy', 'mr': 'नेव्हि', 'ru': 'тёмно-синий', 'sl': 'mornarskomodra', 'bn_IN': 'অাকাশি', 'am': 'የባህር ኃይል', 'et': 'meresinine', 'uk': 'темно-синій', 'pt_BR': 'marinho', 'kk': 'қою_көк', 'te': 'నావి', 'br': 'glaz mor', 'is': 'flotablátt', 'km': 'ខៀវ\u200bចាស់', 'bs': 'mornarska', 'eu': 'itsasurdina', 'hu': 'sötétkék', 'cy': 'glas y llynges', 'ast': 'azulmarín|marín', 'gug': 'hovy.marino|marino', 'as': 'ইষৎনীলা', 'gd': "gorm a' chabhlaich", 'or': 'ଗାଢ଼ ନୀଳ', 'ja': '濃い青|ネイビー|navy', 'nn': 'marineblå|navy', 'nb': 'marineblå|navy', 'be': 'цёмна-сіні', 'gl': 'mariño', 'ar': 'أزرق_بحري', 'en_US': 'navy', 'sk': 'tmavomodrá', 'sr': 'морнарско плава', 'zh_CN': '海蓝|深蓝|navy', 'eo': 'malhelblua', 'ta': 'நேவி', 'ca_valencia': 'blau.marí|marí', 'ca': 'blau.marí|marí', 'oc': 'blaumarina'},
2086 'PENCAP':{'lt': 'pieštuko.pabaiga|linijos.pabaiga|pp', 'uk': 'шапка пера|шапка лінії', 'ja': 'ペンのはじ|線のはじ|linecap', 'pt_BR': 'mudarPontaDoLápis|mPonLa|mPonLi', 'kk': 'сызық_басы|сызық_аяғы', 'fi': 'viivanpää', 'br': 'pennkreion|pennlinenn', 'ro': 'pencap|linecap|capătstilou', 'fr': 'coiffecrayon|coiffeligne', 'pa_IN': 'ਪੈੱਨ ਕੈਪIਲਾਈਨ ਕੈਪ', 'kn': 'ಲೇಖನಿಕ್ಯಾಪ್|ಸಾಲಿನಕ್ಯಾಪ್', 'eu': 'lumaestalkia|marraestalkia', 'hr': 'vrh olovke|vrh linije', 'es': 'fin.línea|punta.línea|fl', 'el': 'άκρογραφίδας|άκρογραμμής|pencap|linecap', 'lv': 'spalvas_gals|līnijas_gals', 'ast': 'finllapiz|finllinia', 'gug': 'tapabolígrafo|kyta.línea', 'oc': 'coifagredon|coifalinha', 'cs': 'zakončenípera|zakončeníčáry', 'de': 'stiftende|linienende|se|le', 'tr': 'kalemyazısı|satıryazısı', 'nl': 'peneinde|lijneinde', 'he': 'סיומתעט|סיומתקו', 'hsb': 'kónčkpisaka|linijowykónčk|kp|lk', 'nn': 'linjeende|pencap|linecap', 'nb': 'linjeende|pencap|linecap', 'hu': 'tollhegy|vonalvég', 'gl': 'rematelápis|remateliña', 'en_US': 'pencap|linecap', 'sk': 'zakončeniepera|zakončeniečiary|zp|zč', 'ko': '펜끝|선끝', 'eo': 'plumĉapo/liniĉapo', 'ca_valencia': 'tap.llapis|final.línia|extrem.línia', 'zh_TW': '筆端帽|線端帽|線端|pencap|linecap', 'et': 'jooneots', 'zh_CN': '笔帽|线帽|笔端帽|线端帽|pencap|linecap', 'ru': 'угол_пера|угол_линии', 'sl': 'konicaperesa|konicačrte', 'ug': 'قەلەم ئىزى|سىزىق ئىزى|pencap|linecap', 'am': 'የብዕር መገናኛ |የመስመር መገናኛ', 'ca': 'tap.llapis|final.línia|extrem.línia'},
2087 'GLOBAL':{'lt': 'išorinis', 'sid': 'kalqe', 'sk': 'globálne', 'kk': 'жалпы', 'fi': 'yhteinen', 'br': 'hollek', 'is': 'víðvært', 'km': 'សកល\u200b', 'uk': 'загальне', 'lv': 'globāls', 'kn': 'ಜಾಗತಿಕ', 'hsb': 'globalny', 'tr': 'küresel', 'ja': 'どこからでも見える|グローバル|global', 'el': 'καθολικό|global', 'hr': 'opći', 'cs': 'globální', 'as': 'বিশ্বব্যাপী', 'nl': 'globaal', 'bs': 'opšte', 'he': 'כללי', 'eu': 'globala', 'hu': 'globális|globálisváltozó|globvál', 'hi': 'वैश्विक', 'cy': 'byd eang', 'gu': 'વૈશ્વિક', 'en_US': 'global', 'te': 'గ్లోబల్', 'ko': '전역', 'or': 'ଜାଗତିକ', 'ar': 'عمومي', 'zh_TW': '全域|共用|global', 'mr': 'ग्लोबल', 'eo': 'ĉie', 'zh_CN': '全局|共用|global', 'ru': 'общее', 'sl': 'globalno', 'bn_IN': 'গ্লোবাল', 'am': 'አለም አቀፍ', 'et': 'üldine'},
2088 'ERR_INDEX':{'lt': 'Rodyklė už ribų', 'sid': 'Hakkageeshshu gobayiidi mashalaqisaancho.', 'fi': 'Indeksimuuttuja arvoalueen ulkopuolella.', 'ro': 'Index în afara intervalului.', 'lv': 'Indekss ir ārpus diapazona.', 'kn': 'ಸೂಚಿಯು ವ್ಯಾಪ್ತಿಯ ಹೊರಗಿದೆ.', 'hsb': 'Indeks zwonka wobłuka.', 'es': 'Índice fuera del intervalo.', 'vec': "Ìndeze fora de l'area.", 'el': 'Δείκτης εκτός περιοχής.', 'sv': 'Indexet ligger utanför intervallet.', 'hr': 'Indeks je izvan raspona.', 'cs': 'Index mimo rozsah.', 'sr_Latn': 'indeksiranje van opsega.', 'pl': 'Indeks poza zakresem.', 'he': 'האינדקס מחוץ לטווח.', 'nl': 'Index buiten gedefinieerd bereik.', 'de': 'Index außerhalb des Bereichs.', 'hi': 'अनुक्रमणिका दायरे से बाहर है.', 'ml': 'സൂചിക പരിധിയ്ക്കു് പുറത്തു്', 'id': 'Indeks di luar jangkauan.', 'gu': 'અનુક્રમણિકા વ્યાખ્યાયિત મર્યાદાની બહાર છે.', 'ko': '범위 외의 인덱스', 'zh_TW': '索引超出範圍。', 'et': 'Indeks vahemikust väljas.', 'ru': 'Индекс вне диапазона.', 'sl': 'Kazalo je izven območja.', 'bn_IN': 'সূচি মান সীমাবহির্ভূত।', 'am': 'ማውጫው ከተወሰነው ውጪ ነው', 'mr': 'इंडेक्स आउट ऑफ रेंज.', 'uk': 'Індекс поза діапазоном.', 'pt_BR': 'Índice fora do intervalo.', 'kk': 'Индекс ауқымнан тыс.', 'te': 'విషయసూచిక విస్తృతి బయటవుంది.', 'br': 'Ibil er maez eus al lijorenn.', 'is': 'Vísir er ekki innan skilgreinds sviðs.', 'km': 'លិបិក្រម\u200bក្រៅ\u200bជួរ។', 'nb': 'Indeksen er utenfor området.', 'bg': 'Индекс извън обхвата.', 'bs': 'Indeks van opsega.', 'eu': 'Indizea barrutitik kanpo.', 'hu': 'Nem létező elemre hivatkozás.', 'cy': "Mynegai tu allan o'r ystod.", 'ast': 'Índiz fuera de rangu.', 'it': "Indice fuori dall'area.", 'tr': 'Dizin aralık dışında.', 'oc': 'Indèx en defòra de la plaja.', 'da': 'Indeks uden for tilladt område.', 'as': 'সূচী বিস্তাৰৰ বাহিৰ।', 'gd': 'Tha an clàr-amais taobh a-muigh na rainse.', 'or': 'ଅନୁକ୍ରମଣିକା ପରିସର ବାହାରେ ଅଛି।', 'ja': 'インデックスが範囲外です。', 'nn': 'Indeksen er utanfor området.', 'fr': 'Index en dehors de la plage.', 'pt': 'Índice fora do intervalo', 'gl': 'Índice fóra de intervalo.', 'ar': 'الفهرس خارج المجال.', 'en_US': 'Index out of range.', 'sk': 'Index je mimo rozsahu.', 'sr': 'индексирање ван опсега.', 'zh_CN': '索引越界。', 'eo': 'Indekso ekster amplekso.', 'ta': 'குறியீடு வரம்பைத் தாண்டியுள்ளது.', 'ca_valencia': "L'índex és fora de l'interval.", 'ga': 'Innéacs as raon.', 'ca': "L'índex és fora de l'interval.", 'be': 'Індэкс па-за абсягам.', 'ug': 'ئىندېكىس دائىرىدىن ھالقىدى.'},
2089 'IN':{'lt': 'kur', 'th': 'น.', 'sid': 'giddo', 'zu': 'phakathi', 'fi': ':ssa|:ssä', 'mk': 'инчи', 'ro': 'in|în', 'lv': 'iekš', 'as': 'ইন', 'hsb': 'w', 'xh': 'ngaphakathi', 'el': 'στο', 'dz': 'ཨའི་ཨེན།', 'hr': 'dolazno', 'tn': 'gare', 'cs': 'z', 'he': 'בתוך', 'eo': 'en', 'hu': '-ban|-ben', 'hi': 'इंच', 'nso': 'go', 'mn': 'дотор', 'ts': 'endzeni', 'sd': '۾', 'zh_TW': '自|in', 'mr': 'इन', 'bo': 'དབྱིན་ཚུན།', 'mai': 'इँच', 'sl': 'v', 'bn_IN': 'ইঞ্চি', 'am': 'ኢንች', 'et': 'hulgas', 'uk': 'дюйм', 'kmr_Latn': 'înç', 'pt_BR': 'em', 'kk': 'ішінде', 'te': 'లోపల', 'af': 'dm', 'is': 'í', 'tg': 'ин', 'km': 'គិត\u200bជា', 'nb': 'tommer|in', 'kok': 'इंच', 'bs': 'u', 'eu': 'hemen', 'sw_TZ': 'katika', 'ks': 'میں', 'cy': 'mod', 'my': 'လက်မ', 'ast': 'en', 'gug': 'en', 'fa': 'اینچ', 'lo': 'ໃນ', 'or': 'ରେ', 'gd': 'òirleach', 'ru': 'в', 'ja': 'を次から取り出して|in', 'nn': 'i|in', 'fr': 'dans', 'br': 'e', 'oc': 'dins', 'gl': 'pol', 'ar': 'في', 'ug': 'ديۇيم', 'es': 'en', 'zh_CN': '自|in', 'bn': 'ইঞ্চি', 'ta': 'அங்.', 'ca_valencia': 'a|en', 'ca': 'a|en', 'dgo': 'इं', 'uz': 'dyuym', 'mni': 'ইন', 'en_US': 'in', 'ka': 'დი'},
2090 'DECIMAL':{'lt': ',', 'hsb': ',', 'nb': ',', 'hu': ',', 'fi': ',', 'en_US': '.', 'nn': ',', 'ca_valencia': ',', 'ca': ',', 'et': ',', 'ast': ',', 'cs': ',', 'de': ',', 'eo': ',', 'sl': ','},
2091 'CONTINUE':{'lt': 'tęsk', 'sid': 'albisufi', 'fi': 'jatka', 'ro': 'continue|continuă', 'lv': 'turpināt', 'kn': 'ಮುಂದುವರಿಸು', 'hsb': 'dale', 'tr': 'devam', 'es': 'continuar', 'el': 'συνέχεια|continue', 'hr': 'nastavi', 'cs': 'pokračuj', 'de': 'weiter', 'he': 'המשך|להמשיך', 'nl': 'doorgaan|verdergaan', 'hu': 'újra', 'hi': 'जारी रखें', 'ml': 'തുടരുക', 'gu': 'ચાલુ રાખો', 'ko': '계속', 'zh_TW': '繼續|續|continue', 'mr': 'कंटिन्यु', 'ru': 'продолжить', 'sl': 'nadaljuj', 'bn_IN': 'পরবর্তী (~C)', 'am': 'ይቀጥሉ', 'et': 'jätka', 'uk': 'продовжити', 'pt_BR': 'continuar|continue', 'kk': 'жалғастыру', 'te': 'కొనసాగించు', 'br': "kenderc'hel", 'is': 'áfram', 'km': 'បន្ត', 'bs': 'nastavak', 'eu': 'jarraitu', 'cy': 'parhau', 'pa_IN': 'ਜਾਰੀ ਰੱਖੋ', 'ast': 'siguir', 'gug': 'segui', 'vi': 'Tiếp tục', 'as': 'অব্যাহত ৰাখক', 'or': 'ଚାଲୁରଖ', 'ja': 'はじめにもどる|continue', 'nn': 'hald fram|continue', 'nb': 'fortsett|continue', 'sq': 'vazhdo', 'oc': 'contunhar', 'gl': 'continuar', 'ar': 'تابع', 'en_US': 'continue', 'sk': 'Pokračovať', 'zh_CN': '继续|continue', 'eo': 'daŭrigu', 'ta': 'தொடர்', 'ca_valencia': 'continua', 'ne': 'जारी राख्नुहोस्', 'ca': 'continua', 'si': 'දිගටම කරගෙන යන්න (~C)', 'my': 'ဆက်လုပ်ပါ', 'ka': 'გაგრძელება'},
2092 'YELLOW':{'lt': 'geltona', 'th': 'เหลือง', 'sid': 'baqqala', 'fi': 'keltainen', 'ro': 'yellow|galben', 'lv': 'dzeltens', 'kn': 'ಹಳದಿ', 'hsb': 'žołty', 'tr': 'sarı', 'es': 'amarillo', 'vec': 'zało', 'el': 'κίτρινο|yellow', 'hr': 'žuta', 'cs': 'žlutá', 'sr_Latn': 'žuta', 'he': 'צהוב', 'nl': 'geel', 'de': 'gelb', 'hi': 'पीला', 'ml': 'മഞ്ഞ', 'gu': 'પીળો', 'my': 'အဝါ', 'ko': '노랑', 'zh_TW': '黃|yellow', 'mr': 'पिवळा', 'ru': 'жёлтый', 'sl': 'rumena', 'bn_IN': 'হলুদ', 'am': 'ቢጫ', 'et': 'kollane', 'uk': 'жовтий', 'pt_BR': 'amarelo', 'kk': 'сары', 'te': 'పసుపు', 'br': 'melen', 'is': 'gult', 'km': 'លឿង', 'nb': 'gul|yellow', 'bs': 'žuta', 'eu': 'horia', 'hu': 'sárga', 'cy': 'melyn', 'pa_IN': 'ਪੀਲਾ', 'ast': 'mariellu', 'gug': "sa'yju", 'vi': 'Vàng', 'as': 'হালধীয়া', 'gd': 'buidhe', 'or': 'ହଳଦିଆ', 'ja': '黄|yellow', 'nn': 'gul|yellow', 'fr': 'jaune', 'be': 'жоўты', 'sq': 'e verdhë', 'oc': 'jaune', 'gl': 'amarelo', 'ar': 'أصفر', 'en_US': 'yellow', 'sk': 'žltá', 'sr': 'жута', 'zh_CN': '黄|黄色|yellow', 'eo': 'flava', 'ta': 'மஞ்சள்', 'ca_valencia': 'groc', 'ne': 'पहेलो', 'ca': 'groc', 'si': 'කහ', 'ug': 'سېرىق', 'ka': 'ყვითელი'},
2093 'SORTED':{'fi': 'lajiteltu', 'kn': 'ವಿಂಗಡಿಸಲಾದ', 'xh': 'hlela-hlela', 'hr': 'razvrstano', 'de': 'sortiert', 'he': 'עםמיון', 'nl': 'gesorteerd', 'hu': 'rendez', 'ml': 'വകതിരിച്ച', 'st': 'hlophilwe', 'ko': '정렬', 'mr': 'सॉर्टेड', 'mai': 'सोर्ट कएल गेल', 'am': 'ተለይቷል', 'et': 'sorditud', 'kk': 'сұрыпталған', 'te': 'క్రమబద్దీకరించబడినది', 'af': 'gesorteer', 'tg': 'низомнокшуда', 'km': 'បាន\u200bតម្រៀប', 'fr': 'trié', 'kok': 'वर्गीकृत', 'eu': 'ordenatua', 'pa_IN': 'ਲੜੀਬੱਧ', 'vi': 'đã sắp xếp', 'lo': 'ຈັດລຽງ', 'gd': 'air a sheòrsachadh', 'rw': 'bishunguwe', 'hsb': 'sortěrowany', 'nb': 'sortert|sorted', 'sq': 'klasifikuar', 'om': "foo'amaa", 'en_US': 'sorted', 'sk': 'zoradené', 'br': 'rummet', 'ta': 'அடுக்கப்பட்டது', 'dgo': 'छांटेआ', 'my': 'စနစ်တကျစီထားသည်', 'lt': 'rikiuok', 'th': 'เรียง', 'sid': 'diramino', 'zu': 'ihleliwe', 'ss': 'kuhlelekile', 'mk': 'Подредување', 'ro': 'sorted|sortat', 'lv': 'sakārtots', 'as': 'বৰ্গীকৰণ কৰি থোৱা', 'nn': 'sortert|sorted', 'es': 'ordenado', 'el': 'ταξινομημένα|sorted', 'dz': 'དབྱེ་སེལ་འབད་ཡོདཔ།', 'tn': 'bakantswe', 'cs': 'seřazeno', 'sl': 'razvrščeno', 'hi': 'छांटा हुआ', 'gu': 'ગોઠવાયેલ', 've': 'yo dzudzanywa', 'sd': 'वर्गीकृत केलेले', 'zh_TW': '排序|sorted', 'sat': 'साला आकान', 'bo': 'range_lookup', 'ru': 'отсортировано', 'nso': 'arogantšwe', 'bn_IN': 'বিন্যস্ত', 'uk': 'сортований', 'kmr_Latn': 'Rêzkirî', 'pt_BR': 'ordenado', 'bn': 'বিন্যস্ত', 'is': 'raðað', 'bs': 'sortirano', 'sa_IN': 'क्रमितम्', 'sw_TZ': 'i-liyopangwa', 'ks': 'ساٹ كرمُت', 'ast': 'ordenao', 'tr': 'sıralanmış', 'brx': 'थाखो खालाखानाय', 'mn': 'эрэмбэлэгдсэн', 'or': 'ସଜାହୋଇଥିବା', 'ja': '並び替える|ソート|sorted', 'cy': 'trefnwyd', 'nr': 'hleliwe', 'fa': 'مرتب\u200cشده', 'gl': 'ordenado', 'ar': 'افرز', 'oc': 'triat', 'zh_CN': '排序|sorted', 'eo': 'ordigita', 'ca_valencia': 'ordenat', 'ne': 'क्रमबद्व गरिएको', 'ca': 'ordenat', 'si': 'සුබෙදන ලදි', 'ts': 'xaxametiwile', 'uz': 'saralangan', 'mni': 'মথং-মনাও শেম্লবা'},
2094 'GROUP':{'lt': 'piešinys', 'sid': 'misile|mis', 'fi': 'kuva', 'ro': 'picture|pic|imagine', 'lv': 'attēls|att', 'kn': 'ಚಿತ್ರ|pic', 'hsb': 'wobraz|wb', 'tr': 'resim|res', 'es': 'imagen|img', 'el': 'εικόνα|εικ|picture|pic', 'hr': 'slika|slika', 'cs': 'obrázek|obr', 'de': 'bild', 'he': 'תמונה|תמ', 'nl': 'afbeelding|afb', 'hu': 'kép', 'ko': '사진|pic', 'zh_TW': '圖片|圖|圖組|picture|pic', 'mr': 'चित्र|पिक', 'ru': 'изображение|изо', 'sl': 'slika|sli', 'am': 'ስእል|ስእል', 'et': 'pilt', 'uk': 'зображення|зобр', 'pt_BR': 'agrupar|grupo|grp|figura', 'kk': 'сурет|сур', 'km': 'រូបភាព|pic', 'nb': 'bilde|fig|picture', 'bs': 'slika|pic', 'eu': 'irudia|irud', 'ast': 'figura|fig', 'gug': "ta'anga|img", 'oc': 'imatge|img', 'or': 'ଛବି|pic', 'ja': '図|図のグループ|picture|pic', 'nn': 'bilete|fig|picture', 'fr': 'image|ima', 'gl': 'imaxe|imx', 'ar': 'رسم|صور', 'en_US': 'picture|pic', 'sk': 'obrázok|obr', 'eo': 'bildo|b', 'ca_valencia': 'figura|fig', 'ca': 'figura|fig', 'zh_CN': '图片|图|图组|组|picture|pic|group'},
2095 'HIDETURTLE':{'lt': 'slėpk.vėžliuką|slėpkis|sl', 'sid': 'bukukaamamaaxi|bukukaamamaaxi|bm|anemaaxi', 'fi': 'piilotakonna|pk', 'ro': 'hideturtle|ht|hideme|invizibil', 'lv': 'slēpt_rupuci|sr|slēpt_mani', 'kn': 'ಆಮೆಅಡಗಿಸು|ht|ನನ್ನನ್ನುಅಡಗಿಸು', 'hsb': 'schować', 'tr': 'kaplumbağagizle|kg|gizlebeni', 'es': 'ocultartortuga|ot|ocultarme', 'el': 'απόκρυψηχελώνας|αχ|κρύψεμε|hideturtle|ht|hideme', 'hr': 'sakrikursor|sk|sakrijme', 'cs': 'skryjželvu|skryj|sž', 'de': 'verbergen', 'he': 'הסתרצב|להסתירצב|הסתרתהצב|להסתיראותי|הס', 'nl': 'verberg|vb', 'hu': 'elrejt|láthatatlan|elrejtteknőc|rejttek', 'ko': '거북이숨기기|ht|숨기기', 'zh_TW': '隱藏海龜|隱藏|hideturtle|ht|hideme', 'mr': 'हाइडटर्टल|ht|हाइडमि', 'ru': 'скрыть_черепаху|сч|скрыть_меня', 'sl': 'skrijželvo|sž|skrijme', 'am': 'ኤሊ መደበቂያ|ht|ይደብቁኝ', 'et': 'peida|peida_kilpkonn|pk', 'uk': 'сховай_черепашку|сч', 'pt_BR': 'desaparecerTat|dt|desapareçaTat|ocultarTat|escondeTat', 'kk': 'тасбақаны_жасыру|тж|мені_жасыру', 'br': 'kuzhatbaot|ht|hideme', 'nb': 'skjulmeg|sm|hideturtle', 'bs': 'sakrijkornjaču|ht|sakrijmene', 'eu': 'ezkutatudortoka|ed|ezkutatuni', 'ast': 'anubretortuga|anubrime|at', 'gug': 'mokañykarumbe|ñk|añeñomi', 'oc': 'amagartortuga|mt|amagar', 'or': 'କଇଁଛଲୁଚାଇବା|ht|hideme', 'ja': 'タートルを隠す|hideturtle|ht', 'nn': 'gøymmeg|gm|hideturtle', 'fr': 'cachetortue|ct|cachemoi', 'gl': 'agochartartaruga|at|agocharme', 'ar': 'أخف_السلحفاة|أخف', 'en_US': 'hideturtle|ht|hideme', 'sk': 'skrykorytnačku|skry|sk', 'eo': 'kaŝu_testudon|kt', 'ca_valencia': 'amaga.tortuga|oculta.tortuga|at|ot', 'ca': 'amaga.tortuga|oculta.tortuga|at|ot', 'zh_CN': '隐藏海龟|隐龟|隐藏龟|hideturtle|ht|hideme'},
2096 'PENWIDTH':{'lt': 'pieštuko.storis|linijos.storis|ps', 'sid': 'biiretebikka|biiretebaqo|xuruurubaqo|bb', 'fi': 'kynänleveys|kl', 'ro': 'pensize|penwidth|linewidth|ps|mărimestilou', 'lv': 'spalvas_izmērs|spalvas_platums|līnijas_platums|sp', 'kn': 'ಲೇಖನಿಗಾತ್ರ|ಲೇಖನಅಗಲ|ರೇಖೆಅಗಲ|ps', 'hsb': 'wulkosćpisaka|šěrokosćpisaka|šěrokosćlinije|wp|wl', 'tr': 'kalemboyutu|kalemgenişliği|satırgenişliği|kb', 'es': 'tamaño.lápiz|tl', 'el': 'μέγεθοςγραφίδας|πλάτοςγραφίδας|πλάτοςγραμμής|μγ|pensize|penwidth|linewidth|ps', 'hr': 'veličina olovke|širina olovke|širina linije|vo', 'cs': 'tloušťkapera|tloušťkačáry|tp', 'de': 'stiftbreite|linienbreite|sb|lb', 'he': 'גודלעט|עוביעט|רוחבעט|גע', 'nl': 'pengrootte|pendikte|penbreedte|pg', 'hu': 'tollvastagság|tollvastagság!|tv!?|vonalvastagság', 'ko': '펜크기|펜너비|선너비|ps', 'zh_TW': '筆大小|筆粗|線粗|pensize|penwidth|linewidth|ps', 'mr': 'पेनआकार|पेनरूंदी|रेघरूंदी|ps', 'ru': 'размер_пера|толщина_пера|толщина_линии|тл', 'sl': 'velikostperesa|širinaperesa|širinačrte|vp', 'am': 'የ ብዕር መጠን |የ ብዕር ስፋት |የ መስመር ስፋት |ps', 'et': 'pliiatsi_paksus|pliiatsi_jämedus|joonepaksus|joonelaius|jl', 'uk': 'розмір_пера|ширина_пера|ширина_лінії|рп', 'pt_BR': 'mudarEspessuraDoLápis|mEspLa', 'kk': 'қалам_өлшемі|қалам_жуандығы|сызық_жуандығы|сж', 'km': 'ទំហំ\u200bប៉ិក|penwidth|linewidth|ps', 'nb': 'pennstørrelse|pennbredde|linjebredde|ps', 'bs': 'veličinaolovke|širinaolovke|širinalinije|ps', 'eu': 'lumatamaina|lumazabalera|marrazabalera|lz', 'ast': 'llapiztamañu|llapizanchor|lliniaanchor|lt', 'gug': 'tamaño.bolígrafo|tb', 'or': 'ପେନଆକାର|ପେନଓସାର|ଧାଡ଼ିଓସାର|ps', 'mn': 'үзэгний өргөн|шугамын өргөн|үөр|шөр', 'ja': 'ペンの太さ|線の太さ|penwidth|ps', 'nn': 'pennstorleik|pennbreidd|linjebreidd|ps|pensize', 'fr': 'tailleplume|taillecrayon|largeurligne|ta', 'gl': 'estilotamaño|estilolargura|larguraliña|et', 'ar': 'حجم_القلم|عرض_القلم', 'en_US': 'pensize|penwidth|linewidth|ps', 'sk': 'hrúbkapera|hrúbkačiary|hp|hč', 'eo': 'plumlarĝo|plumgrando|pg', 'ca_valencia': 'mida.llapis|mida.línia|ml', 'ca': 'mida.llapis|mida.línia|ml', 'zh_CN': '笔大小|笔粗|线粗|pensize|penwidth|linewidth|ps'},
2097 'CLEARSCREEN':{'lt': 'valyk.vėžliuko.lauką|vvl', 'sid': 'coichaleelshalba|cl', 'fi': 'tyhjennänäyttö|tn', 'ro': 'clearscreen|cs|ștergeecran', 'lv': 'attīrīt_ekrānu|ae', 'kn': 'ತೆರೆಅಳಿಸು|cs', 'hsb': 'čisćić', 'tr': 'ekranıtemizle|cs', 'es': 'limpiar.pantalla|lp|cs', 'el': 'καθαρισμόςοθόνης|κο|clearscreen|cs', 'hr': 'očistizaslon|oz', 'cs': 'smažobrazovku|so', 'de': 'säubern', 'he': 'לנקותמסך|ניקוימסך|נקהמסך|נמ', 'nl': 'schermleegmaken|schoon|sl', 'hu': 'törölképernyő|törölkép|törölrajzlap|tr', 'ko': '화면지우기|cs', 'zh_TW': '清除畫面|清畫面|清除|clearscreen|cs', 'mr': 'क्लिअरस्क्रिन|cs', 'ru': 'очистить_экран|оэ', 'sl': 'počistizaslon|pz', 'am': 'መመልከቻ ማጽጃ|መ.ማ', 'et': 'puhasta_ekraan|pe', 'uk': 'очистити_екран|ое', 'pt_BR': 'tartaruga|tat', 'kk': 'экранды_тазарту|эт', 'br': 'skarzhañskramm|cs', 'is': 'hreinsaskjá|hs', 'km': 'សម្អាត\u200bអេក្រង់|cs', 'nb': 'tømskjermen|ts|clearscreen', 'bs': 'očistiekran|cs', 'eu': 'garbitupantaila|gp', 'ast': 'llimpiapantalla|lp', 'gug': 'monandipantalla|mp', 'or': 'ପରଦା ପରିଷ୍କାର|cs', 'ja': '画面を消す|clearscreen|cs', 'nn': 'tømskjermen|ts|clearscreen', 'fr': 'effaceécran|ee', 'gl': 'limparpantalla|lp', 'ar': 'محو_الشاشة|محو', 'en_US': 'clearscreen|cs', 'sk': 'zmažobrazovku|zo', 'eo': 'vakigi_ekranon|ek', 'ca_valencia': 'neteja.dibuix|inicia.dibuix|net|id', 'ca': 'neteja.dibuix|inicia.dibuix|net|id', 'zh_CN': '清屏|清除|clearscreen|cs'},
2098 'WHILE':{'lt': 'kol', 'sid': 'waajjo', 'fi': 'kunhan', 'ro': 'while|până', 'lv': 'kamēr', 'kn': 'ಬಿಳಿ', 'hsb': 'doniž', 'tr': 'beyaz', 'es': 'mientras', 'el': 'όσο|while', 'hr': 'bijela', 'cs': 'dokud', 'de': 'solange', 'he': 'כלעוד', 'nl': 'zolang', 'hu': 'amíg', 'hi': 'के दौरान', 'gu': 'સફેદ', 'ko': '흰색', 'zh_TW': '當|while', 'mr': 'व्हाइल', 'ru': 'пока', 'sl': 'dokler', 'bn_IN': 'যেখানে', 'am': 'ትንሽ', 'et': 'kuniks', 'uk': 'поки', 'pt_BR': 'enquanto', 'kk': 'дейін', 'te': 'జరుగుతున్నప్పుడు', 'br': 'e pad ma', 'is': 'meðan', 'nb': 'mens|while', 'bs': 'dok', 'eu': 'bitartean', 'pa_IN': 'ਚਿੱਟਾ', 'ast': 'mentanto', 'gug': 'jave', 'or': 'ଯେତେବେଳେ', 'ja': 'くりかえすのは次の間|while', 'nn': 'medan|while', 'fr': 'pendant', 'sq': 'ndërsa', 'gl': 'mentres', 'ar': 'طالما', 'en_US': 'while', 'sk': 'Biela', 'zh_CN': '当|while', 'eo': 'dum', 'ca_valencia': 'mentre', 'ne': 'सेतो', 'ca': 'mentre', 'si': 'සුදු', 'oc': 'mentre', 'ka': 'თეთრი'},
2099 'AQUA':{'lt': 'žydra', 'th': 'สีน้ำทะเล|สีฟ้าอมเขียว (Cyan)', 'sid': 'aqua|cyaan', 'fi': 'syaani', 'lv': 'gaišzils', 'kn': 'ನೀಲಿಹಸಿರು|ಹಸಿರುನೀಲಿ', 'hsb': 'akwamarinwoy|cyanowy', 'tr': 'gök mavisi', 'es': 'agua|cian', 'el': 'ανοιχτόγαλάζιο|aqua|cyan', 'hr': 'vodena|cijan', 'cs': 'azurová', 'sr_Latn': 'vodeno plava|cijan', 'he': 'ים|ציאן|מים', 'nl': 'water|cyaan', 'de': 'türkis|cyan', 'ko': '아쿠아|시안', 'zh_TW': '青藍|青|水藍|aqua|cyan', 'mr': 'ॲक्वा|सिअन', 'ru': 'голубой', 'sl': 'vodenomodra|cijanska', 'am': 'ዉሀ|አረንጓዴ', 'et': 'rohekassinine|tsüaan', 'uk': 'блакитний', 'pt_BR': 'ciano', 'kk': 'көгілдір', 'br': 'dour|cyan', 'is': 'blágrænt', 'bs': 'vodena|cyan', 'eu': 'ura|cyana', 'hu': 'ciánkék|cián', 'ast': 'agua|cian', 'gug': 'y|cian', 'or': 'ପାଣି|cyan', 'gd': 'aqcua|saidhean', 'ja': 'アクア|シアン|aqua', 'nn': 'cyanblå|cyan', 'nb': 'cyanblå|cyan', 'be': 'блакітны', 'gl': 'auga|ciano', 'ar': 'سماوي|سيان', 'en_US': 'aqua|cyan', 'sk': 'azúrová', 'sr': 'водено плава|цијан', 'zh_CN': '青|青色|aqua|cyan', 'eo': 'cejanblua', 'ca_valencia': 'cian', 'ca': 'cian', 'oc': 'aqua|cian'},
2100 'SOLID':{'lt': 'vientisas', 'th': 'ทึบ', 'sid': 'kaajjado', 'fi': 'yhtenäinen', 'ro': 'solid|continuu', 'lv': 'vienlaidu', 'kn': 'ಘನ', 'hsb': 'połny', 'tr': 'düz', 'es': 'sólido', 'el': 'συμπαγές|solid', 'hr': 'puno', 'cs': 'plná', 'de': 'voll', 'he': 'אחיד', 'nl': 'vol', 'hu': 'folyamatos', 'hi': 'ठोस', 'gu': 'ઘટ્ટ', 'ko': '단색', 'sd': 'ٺوس', 'zh_TW': '實線|solid', 'mr': 'गडद', 'sat': 'जिनिस', 'ru': 'сплошная', 'sl': 'polno', 'sa_IN': 'ठोस', 'bn_IN': 'নিরেট', 'am': 'ሙሉ', 'et': 'pidev', 'uk': 'суцільна', 'pt_BR': 'sólido', 'kk': 'бүтін', 'te': 'గట్టి', 'br': 'unvan', 'is': 'einlitt', 'km': 'តាន់', 'nb': 'ensfarget|solid', 'bs': 'čvrsto', 'eu': 'solidoa', 'cy': 'solet', 'pa_IN': 'ਗੂੜ੍ਹਾ', 'ast': 'sólidu', 'gug': 'hatã', 'vi': 'Đặc', 'as': 'কঠিন', 'gd': 'soladach', 'or': 'କଠିନ', 'ja': '実線|ふつうの線|solid', 'nn': 'einsfarga|solid', 'fr': 'plein', 'be': 'суцэльны', 'oc': 'plen', 'gl': 'sólido', 'ar': 'صلب', 'en_US': 'solid', 'sk': 'vyplnené', 'zh_CN': '实线|solid', 'eo': 'solida', 'ta': 'திடம்', 'ca_valencia': 'sòlid', 'ne': 'ठोस', 'ca': 'sòlid', 'ug': 'ئۇيۇل', 'ka': 'მყარი'},
2101 'ERR_NAME':{'lt': 'Nežinoma komanda: „%s“.', 'uk': 'Невідома назва: “%s”.', 'ja': '不明な名前: “%s”。', 'sr_Latn': 'Nepoznato ime: „%s“.', 'kk': 'Аты белгісіз: "%s".', 'fi': 'Tuntematon nimi: ”%s”.', 'ro': 'Nume necunoscut: „%s”.', 'fr': 'Nom inconnu : “%s”.', 'lv': 'Nezināms nosaukums: “%s”.', 'nn': 'Ukjend namn: «%s».', 'tr': 'Bilinmeyen ad: “%s”.', 'es': 'Nombre desconocido: «%s».', 'pt': 'Nome desconhecido: “%s”', 'el': 'Άγνωστο όνομα: “%s”.', 'bg': 'Непознато име: „%s“.', 'it': 'Nome sconosciuto: “%s”.', 'hr': 'Nepoznato ime: “%s”.', 'pt_BR': 'Nome desconhecido: “%s”', 'da': 'Ukendt navn: “%s”.', 'de': 'Unbekannter Name: „%s“.', 'gd': 'Ainm neo-aithnichte: “%s”.', 'cs': 'Neznámý název: „%s“.', 'sl': 'Neznano ime: “%s”.', 'hsb': 'Njeznate mjeno: “%s”.', 'eu': 'Izen ezezaguna: ‘%s”.', 'nb': 'Ukjent navn: «%s».', 'hu': 'Ismeretlen név: „%s”.', 'gl': 'Nome descoñecido: «%s».', 'id': 'Nama tak dikenal: "%s".', 'cy': 'Enw anhysbys: “%s”.', 'en_US': 'Unknown name: “%s”.', 'sk': 'Neznámy názov: „%s“.', 'sr': 'Непознато име: „%s“.', 'eo': 'Nekonata nomo: ‘%s”.', 'ca': 'Nom desconegut: «%s».', 'vec': 'Nome mìa conosesto: “%s”.', 'et': 'Tundmatu nimi: „%s”.', 'ru': 'Неизвестное имя: «%s».', 'be': 'Невядомая назва: “%s”.', 'zh_CN': '未知名称:“%s”。', 'am': 'ያልታወቀ ስም: “%s”.', 'nl': 'Onbekende naam: ‘%s”.'},
2102 'FONTCOLOR':{'lt': 'šrifto.spalva|teksto.spalva', 'sid': 'borangichukuula|borrotekuula|borrotekuulamme', 'fi': 'fontinväri', 'ro': 'fontcolor|textcolor|textcolour|culoarefont', 'lv': 'fonta_krāsa|teksta_krāsa', 'kn': 'ಅಕ್ಷರಶೈಲಿಬಣ್ಣ|ಪಠ್ಯಬಣ್ಣ|ಪಠ್ಯಬಣ್ಣ', 'hsb': 'pismowabarba|tekstowabarba|pb|tb', 'tr': 'yazıtipirengi|metinrengi|metinrengi', 'es': 'color.texto|color.letra', 'el': 'χρώμαγραμματοσειράς|χρώμακειμένου|fontcolor|textcolor|textcolour', 'hr': 'boja fonta|boja teksta|boja teksta', 'cs': 'barvapísma|barvatextu', 'de': 'schriftfarbe|textfarbe|schf|tf', 'he': 'צבעגופן|צבעפונט|צבעטקסט', 'nl': 'letterkleur|tekstkleur', 'hu': 'betűszín', 'ko': '글꼴색상|글자색상|글자색상', 'zh_TW': '字型顏色|文字顏色|字型色彩|文字色彩|字色|fontcolor|textcolor|textcolour', 'mr': 'फाँटरंग|मजकूररंग|मजकूररंग', 'ru': 'цвет_шрифта|цвет_текста', 'sl': 'barvapisave|barvačrk|barvabesedila', 'am': 'የ ፊደል ቀለም|የ ጽሁፍ ቀለም|የ ጽሁፍ ቀለም', 'et': 'fondi_värv|teksti_värv', 'uk': 'колір_символів|колір_тексту', 'pt_BR': 'mudarCorDaLetra|mCorLe', 'kk': 'қаріп_түсі|мәтін_түсі', 'km': 'ពណ៌\u200bពុម្ពអក្សរ|textcolor|textcolour', 'nb': 'tekstfarge|textcolor', 'bs': 'bojafonta|bojateksta|bojateksta', 'eu': 'letrakolorea|testukolorea', 'ast': 'colorlletra|colortestu', 'gug': "sa'y.moñe'ẽrã|sa'y.letra", 'or': 'ଅକ୍ଷରରୂପରଙ୍ଗ|ପାଠ୍ୟରଙ୍ଗ|textcolour', 'ja': '文字の色|fontcolor', 'nn': 'tekstfarge|textcolor', 'fr': 'couleurpolice|couleurtexte|ctexte', 'gl': 'cordeletra|cordetexto|cordetexto', 'ar': 'لون_الخط', 'en_US': 'fontcolor|textcolor|textcolour', 'sk': 'farbapísma|farbatextu|fp|ft', 'eo': 'tiparkoloro|tekstokoloro|tk', 'ca_valencia': 'color.lletra|color.text', 'ca': 'color.lletra|color.text', 'zh_CN': '文字颜色|字体颜色|字颜色|字色|fontcolor|textcolor|textcolour'},
2103 'ERR_KEY':{'lt': 'Nežinomas elementas: %s', 'sid': 'Afaminokki miila: %s', 'fi': 'Tuntematon elementti: %s', 'ro': 'Element necunoscut: %s', 'lv': 'Nezināms elements — %s', 'kn': 'ಗೊತ್ತಿರದ ಘಟಕ: %s', 'hsb': 'Njeznaty element: %s', 'tr': 'Bilinmeyen öge: %s', 'es': 'Elemento desconocido: %s', 'vec': 'Ełemento mìa conosesto: %s', 'el': 'Άγνωστο στοιχείο: %s', 'sv': 'Okänt element: %s', 'hr': 'Nepoznati element: %s', 'cs': 'Neznámý prvek: %s', 'sr_Latn': 'Nepoznati element: %s', 'pl': 'Nieznany element: %s', 'he': 'רכיב לא ידוע: %s', 'nl': 'Onbekend element %s', 'de': 'Unbekanntes Element: %s', 'hi': 'अज्ञात तत्व: %s', 'ml': 'അപരിചിതമായ എലമെന്റ്: %s', 'id': 'Elemen tak diketahui: %s', 'gu': 'અજ્ઞાત ઘટક: %s', 'ko': '알수 없는 요소: %s', 'zh_TW': '未知元素:%s', 'et': 'Tundmatu element: %s', 'ru': 'Неизвестный элемент: %s', 'sl': 'Neznan element: %s', 'bn_IN': 'অজানা স্বত্বা %s', 'am': 'ያልታወቀ አካል: %s', 'mr': 'अपरिचीत एलिमेंट: %s', 'uk': 'Невідомий елемент: %s', 'pt_BR': 'Elemento desconhecido: %s', 'kk': 'Белгісіз элемент: %s', 'te': 'తెలియని మూలకం: %s', 'br': 'Elfenn dianav : %s', 'is': 'Óþekkt stak: %s', 'km': 'មិន\u200bស្គាល់\u200bធាតុ៖ %s', 'nb': 'Ukjent element: %s', 'bg': 'Непознат елемент: %s', 'bs': 'Nepoznat element: %s', 'eu': 'Elementu ezezaguna: %s', 'hu': 'Ismeretlen elem: %s', 'cy': 'Elfen anhysbys: %s', 'ast': 'Elementu desconocíu: %s', 'it': 'Elemento sconosciuto: %s', 'gug': "Elemento ojekuaa'ỹva: %s", 'oc': 'Element desconegut : %s', 'da': 'Ukendt element: %s', 'as': 'অজ্ঞাত উপাদান: %s', 'gd': 'Eileamaid neo-aithnichte: %s', 'or': 'ଅଜଣା ଉପାଦାନ: %s', 'ja': '不明な要素: %s', 'nn': 'Ukjent element: %s', 'fr': 'Élément inconnu : %s', 'pt': 'Elemento desconhecido: %s', 'gl': 'Elemento descoñecido: %s', 'ar': 'عنصر مجهول: %s', 'en_US': 'Unknown element: %s', 'sk': 'Neznámy prvok: %s', 'sr': 'Непознати елемент: %s', 'zh_CN': '未知元素: %s', 'eo': 'Nekonata elemento: %s', 'ta': 'தெரியாத கூறு: %s', 'ca_valencia': "L'element «%s» no és conegut.", 'ga': 'Eilimint anaithnid: %s', 'ca': "L'element «%s» no és conegut.", 'be': 'Невядомы элемент: %s', 'ug': 'يوچۇن ئېلېمېنت: %s'},
2104 'INPUT':{'lt': 'įvesk', 'sid': 'eo', 'fi': 'syötä', 'ro': 'input|intrare', 'lv': 'ievade', 'kn': 'ಇನ್\u200cಪುಟ್\u200c', 'hsb': 'zapodaće', 'tr': 'girdi', 'es': 'entrada', 'el': 'είσοδος|input', 'hr': 'unos', 'cs': 'vstup', 'de': 'eingabe', 'he': 'קלט', 'nl': 'invoer', 'hu': 'be', 'hi': 'इनपुट', 'ml': 'ഇന്\u200dപുട്ട്', 'gu': 'ઈનપુટ', 'ko': '입력', 'sd': 'اِن پُٽ', 'zh_TW': '輸入|input', 'mr': 'इंपुट', 'sat': 'आदेर', 'ru': 'ввод', 'sl': 'vnos', 'bn_IN': 'ইনপুট', 'am': 'ማስገቢያ', 'et': 'sisend', 'uk': 'ввести', 'pt_BR': 'ler|leia', 'kk': 'кіріс', 'te': 'ఇన్పుట్', 'br': 'enankañ', 'is': 'inntak', 'km': '\u200bបញ្ចូល', 'nb': 'inndata|input', 'bs': 'ulaz', 'eu': 'sarrera', 'cy': 'mewnbwn', 'pa_IN': 'ਇੰਪੁੱਟ', 'ast': 'entrada', 'gug': 'jeikeha', 'vi': 'Nhập', 'or': 'ନିବେଶ', 'ja': '値を聞く|input', 'nn': 'inndata|input', 'fr': 'saisie', 'be': 'увод', 'gl': 'entrada', 'ar': 'أدخِل', 'en_US': 'input', 'sk': 'Vstup', 'zh_CN': '输入|input', 'eo': 'enigu', 'ta': 'உள்ளீடு', 'ca_valencia': 'entrada', 'ne': 'आगत', 'ca': 'entrada', 'si': 'ආදානය', 'dgo': 'इनपुट', 'oc': 'picada', 'ka': 'შეტანა'},
2105 'ITALIC':{'lt': 'kursyvas', 'sid': 'hawiitto-borro', 'fi': 'kursivointi', 'ro': 'italic|cursiv', 'lv': 'kursīvs', 'kn': 'ಇಟಾಲಿಕ್', 'hsb': 'kursiwny', 'tr': 'italik', 'es': 'cursiva', 'vec': 'corsivo', 'el': 'πλάγια|italic', 'hr': 'kurziv', 'cs': 'kurzíva', 'de': 'kursiv', 'pl': 'kursywa', 'he': 'נטוי', 'nl': 'cursief', 'hu': 'kurzív|dőlt', 'hi': 'तिरछा', 'ml': 'ചരിഞ്ഞ', 'gu': 'ઇટાલિક', 'my': 'စာလုံးစောင်း', 'ko': '이탤릭체', 'sd': 'اِٽيلڪ', 'zh_TW': '斜體|斜|italic', 'mr': 'तिरके', 'sat': 'कोचे ओलाक्', 'ru': 'курсив', 'sl': 'ležeče', 'sa_IN': 'इटेलिक', 'bn_IN': 'তির্যক', 'am': 'ማዝመሚያ', 'et': 'kaldkiri|kursiiv', 'uk': 'курсив', 'pt_BR': 'itálico', 'kk': 'курсив', 'te': 'వాలు', 'br': 'stouet', 'is': 'skáletrað', 'km': 'ទ្រេត', 'nb': 'kursiv|italic', 'bs': 'koso', 'eu': 'etzana', 'cy': 'italig', 'pa_IN': 'ਤਿਰਛੇ', 'ast': 'cursiva', 'gug': 'cursiva', 'vi': 'Nghiêng', 'as': 'ইতালিক', 'gd': 'eadailteach', 'or': 'ତେର୍ଚ୍ଛା', 'ja': '斜め|斜体|italic', 'nn': 'kursiv|italic', 'fr': 'italique', 'be': 'курсіў', 'oc': 'italica', 'gl': 'cursiva', 'ar': 'مائل', 'en_US': 'italic', 'sk': 'Kurzíva', 'zh_CN': '斜体|斜|italic', 'eo': 'kursiva', 'ta': 'சாய்வு', 'ca_valencia': 'cursiva|itàlica', 'ne': 'छड्के', 'ca': 'cursiva|itàlica', 'si': 'ඇල අකුරු', 'dgo': 'इटैलिक', 'ug': 'يانتۇ', 'ka': 'კურსივი'},
2106 'INVISIBLE':{'lt': 'nematoma', 'sid': 'leellannokkiha', 'fi': 'näkymätön', 'ro': 'invisible|invizibil', 'lv': 'neredzams', 'kn': 'ಅದೃಶ್ಯ', 'hsb': 'njewidźomny', 'tr': 'görünmez', 'el': 'αόρατο|invisible', 'hr': 'nevidljiv', 'cs': 'neviditelná', 'de': 'ohne', 'he': 'בלתי נראה', 'nl': 'onzichtbaar', 'hu': 'láthatatlan', 'hi': 'अदृश्य', 'ml': 'അദൃശ്യമായ', 'gu': 'અદ્ધશ્ય', 'ko': '숨김', 'zh_TW': '看不見|隱形|invisible', 'mr': 'अदृश्य', 'ru': 'невидимый', 'sl': 'nevidno', 'bn_IN': 'অদৃশ্য', 'am': 'የማይታይ', 'et': 'nähtamatu', 'uk': 'невидимий', 'pt_BR': 'invisível', 'kk': 'жасырын', 'te': 'అగోచరమైన', 'br': 'diwelus', 'is': 'ósýnilegt', 'km': 'មើល\u200bមិន\u200bឃើញ', 'bs': 'nevidljivo', 'eu': 'Ikusezina', 'cy': 'anweledig', 'pa_IN': 'ਅਦਿੱਖ', 'gug': 'nojekuaái', 'vi': 'Vô hình', 'as': 'অদৃশ্য', 'gd': 'do-fhaicsinneach', 'or': 'ଅଦୃଶ୍ଯ', 'ja': '見えない|不可視|invisible', 'nn': 'usynleg|invisible', 'nb': 'usynlig|invisible', 'be': 'нябачны', 'sq': 'i padukshëm', 'gl': 'invisíbel', 'ar': 'مخفي', 'en_US': 'invisible', 'sk': 'Neviditeľná', 'zh_CN': '看不见|不可见|invisible', 'eo': 'nevidebla', 'ta': 'தென்படாத', 'ne': 'अदृश्य', 'si': 'අදිසි', 'my': 'မမြင်နိုင်သော', 'ka': 'უხილავი'},
2107 'PAGESIZE':{'lt': 'lapo.kampas', 'sid': 'qoolubikka', 'fi': 'sivukoko', 'ro': 'pagesize|mărimepagină', 'lv': 'lappuses_izmērs', 'kn': 'ಪುಟದಗಾತ್ರ', 'hsb': 'wulkosćstrony|ws', 'tr': 'sayfa boyutu', 'es': 'tamañopágina', 'el': 'μέγεθοςσελίδας|pagesize', 'hr': 'veličinastranice', 'cs': 'velikoststránky', 'de': 'seite', 'he': 'גודלעמוד', 'nl': 'paginagrootte', 'hu': 'oldalméret', 'ml': 'താള്\u200dവ്യാപ്തി', 'gu': 'પાનાંમાપ', 'ko': '페이지크기', 'zh_TW': '頁面大小|紙張大小|頁大小|紙大小|pagesize', 'mr': 'पेजसाइज', 'ru': 'размер_страницы', 'sl': 'velikoststrani', 'bn_IN': 'কাগজের মাপ', 'am': 'የ ገጽ መጠን', 'et': 'lehe_suurus', 'uk': 'розмір_сторінки', 'pt_BR': 'tamanhoDaPágina|tamPág', 'kk': 'бет_өлшемі', 'te': 'పేజీపరిమాణం', 'br': 'ment ar bajenn', 'km': 'ទំហំ\u200bទំព័រ', 'nb': 'sidestørrelse|pagesize', 'bs': 'veličinastranice', 'eu': 'orritamaina', 'ast': 'tamañupaxina', 'gug': 'tamañorogue', 'or': 'ପୃଷ୍ଠା ଆକାର', 'ja': 'ページサイズ|pagesize', 'nn': 'sidestorleik|pagesize', 'fr': 'taillepage', 'be': 'памеры_старонкі', 'gl': 'tamaño da páxina', 'ar': 'حجم_الصفحة', 'en_US': 'pagesize', 'sk': 'veľkosťstránky|vs', 'zh_CN': '页面大小|纸张大小|纸大小|页大小|pagesize', 'eo': 'paĝogrando', 'ca_valencia': 'mida.pàgina|mp', 'ca': 'mida.pàgina|mp', 'oc': 'talhapagina'},
2108 'SET':{'lt': 'parink', 'sid': 'qineessi', 'fi': 'joukko', 'lv': 'iestatīt', 'hsb': 'mnohosć', 'tr': 'ayarla', 'es': 'conjunto', 'el': 'σύνολο|set', 'hr': 'skup', 'cs': 'množina', 'de': 'menge', 'he': 'קבוצה', 'nl': 'set|instellen', 'hu': 'halmaz', 'gu': 'સુયોજન', 'ko': '설정', 'sd': 'سيٽ', 'zh_TW': '集合|set', 'mr': 'सेट', 'sat': 'साजाव', 'ru': 'установить', 'sl': 'množica', 'bn_IN': 'সেট', 'am': 'ማሰናጃ', 'et': 'hulk', 'uk': 'встановити', 'pt_BR': 'conjunto', 'kk': 'орнату', 'br': 'arventenn', 'km': 'កំណត់', 'is': 'setja', 'nb': 'sett|set', 'kok': 'संचSonch', 'bs': 'postavi', 'eu': 'ezarri', 'ast': 'establecer', 'gug': 'aty', 'or': 'ସେଟ', 'ja': '同じ値を一つに|集合に|集合|set', 'sa_IN': 'सॆट', 'fr': 'fixe', 'gl': 'estabelecer', 'ar': 'مصفوفة', 'en_US': 'set', 'sk': 'množina', 'eo': 'aro', 'ca_valencia': 'conjunt', 'ca': 'conjunt', 'dgo': 'सैट्ट करो', 'zh_CN': '集合|set'},
2109 'CM':{'th': 'ซม.', 'uk': 'см', 'mk': 'см', 'kk': 'см', 'bn': 'সেমি', 'is': 'sm', 'tg': 'см', 'km': 'ស.ម.', 'kok': 'सेंमी', 'kn': 'ಸೆಂ.ಮಿ', 'sw_TZ': 'sm', 'ks': 'سینٹی میٹر', 'nr': 'i-cm', 'el': 'εκατοστά|cm', 'dz': 'སི་ཨེམ', 'as': 'ছে.মি.', 'mn': 'см', 'ru': 'см', 'or': 'ସେଣ୍ଟିମିଟର', 'he': 'ס"מ|ס״מ', 'be': 'см', 'zh_CN': '厘米|cm', 'hi': 'सेमी', 'ml': 'സിമി', 'st': 'sm', 'ar': 'سم', 'om': 'sm', 'en_US': 'cm', 'my': 'စင်တီမီတာ', 'bn_IN': 'সেমি', 'ta': 'செ.மீ', 'tt': 'см', 'ne': 'सेन्टिमिटर', 'zh_TW': '公分|cm', 'dgo': 'सैं.मी.', 'uz': 'sm', 'bo': 'ལིའི་སྨི།', 'mai': 'सेमी', 'ja': 'センチ|センチメートル|cm', 'mni': 'সে.মি.', 'ug': 'سانتىمېتىر', 'am': 'ሴ/ሚ', 'ka': 'სმ'},
2110 'TURNRIGHT':{'lt': 'dešinėn|dš', 'th': 'ขวา|เลี้ยวขวา|rt', 'sid': 'qiniite|qiniitiraqoli|qt', 'fi': 'oikealle|oik', 'ro': 'right|turnright|rt|dreapta', 'lv': 'pa_labi|labi|gl', 'kn': 'ಬಲ|ಬಲಕ್ಕೆ ತಿರುಗಿಸು|rt', 'hsb': 'naprawo|np', 'tr': 'sağ|sağadön|sğ', 'es': 'derecha|giraderecha|de|gd', 'el': 'δεξιά|στροφήδεξιά|δξ|right|turnright|rt', 'hr': 'desno|okreni desno|de', 'cs': 'vpravo|vp', 'de': 'rechts|re', 'he': 'ימינה|לפנותימינה|פנייהימינה|ימ', 'nl': 'rechts|rechtsaf|rs', 'hu': 'jobbra|j', 'ko': '오른쪽|오른쪽으로회전|rt', 'zh_TW': '右|右轉|right|turnright|rt', 'mr': 'उजवी|उजवीकडे वळा|rt', 'ru': 'вправо|поворот_направо|п', 'sl': 'desno|obrnidesno|ds', 'am': 'ቀኝ|ወደ ቀኝ ማዟሪያ|ወደ ቀኝ', 'et': 'paremale|parempööre|p', 'uk': 'праворуч|поворот_праворуч|пр', 'pt_BR': 'paraDireita|pd|girarDireita|giraDireita', 'kk': 'оңға|оңға_бұрылу|о', 'br': 'dehou|trotudehou|de', 'km': 'ស្ដាំ|turnright|rt', 'nb': 'høyre|snu høyre|hg', 'bs': 'desno|skrenidesno|rt', 'eu': 'eskuina|eskuinera|esk', 'ast': 'drecha|xiradrecha|xd', 'gug': 'akatúa|jereakatúa|ak', 'or': 'ଡ଼ାହାଣ|ଡ଼ାହାଣକୁ ଯାଆନ୍ତୁ|rt', 'ja': '右|右に曲がる|right|turnright|rt', 'nn': 'høgre|snu høgre|hg|right', 'fr': 'droite|tournedroite|dr', 'be': 'управа|паварот_управа|пр', 'sq': 'djathtas|kthehudjathtas|rt', 'gl': 'dereita|voltadereita|rt', 'ar': 'لليمين', 'en_US': 'right|turnright|rt', 'sk': 'vpravo|vp', 'zh_CN': '右|右转|right|turnright|rt', 'eo': 'dekstren|turnu_dekstren|dt', 'ca_valencia': 'dreta|giradreta|gira.dreta|gd', 'ca': 'dreta|giradreta|gira.dreta|gd', 'oc': 'dreita|virardreita|de'},
2111 'IF':{'lt': 'jeigu.tiesa', 'sid': 'ikkiro', 'fi': 'jos', 'ro': 'if|dacă', 'lv': 'ja', 'kn': 'ಇದು ಆದಲ್ಲಿ', 'nn': 'dersom|viss|if', 'tr': 'eğer', 'es': 'si', 'el': 'αν|if', 'hr': 'ako', 'cs': 'když', 'de': 'wenn', 'he': 'אם', 'nl': 'als', 'hu': 'ha', 'hi': 'यदि', 'ml': 'എങ്കില്\u200d', 'gu': 'જો', 'zh_TW': '若|if', 'mr': 'इफ', 'sat': 'IF', 'ru': 'если', 'sl': 'če', 'sa_IN': 'IF', 'bn_IN': 'যদি', 'am': 'ከ', 'et': 'kui', 'uk': 'якщо', 'pt_BR': 'se', 'kk': 'егер', 'te': 'ఒకవేళ', 'br': 'mar', 'is': 'ef', 'nb': 'dersom|hvis|if', 'kok': 'IF', 'bs': 'ako', 'eu': 'bada', 'ast': 'si', 'gug': 'si', 'or': 'ଯଦି', 'ja': 'もし|if', 'hsb': 'jeli', 'fr': 'si', 'gl': 'se', 'ar': 'إن', 'en_US': 'if', 'sk': 'ak', 'zh_CN': '如果|若|if', 'eo': 'se', 'ca_valencia': 'si', 'ca': 'si', 'dgo': 'IF', 'oc': 'se'},
2112 'RIGHTSTRING':{'lt': '“|”|’', 'hsb': '“|‘|"|\'', 'hu': '”', 'fi': '"|\'|”', 'en_US': '”|’', 'sk': '“|"', 'nn': '”|’|»', 'es': '”|’|»', 'el': '”|’|"|\'', 'et': '”|“', 'zh_TW': '」|』|”|’', 'cs': '“|"', 'de': '“|‘|"|\'', 'zh_CN': '」|』|”|’'},
2113 'STR':{'lt': 'teksto.eilutė|te', 'uk': 'рядок', 'kk': 'жол', 'fi': 'mjono', 'br': 'hedad', 'lv': 'virkne', 'hsb': 'znamješka', 'be': 'радок', 'el': 'συμβολοσειρά|str', 'tr': 'dizi', 'cs': 'řetězec', 'de': 'zeichen', 'he': 'מחרוזת', 'fr': 'car', 'hu': 'karakterlánc|lánc', 'ar': 'سلسلة', 'en_US': 'str', 'sk': 'reťazec', 'eo': 'ĉeno', 'zh_TW': '字串|str', 'et': 'sõne|string', 'ru': 'строка', 'sl': 'niz', 'zh_CN': '字串|字符串|str', 'ja': '文字列|文字列に|str', 'mr': 'स्ट्रिंग'},
2114 'COUNT':{'lt': 'kiek', 'th': 'นับ', 'sid': 'kiiri', 'fi': 'lukumäärä', 'mk': 'Број', 'ro': 'count|contor', 'pa_IN': 'ਗਿਣਤੀ', 'kn': 'ಎಣಿಕೆ', 'hsb': 'ličić', 'tr': 'sayım', 'es': 'conteo', 'el': 'πλήθος|count', 'dz': 'གྱངས་ཁ་རྐྱབས།', 'hr': 'brojanje', 'cs': 'počet', 'de': 'zähle', 'mn': 'тоо хэмжээ', 'he': 'ספירה', 'nl': 'Aantal', 'hu': 'darab|db|elemszám', 'hi': 'गिनती', 'brx': 'साननाय', 'gu': 'ગણતરી', 'sl': 'preštej', 'ko': '수', 'br': 'Niver', 'zh_TW': '計數|count', 'mr': 'काउंट', 'sat': 'लेखाक्', 'mai': 'गिनती', 'rw': 'kubara', 'sa_IN': 'गणना', 'oc': 'nb_decimalas', 'am': 'መቁጠሪያ', 'et': 'loenda', 'uk': 'кількість', 'kmr_Latn': 'Bihijmêre', 'pt_BR': 'contagem', 'kk': 'саны', 'te': 'లెక్క', 'af': 'telling', 'is': 'fjöldi', 'tg': 'Шумора', 'km': 'ចំនួន', 'nb': 'tell|count', 'kok': 'गणन', 'bs': 'mjesta', 'eu': 'zenbaketa', 'sw_TZ': 'hesabu', 'ks': 'شمار', 'cy': 'cyfrif', 'lv': 'skaits', 'ast': 'contéu', 'gug': 'econta', 'vi': 'đếm', 'lo': 'ນັບ', 'as': 'গণনা', 'gd': 'cunntas', 'ru': 'количество', 'or': 'ଗଣନା', 'ja': '文字数|持っている数|count', 'nn': 'tel|plassar|count', 'fr': 'compte', 'sq': 'numëro', 'ml': 'എണ്ണം', 'gl': 'decimais', 'ar': 'عُدّ', 'om': "baay'ina", 'en_US': 'count', 'sk': 'počet', 'zh_CN': '计数|count', 'eo': 'nombru', 'ta': 'எண்ணிக்கை', 'ca_valencia': 'compte', 'ne': 'गणना', 'ca': 'compte', 'si': 'ගණන් කරන්න', 'dgo': 'गिनतरी', 'uz': 'Miqdor', 'mni': 'মশিং থীয়ু', 'my': 'ရေတွက်ပါ', 'ka': 'თვლა'},
2115 'UPRIGHT':{'lt': 'įprastinis', 'sid': 'aliqiniitira|rosaminoha', 'fi': 'pysty', 'ro': 'upright|normal|înpicioare', 'lv': 'taisns|normāls', 'kn': 'ನೆಟ್ಟಗೆ|ಸಾಮಾನ್ಯ', 'hsb': 'normalny', 'tr': 'üstsağ|normal', 'es': 'normal', 'el': 'όρθιο|κανονικό|upright|normal', 'hr': 'uspravan|normalan', 'cs': 'normální', 'de': 'normal', 'he': 'רגיל|עומד', 'nl': 'rechtop|normaal', 'hu': 'álló|normál', 'ko': '우상단|일반', 'zh_TW': '正體|正|一般|upright|normal', 'mr': 'उभे|सामान्य', 'ru': 'прямой|обычный', 'sl': 'pokonci|navadno', 'am': 'ቀጥተኛ|መደበኛ', 'et': 'püstine|tavaline', 'uk': 'прямий|звичайний', 'pt_BR': 'vertical', 'kk': 'тура|қалыпты', 'br': 'a-serzh|normal', 'is': 'upprétt|venjulegt', 'km': 'ស្ដាំ|ធម្មតា', 'nb': 'stående|normal', 'bs': 'goredesno|normalno', 'eu': 'tente|normala', 'ast': 'normal', 'gug': 'normal', 'or': 'ଡ଼ାହାଣପାଖ ଉପର|normal', 'ja': 'ふつう|標準|upright', 'nn': 'normal|upright', 'fr': 'hautdroit|normal', 'gl': 'vertical|normal', 'ar': 'معتدل|عادي', 'en_US': 'upright|normal', 'sk': 'normálne|no', 'eo': 'rekta|vertikala|normala', 'ca_valencia': 'vertical|normal', 'ca': 'vertical|normal', 'zh_CN': '正体|正|一般|upright|normal'},
2116 'PRINT':{'lt': 'spausdink|spd|rašyk', 'sid': 'attami', 'fi': 'tulosta', 'ro': 'print|afișează', 'lv': 'drukāt', 'kn': 'ಮುದ್ರಿಸು', 'hsb': 'ćišćeć', 'tr': 'yazdır', 'es': 'imprimir|escribir', 'el': 'τύπωσε|print', 'hr': 'ispis', 'cs': 'piš', 'de': 'ausgabe', 'he': 'הדפסה', 'nl': 'afdrukken', 'hu': 'ki|kiír', 'hi': 'छापें', 'ml': 'പ്രിന്റ് ചെയ്യുക', 'gu': 'છાપો', 'ko': '인쇄', 'zh_TW': '印出|print', 'mr': 'प्रिंट', 'ru': 'печать', 'sl': 'izpiši', 'bn_IN': 'মুদ্রণ', 'am': 'ማተሚያ', 'et': 'kirjuta|prindi', 'uk': 'друк', 'pt_BR': 'escrever|esc|escreva', 'kk': 'баспа', 'te': 'ముద్రణ', 'br': 'moullañ', 'is': 'prenta', 'km': 'បោះ\u200b\u200bពុម្ព\u200b', 'nb': 'skriv ut|skriv|print', 'bs': 'štampaj', 'eu': 'inprimatu', 'cy': 'argraffu', 'pa_IN': 'ਛਾਪੋ', 'ast': 'imprentar', 'gug': 'imprimir', 'vi': 'In', 'or': 'ମୁଦ୍ରଣ', 'gd': 'clò-bhuail', 'ja': '表示|print', 'nn': 'skriv ut|skriv|print', 'fr': 'écris', 'be': 'друк', 'oc': 'imprimir', 'gl': 'imprimir', 'ar': 'اطبع', 'en_US': 'print', 'sk': 'Tlač', 'zh_CN': '打印|印出|print', 'eo': 'presu|p', 'ta': 'அச்சிடு', 'ca_valencia': 'imprimeix', 'ne': 'मुद्रण गर्नुहोस्', 'ca': 'imprimeix', 'si': 'මුද්\u200dරණය කරන්න', 'my': 'ပရင့်ထုတ်ပါ', 'ka': 'ბეჭდვა'},
2117 'RESEARCH':{'lt': 'ieškok', 'sid': 'hasi', 'fi': 'etsi', 'ro': 'search|caută', 'lv': 'meklēt', 'kn': 'ಹುಡುಕು', 'hsb': 'pytać', 'tr': 'ara', 'es': 'buscar', 'el': 'αναζήτηση|search', 'hr': 'pretraživanje', 'cs': 'hledej', 'de': 'suche', 'he': 'חיפוש', 'nl': 'zoeken', 'hu': 'keres', 'hi': 'खोजें', 'ml': 'തെരയുക', 'gu': 'શોધો', 'ko': '검색', 'zh_TW': '搜尋|search', 'mr': 'शोधा', 'ru': 'найти', 'sl': 'išči', 'bn_IN': 'অনুসন্ধান', 'am': 'መፈለጊያ', 'et': 'otsi', 'uk': 'знайти', 'pt_BR': 'pesquisa', 'kk': 'іздеу', 'te': 'వెతుకు', 'br': 'klask', 'is': 'leita', 'km': 'ស្វែងរក\u200b', 'nb': 'søk|finn|search', 'bs': 'traži', 'eu': 'bilatu', 'cy': 'chwilio', 'pa_IN': 'ਲੱਭੋ', 'ast': 'guetar', 'gug': 'heka', 'vi': 'Tìm', 'as': 'সন্ধান কৰক', 'or': 'ଖୋଜନ୍ତୁ', 'ja': '探す|みつける|検索|search', 'nn': 'søk|finn|search', 'fr': 'recherche', 'be': 'знайсці', 'sq': 'kërko', 'oc': 'recercar', 'gl': 'buscar', 'ar': 'ابحث', 'en_US': 'search', 'sk': 'Hľadať', 'zh_CN': '查找|搜索|search', 'eo': 'serĉu', 'ta': 'தேடு', 'ca_valencia': 'cerca', 'ne': 'खोज गर्नुहोस्', 'ca': 'cerca', 'my': 'ရှာဖွေပါ'},
2118 'OLIVE':{'lt': 'alyvuogių', 'sid': 'ejersa', 'fi': 'oliivi', 'lv': 'olīvu', 'kn': 'ಆಲಿವ್', 'hsb': 'oliwozeleny', 'tr': 'zeytin yeşili', 'es': 'oliva', 'vec': 'ołiva', 'el': 'λαδί|olive', 'hr': 'maslinasta', 'cs': 'olivová', 'sr_Latn': 'maslinasta', 'he': 'ירוקזית', 'nl': 'olijfgroen', 'de': 'dunkelgrün', 'hi': 'जैतून', 'ml': 'ഒലീവ്', 'gu': 'ઓલિવ', 'ko': '올리브', 'zh_TW': '橄欖綠|黃綠|olive', 'mr': 'ऑलिव्ह', 'ru': 'оливковый', 'sl': 'olivnozelena', 'bn_IN': 'জলপাই রং', 'am': 'ወይራ', 'et': 'kollakasroheline|oliivroheline|oliivikarva', 'uk': 'оливковий', 'pt_BR': 'oliva', 'kk': 'зәйтүн', 'te': 'ఆలివ్', 'br': 'olivez', 'is': 'ólífugrænt', 'km': 'អូលីវ', 'bs': 'maslinasta', 'eu': 'oliba', 'hu': 'olajzöld', 'cy': 'olewydden', 'ast': 'oliva', 'gug': 'oliva', 'as': 'জলফাই', 'gd': 'donn-uaine', 'or': 'ଓଲିଭ', 'ja': '柿色|オリーブ色|olive', 'nn': 'olivengrøn|olive', 'nb': 'olivengrønn|olive', 'be': 'аліўкавы', 'gl': 'oliva', 'ar': 'زيتوني', 'en_US': 'olive', 'sk': 'olivová', 'sr': 'маслинаста', 'zh_CN': '橄榄绿|黄绿|olive', 'eo': 'oliva', 'ta': 'ஆலிவ்', 'ca_valencia': 'oliva|verd.oliva', 'ca': 'oliva|verd.oliva', 'oc': 'oliva'},
2119 'MIN':{'lt': 'min.|minimumas', 'sid': 'shiima', 'pt_BR': 'mínimo|mín', 'kk': 'мин', 'te': 'కనిష్ట', 'br': 'izek', 'is': 'lágm', 'sat': 'कोम उता़र, (~c)', 'km': 'នាទី', 'uk': 'мін', 'kok': 'किमान (~c)Konixtt (~c)', 'kn': 'ಕನಿಷ್ಟ', 'sa_IN': 'कम ख्तॆ कम', 'ja': 'いちばん小さな数|最小値|最小|min', 'el': 'ελάχιστο|min', 'or': 'ସର୍ବନିମ୍ନ', 'gd': 'as lugha', 'sl': 'najmanj', 'cy': 'mun', 'be': 'мін', 'ar': 'الأدنى', 'gu': 'ન્યૂનત્તમ', 'en_US': 'min', 'fi': 'pienin', 'zh_CN': '最小值|最小|min', 'sd': 'گهٽِ ۾ گهٽ', 'ca_valencia': 'mín|min', 'zh_TW': '最小值|最小|min', 'mr': 'मिन', 'dgo': 'घट्टोघट्ट', 'ru': 'мин', 'he': 'מזערי', 'bn_IN': 'সর্বনিম্ন', 'am': 'አነስተኛ', 'ca': 'mín|min'},
2120 'TRUE':{'lt': 'tiesa', 'th': 'จริง', 'sid': 'halaale', 'fi': 'tosi', 'ro': 'true|adevărat', 'lv': 'patiess', 'kn': 'ಸತ್ಯ', 'hsb': 'wěrny', 'tr': 'doğru', 'es': 'verdadero', 'el': 'αληθής|true', 'hr': 'točno', 'cs': 'pravda', 'de': 'wahr', 'he': 'אמת', 'nl': 'waar', 'hu': 'igaz', 'hi': 'सही', 'gu': 'સાચુ', 'my': 'အမှန်', 'ko': '참', 'br': 'gwir', 'zh_TW': '真|true', 'mr': 'ट्रु', 'ru': 'истина', 'sl': 'jeresnično', 'bn_IN': 'সত্য', 'am': 'እውነት', 'et': 'tõene', 'uk': 'істина', 'kmr_Latn': 'rast e', 'pt_BR': 'verdadeiro|verd', 'kk': 'ақиқат', 'te': 'సత్యము', 'af': 'waar', 'is': 'satt', 'tg': 'саҳеҳ', 'km': 'ពិត', 'nb': 'sann|true', 'eu': 'egiazkoa', 'cy': 'gwir', 'pa_IN': 'ਸਹੀਂ', 'ast': 'braero', 'gug': 'ete', 'vi': 'đúng', 'as': 'সঁচা', 'ja': '真|なりたつ|true', 'nn': 'sann|true', 'fr': 'vrai', 'bn': 'সত্য', 'oc': 'verai', 'gl': 'verdadeiro', 'ar': 'صحيح', 'om': 'dhugaa', 'ug': 'راست', 'sk': 'pravda', 'zh_CN': '真|true', 'eo': 'vera', 'ta': 'உண்மை', 'ca_valencia': 'cert|veritat', 'ne': 'सत्य', 'ca': 'cert|veritat', 'si': 'සත්\u200dය', 'en_US': 'true', 'ka': 'ჭეშმარიტი'},
2121 'AND':{'fi': 'ja', 'kn': 'ಮತ್ತು', 'xh': 'kunye', 'hr': 'i', 'de': 'und', 'he': 'וגם', 'nl': 'en', 'hu': 'és', 'st': 'le', 'ko': '및', 'mr': 'अँड', 'mai': 'आओर', 'am': 'እና', 'et': 'ja', 'kk': 'және', 'te': 'మరియు', 'af': 'en', 'tg': 'ва', 'km': 'និង', 'fr': 'et', 'kok': 'आनिक', 'eu': 'eta', 'lv': 'un', 'gug': 'ha', 'vi': 'và', 'gd': 'agus', 'rw': 'na', 'nn': 'og|and', 'nb': 'og|and', 'sq': 'dhe', 'om': 'fi', 'ug': 'ۋە', 'sk': 'a', 'br': 'ha', 'en_US': 'and', 'lt': 'kiekvienas', 'th': 'และ', 'sid': 'nna', 'zu': 'kanye', 'ss': 'ne', 'ro': 'and|și', 'pa_IN': 'ਅਤੇ', 'hsb': 'a', 'es': 'y', 'el': 'και|and', 'dz': 'དང་།', 'tn': 'le', 'cs': 'azároveň|az', 'sl': 'in', 'hi': 'और', 'gu': 'અને', 've': 'na', 'or': 'ଏବଂ', 'sd': '۽', 'zh_TW': '且|and', 'sat': 'आर आर', 'ru': 'и', 'nso': 'le', 'bn_IN': 'এবং', 'uk': 'та', 'kmr_Latn': 'û', 'pt_BR': 'e', 'tt': 'һәм', 'bn': 'এবং', 'is': 'og', 'bs': 'i', 'sa_IN': 'च', 'sw_TZ': 'na', 'ks': 'بےیئ', 'my': 'နှင့်', 'ast': 'y', 'tr': 've', 'brx': 'आरो', 'mn': 'ба', 'lb': 'an', 'ja': 'と|かつ|and', 'cy': 'a', 'fa': 'و', 'gl': 'e', 'ar': 'و', 'oc': 'e', 'zh_CN': '且|与|and', 'eo': 'kaj', 'ca_valencia': 'i', 'ne': 'र', 'ca': 'i', 'si': 'සහ', 'uz': 'va', 'ka': 'და'},
2122 'PENSTYLE':{'lt': 'pieštuko.stilius|linijos.stilius', 'th': 'กระบวนแบบปากกา|กระบวนแบบเส้น', 'sid': 'biireteakata|xuruuruakata', 'fi': 'kynäntyyli', 'ro': 'penstyle|linestyle|stilstilou', 'lv': 'spalvas_stils|līnijas_stils', 'kn': 'ಲೇಖನಿಶೈಲಿ|ಗೆರೆಶೈಲಿ', 'hsb': 'stilpisaka|linijowystil|sp|ls', 'tr': 'kalembiçemi|satırbiçemi', 'es': 'estilopluma|estilolínea', 'el': 'μορφήγραφίδας|μορφήγραμμής|penstyle|linestyle', 'hr': 'stil olovke|stil linije', 'cs': 'druhpera|druhčáry', 'de': 'stiftstil|linienstil|ss|ls', 'he': 'סגנוןעט|סגנוןקו', 'nl': 'penstijl|lijnstijl|lijnopmaak', 'hu': 'tollstílus|vonalstílus', 'ko': '펜스타일|선스타일', 'zh_TW': '筆樣式|線樣式|penstyle|linestyle', 'mr': 'पेनशैली|रेघशैली', 'ru': 'стиль_пера|стиль_линии', 'sl': 'slogperesa|slogčrte', 'am': 'የብዕር ዘዴ |የ መስመር ዘዴ', 'et': 'pliiatsi_stiil|joonestiil', 'uk': 'стиль_пера|стиль_лінії', 'pt_BR': 'mudarEstiloDoLápis|mEstLa', 'kk': 'қалам_стилі|сызық_стилі', 'km': 'រចនាប័ទ្ម\u200bប៉ិក|linestyle', 'nb': 'pennstil|linjestil', 'bs': 'stilolovke|stillinije', 'eu': 'lumaestiloa|marraestiloa', 'pa_IN': 'ਪੈੱਨ ਸਟਾਈਲ|ਲਾਈਨ ਸਟਾਈਲ', 'ast': 'llapizestilu|lliniaestilu|le', 'gug': 'tipobolígrafo|estilolínea', 'or': 'ପେନଶୈଳୀ|linestyle', 'mn': 'үзэгний загвар|шугамын загвар|үз|шз', 'ja': 'ペンの種類|線の種類|penstyle', 'nn': 'pennstil|linjestil|penstyle', 'fr': 'stylecrayon|styleligne', 'gl': 'estiloestilo|estiloliña', 'ar': 'نمط_القلم', 'en_US': 'penstyle|linestyle', 'sk': 'štýlpera|štýlčiary|šp|šč', 'eo': 'plumstilo|linistilo', 'ca_valencia': 'estil.llapis|estil.línia|el', 'ca': 'estil.llapis|estil.línia|el', 'zh_CN': '笔型|线型|笔样式|线样式|penstyle|linestyle'},
2123 'LIME':{'lt': 'citrininė', 'sid': 'boloticho', 'fi': 'limetti', 'lv': 'neonzaļš', 'kn': 'ಸಮಯ', 'hsb': 'swětłozeleny', 'tr': 'sarımsı yeşil', 'es': 'lima', 'el': 'ανοιχτοπράσινο|lime', 'hr': 'limun-žuta', 'cs': 'žlutozelená', 'sr_Latn': 'svetlo zelena', 'he': 'ליים', 'nl': 'limoen', 'de': 'hellgrün', 'hi': 'समय', 'ml': 'നാരങ്ങ', 'gu': 'લીંબુ', 'ko': '라임', 'zh_TW': '萊姆綠|亮綠|lime', 'mr': 'वेळ', 'ru': 'лимонный', 'sl': 'limetna', 'bn_IN': 'সময়', 'am': 'ሎሚ', 'et': 'laimiroheline|laimikarva', 'uk': 'лайм', 'pt_BR': 'lima', 'kk': 'ашық жасыл', 'te': 'నిమ్మరంగు', 'br': 'sitroñs', 'is': 'límónugrænt', 'km': 'បៃតង', 'nb': 'grasgrønn|lime', 'eu': 'lima', 'hu': 'világoszöld', 'cy': 'leim', 'pa_IN': 'ਸਮਾਂ', 'ast': 'llima', 'gug': 'lima', 'vi': 'Giờ', 'as': 'নেমু', 'gd': 'dath na liomaideig', 'or': 'ଲେମ୍ବୁ ରଙ୍ଗ', 'ja': '明るい緑|ライム色|lime', 'nn': 'grasgrøn|lime', 'fr': 'citron', 'be': 'ярка-зялёны', 'oc': 'limon', 'gl': 'lima', 'ar': 'ليموني', 'en_US': 'lime', 'sk': 'Čas', 'sr': 'светло зелена', 'zh_CN': '酸橙色|lime', 'eo': 'limeta', 'ta': 'எலுமிச்சை', 'ca_valencia': 'llima|verd.llima', 'ne': 'समय', 'ca': 'llima|verd.llima', 'si': 'වෙලාව', 'my': 'အချိန်', 'ka': 'დრო'},
2124 'INCH':{'lt': 'col|"', 'uk': 'дюйм|"', 'pt_BR': 'pol|"', 'kk': 'дюйм|"', 'fi': 'tuuma', 'br': 'meutad|"', 'lv': 'colla|"', 'nn': 'tomme|in|"', 'gug': 'in|pulg|"', 'es': 'in|pulg|"', 'el': 'ίντσα|in|"', 'tr': 'inç|"', 'or': 'ଇଞ୍ଚ|"', 'gd': 'òirlich|"', 'sl': 'pal|"', 'nb': 'tommer|"', 'be': 'цаль|"', 'gl': 'pol|"', 'ar': 'في|"', 'en_US': 'in|"', 'eo': 'colo|"', 'zh_TW': '英吋|in', 'et': 'tolli|"|″', 'ru': 'дюйм|"', 'he': "אינץ׳|אינץ'|אינטש", 'zh_CN': '英寸|in', 'ja': 'インチ|in|"'},
2125 'ERR_MEMORY':{'lt': 'nepakanka atminties.', 'sid': 'kkitinnokki qaaggo.', 'fi': 'muisti ei riitä.', 'ro': 'Memorie insuficientă.', 'lv': 'nepietiek atmiņas.', 'kn': 'ಸಾಕಷ್ಟು ಸ್ಮೃತಿ ಇಲ್ಲ.', 'hsb': 'Njeje dosć składa.', 'es': 'no hay memoria suficiente.', 'vec': 'Ła memoria no ła basta mìa.', 'el': 'ανεπαρκής μνήμη.', 'sv': 'otillräckligt minne.', 'hr': 'nema dovoljno memorije.', 'cs': 'nedostatek paměti.', 'sr_Latn': 'Nema dovoljno memorije.', 'pl': 'za mało pamięci.', 'he': 'אין די זכרון.', 'nl': 'onvoldoende geheugen.', 'de': 'Nicht genügend Arbeitsspeicher.', 'hi': 'स्मृति प्रर्याप्त नहीं.', 'ml': 'ആവശ്യമായ മെമ്മറി ലഭ്യമല്ല.', 'id': 'Apakah Anda ingin menjalankan dokumen teks ini?', 'gu': 'પૂરતી મેમરી નથી.', 'my': 'မှတ်ဉာဏ်မလုံလောက်ပါ။', 'ko': '메모리가 부족합니다.', 'ne': 'पर्याप्त स्मृति छैन ।', 'zh_TW': '記憶體不足。', 'et': 'pole piisavalt mälu.', 'ru': 'недостаточно памяти.', 'sl': 'Ni dovolj pomnilnika.', 'bn_IN': 'অপ্রতুল মেমরি।', 'am': 'በቂ memory የለም', 'mr': 'पुरेशी मेमरि नाही.', 'uk': "недостатньо пам'яті.", 'pt_BR': 'memória insuficiente.', 'kk': 'жады жеткіліксіз.', 'te': 'సరిపోవునంత మెమొరీ లేదు.', 'br': 'memor re skort.', 'is': 'ekki nægt minni.', 'km': 'អង្គ\u200bចងចាំ\u200bមិន\u200bគ្រប់គ្រាន់\xa0។', 'nb': 'ikke nok minne.', 'bg': 'недостатъчна памет.', 'bs': 'nema dovoljnomemorije.', 'eu': 'nahiko memoriarik ez.', 'hu': 'Nincs elég memória.', 'cy': 'dim digon o gof.', 'pa_IN': 'ਲੋੜੀਂਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ', 'ast': 'nun hai memoria bastante.', 'it': 'memoria insufficiente.', 'tr': 'yeterli bellek yok.', 'vi': 'Không đủ bộ nhớ.', 'da': 'ikke nok hukommelse', 'as': 'পৰ্যাপ্ত মেমৰি নাই।', 'gd': 'chan eil cuimhne gu leòr ann.', 'or': 'ଯଥେଷ୍ଟ ସ୍ମୃତି ସ୍ଥାନ ନାହିଁ।', 'ja': 'メモリーが足りません。', 'nn': 'det ikkje er nok minne.', 'fr': 'mémoire insuffisante.', 'pt': 'memória insuficiente', 'sq': 'memorie të pamjaftueshme.', 'oc': 'memòria insufisenta.', 'gl': 'non hai memoria suficiente.', 'ar': 'لا ذاكرة كافية.', 'en_US': 'not enough memory.', 'sk': 'nedostatok pamäte.', 'sr': 'Нема довољно меморије.', 'zh_CN': '内存不足。', 'eo': 'nesufiĉa memoro.', 'ta': 'நினைவகம் போதவில்லை.', 'ca_valencia': 'no hi ha prou memòria.', 'ga': 'cuimhne ídithe.', 'ca': 'no hi ha prou memòria.', 'si': 'මතකය ප්\u200dරමාණවත් නැත.', 'be': 'недастаткова памяці.', 'ug': 'يېتەرلىك ئەسلەك يوق.', 'ka': 'არ არის საკმარისი მეხსიერება.'},
2126 'TO':{'lt': 'tai', 'sid': 'ra', 'fi': 'tee', 'ro': 'to|la', 'lv': 'līdz', 'kn': 'ಗೆ', 'nn': 'til|to', 'tr': 'buraya', 'es': 'a', 'el': 'σε|to', 'hr': 'za', 'cs': 'příkaz', 'de': 'zu|als', 'he': 'עד', 'nl': 'naar', 'hu': 'ez|eljárás|elj|tanuld', 'hi': 'प्रति', 'ml': 'ഏങ്ങോട്ട്', 'gu': 'પ્રતિ', 'zh_TW': '定義|起|to', 'mr': 'टु', 'ru': 'к', 'sl': 'pri', 'bn_IN': 'প্রতি', 'am': 'ለ', 'et': 'funktsioon|f', 'uk': 'до', 'pt_BR': 'aprender|aprenda', 'kk': 'қайда', 'te': 'కు', 'br': 'e', 'is': 'til', 'km': 'ដល់', 'nb': 'til|to', 'bs': 'do', 'eu': 'nora', 'ast': 'a', 'gug': 'a', 'as': 'লৈ', 'gd': 'gu', 'or': 'କୁ', 'ja': '動きを作る|to', 'hsb': 'přikaz', 'fr': 'à', 'gl': 'para', 'ar': 'إلى', 'en_US': 'to', 'sk': 'k', 'zh_CN': '定义|定义起始|起始|to', 'eo': 'al', 'ta': 'இதற்கு', 'ca_valencia': 'fins.a', 'ca': 'fins.a', 'oc': 'a'},
2127 'GREEN':{'lt': 'žalia', 'th': 'เขียว', 'sid': 'haanja', 'fi': 'vihreä', 'ro': 'green|verde', 'lv': 'zaļš', 'kn': 'ಹಸಿರು', 'hsb': 'zeleny', 'tr': 'yeşil', 'es': 'verde', 'vec': 'verde', 'el': 'πράσινο|green', 'hr': 'zelena', 'cs': 'zelená', 'sr_Latn': 'zelena', 'he': 'ירוק', 'nl': 'groen', 'de': 'grün', 'hi': 'हरा', 'ml': 'പച്ച', 'gu': 'લીલો', 'my': 'အစိမ်းရောင်', 'ko': '녹색', 'zh_TW': '綠|green', 'mr': 'हिरवा', 'ru': 'зелёный', 'sl': 'zelena', 'bn_IN': 'সবুজ', 'am': 'አረንጓዴ', 'et': 'roheline', 'uk': 'зелений', 'pt_BR': 'verde', 'kk': 'жасыл', 'te': 'ఆకుపచ్చ', 'br': 'gwer', 'is': 'grænt', 'km': 'បៃតង', 'nb': 'grønn|green', 'bs': 'zelena', 'eu': 'berdea', 'hu': 'zöld', 'pa_IN': 'ਹਰਾ', 'ast': 'verde', 'gug': 'aky', 'vi': 'Lục', 'as': 'সেউজীয়া', 'gd': 'uaine', 'or': 'ସବୁଜ', 'ja': '緑|green', 'nn': 'grøn|green', 'fr': 'vert', 'be': 'зялёны', 'oc': 'verd', 'gl': 'verde', 'ar': 'أخضر', 'en_US': 'green', 'sk': 'zelená', 'sr': 'зелена', 'zh_CN': '绿|绿色|green', 'eo': 'verda', 'ta': 'பச்சை', 'ca_valencia': 'verd', 'ne': 'हरियो', 'ca': 'verd', 'si': 'කොළ', 'ug': 'يېشىل', 'ka': 'მწვანე'},
2128 'NORMAL':{'lt': 'įprastinis', 'th': 'ปกติ', 'sid': 'rosaminoha', 'zu': 'okwejwayelekile', 'fi': 'tavallinen', 'ss': 'vamile', 'ml': 'സാധാരണ', 'lv': 'normāls', 'kn': 'ಸಾಮಾನ್ಯ', 'hsb': 'normalny', 'xh': 'ngokuqhelekileyo', 'el': 'κανονικό|normal', 'hr': 'obično', 'tn': 'tlwaelo', 'cs': 'normální', 'he': 'רגיל', 'nl': 'normaal', 'hu': 'normál', 'hi': 'सामान्य', 'bn': 'সাধারণ', 'nso': 'tlwaelegilego', 'gu': 'સામાન્ય', 've': 'ḓoweleaho', 'my': 'ပုံမှန်', 'ko': '보통', 'st': 'tlwaelehileng', 'tt': 'гадәти', 'zh_TW': '一般|normal', 'mr': 'सामान्य', 'ru': 'обычный', 'sl': 'navadno', 'bn_IN': 'সাধারণ', 'am': 'መደበኛ', 'et': 'keskmine', 'uk': 'звичайний', 'kmr_Latn': 'asayî', 'kk': 'қалыпты', 'te': 'సాధారణ', 'af': 'normaal', 'is': 'venjulegt', 'ts': 'tolovelekeeke', 'km': 'ធម្មតា\u200b', 'bs': 'obicno', 'eu': 'normala', 'nr': 'jayelekileko', 'pa_IN': 'ਸਧਾਰਨ', 'vi': 'thông thường', 'as': 'সাধাৰন', 'gd': 'àbhaisteach', 'eo': 'normala', 'or': 'ସାଧାରଣ', 'ja': 'ふつう|標準|normal', 'sa_IN': 'आम', 'be': 'звычайны', 'sq': 'normale', 'fa': 'معمولی', 'ar': 'عادي', 'ug': 'نورمال', 'sk': 'normálne', 'zh_CN': '一般|常规|normal', 'br': 'Reizh', 'ta': 'சாதாரண', 'ne': 'सामान्य', 'si': 'සාමාන්\u200dය', 'dgo': 'आम', 'en_US': 'normal', 'ka': 'ჩვეულებრივი'},
2129 'PINK':{'lt': 'rausva', 'th': 'ชมพู', 'sid': 'dumamo', 'fi': 'pinkki', 'ro': 'pink|roz', 'lv': 'rozā', 'kn': 'ಸಂಪರ್ಕಕೊಂಡಿ', 'hsb': 'róžowy', 'tr': 'pembe', 'es': 'rosa', 'el': 'ροζ|pink', 'hr': 'ružićasta', 'cs': 'růžová', 'sr_Latn': 'roze', 'he': 'ורוד', 'nl': 'roze', 'de': 'rosa', 'hi': 'कड़ी', 'ml': 'പിങ്ക്', 'gu': 'ગુલાબી', 'ko': '분홍', 'zh_TW': '粉紅|pink', 'mr': 'पिंक', 'ru': 'розовый', 'sl': 'roza', 'bn_IN': 'লিংক', 'am': 'ሮዝ', 'et': 'roosa', 'uk': 'рожевий', 'pt_BR': 'rosa', 'kk': 'қызғылт', 'te': 'పింక్', 'br': 'roz', 'is': 'bleikt', 'km': 'ផ្កាឈូក', 'nb': 'rosa|pink', 'bs': 'roza', 'eu': 'arrosa', 'hu': 'rózsaszín', 'cy': 'pinc', 'pa_IN': 'ਲਿੰਕ', 'ast': 'rosa', 'gug': 'pytãngy', 'vi': 'Liên kết', 'as': 'গোলাপী', 'gd': 'pinc', 'or': 'ଗୋଲାପି', 'ja': 'ピンク|pink', 'nn': 'rosa|pink', 'fr': 'rose', 'be': 'ружовы', 'sq': 'rozë', 'oc': 'ròse', 'gl': 'rosa', 'ar': 'وردي', 'en_US': 'pink', 'sk': 'Odkaz', 'sr': 'розе', 'zh_CN': '粉色|粉|pink', 'eo': 'rozkolora', 'ta': 'இளஞ்சிவப்பு', 'ca_valencia': 'rosa', 'ne': 'लिङ्क', 'ca': 'rosa', 'si': 'සබඳින්න', 'my': 'ကွင်းဆက်', 'ka': 'ბმული'},
2130 'PENTRANSPARENCY':{'lt': 'pieštuko.skaidrumas|linijos.skaidrumas|psk', 'uk': 'прозорість_пера|прозорість_лінії', 'pt_BR': 'mudarTransparênciaDoLápis|mTraLa|mTraLi', 'kk': 'қалам_мөлдірлілігі|сызық_мөлдірлілігі', 'fi': 'kynänläpinäkyvyys', 'br': 'boullderkreion|boullderlinenn', 'km': 'ភាព\u200bថ្លា|ភាពថ្លាបន្ទាត់', 'fr': 'transparencecrayon|tranparenceligne', 'lv': 'spalvas_caurspīdīgums|līnijas_caurspīdīgums', 'kn': 'ಲೇಖನಿಪಾರದರ್ಶಕತೆ|ಸಾಲಿನಪಾರದರ್ಶಕತೆ', 'eu': 'lumagardentasuna|marragardentasuna', 'hr': 'prozirnostolovke|prozirnostlinije', 'es': 'pluma.transparencia|línea.transparencia', 'nn': 'penngjennomsikt|linjegjennomsikt', 'gug': 'bolígrafo.hesakã|línea.hesakã', 'oc': 'transparénciagredon|tranparéncialinha', 'cs': 'průhlednostpera|průhlednostčáry|průhlpera|průhlčáry', 'de': 'stifttransparenz|linientransparenz|st|lt', 'tr': 'kalemşeffaflığı|çizgişeffaflığı', 'nl': 'pentranparantie|lijntransparantie', 'or': 'କଲମସ୍ୱଚ୍ଛତା|ଧାଡ଼ିସ୍ୱଚ୍ଛତା', 'he': 'שקיפות_עט|שקיפות_קו', 'hsb': 'transparencapisaka|transparencalinije|tp|tl', 'nb': 'penngjennomsiktighet|linjegjennomsiktighet', 'hu': 'tollátlátszóság', 'gl': 'transparencialapis|transparencialiña', 'ar': 'شفافية_القلم', 'en_US': 'pentransparency|linetransparency', 'sk': 'priehľadnosťpera|priehľadnosťčiary|pp|pč', 'ko': '투명펜', 'eo': 'plumtravideblo|linitravideblo', 'ca_valencia': 'llapis.transparència|línia.transparència', 'zh_TW': '筆透明|線透明|pentransparency|linetransparency', 'et': 'pliiatsi_läbipaistvus|joone_läbipaistvus', 'zh_CN': '笔透明|线透明|pentransparency|linetransparency', 'el': 'διαφάνειαγραφίδας|διαφάνειαγραμμής', 'ru': 'прозр_пера|прозр_линии|пп', 'sl': 'prosojnostperesa|prosojnostčrte', 'ug': 'قەلەم سۈزۈك|سىزىق سۈزۈك|pentransparency|linetransparency', 'ja': 'ペンの透明度|pentransparency|linetransparency', 'ca': 'llapis.transparència|línia.transparència'},
2131 'PENCOLOR':{'lt': 'pieštuko.spalva|linijos.spalva|psp', 'th': 'pencolor|สีปากกา|สีเส้น|pc', 'sid': 'biiretekuula|biiretekuula|xuruurukuula|bk', 'fi': 'kynänväri|kv', 'ro': 'pencolor|pencolour|linecolor|pc|culoarestilou', 'lv': 'spalvas_krāsa|linijas_krāsa|sk', 'kn': 'ಲೇಖನಿಬಣ್ಣ|ಲೇಖನಿಯಬಣ್ಣ|ರೇಖೆಬಣ್ಣ|pc', 'hsb': 'barbapisaka|barbalinije|bp|bl', 'tr': 'kalemrengi|kalemrengi|satırrengi|kr', 'es': 'color.lápiz|color.línea|cl', 'el': 'χρώμαγραφίδας|χρώμαγραμμής|χγ|pencolor|pencolour|linecolor|pc', 'hr': 'boja olovke|boja olovke|boja linije|bo', 'cs': 'barvapera|barvačáry|bp', 'de': 'stiftfarbe|linienfarbe|sf|lf', 'he': 'צבעעט|צבעט|צבעקו|צק', 'nl': 'penkleur|lijnkleur|pk', 'hu': 'tollszín|tollszín!|tsz!?|vonalszín', 'ko': '펜색상|펜색상|선색상|pc', 'zh_TW': '筆顏色|筆色|線顏色|線色|筆色彩|線色彩|pencolor|pencolour|linecolor|pc', 'mr': 'पेनकलर|पेनकलर|लाइनकलर|pc', 'ru': 'цвет_пера|цвет_линии|ц', 'sl': 'barvaperesa|barvačrte|bp', 'am': 'የ ብዕር ቀለም|የ ብዕር ቀለም|የ መስመር ቀለም|ብ/ቀ', 'et': 'pliiatsi_värv|joonevärv|pv|jv', 'uk': 'колір_пера|колір_лінії|кп', 'pt_BR': 'mudarCorDoLápis|mCorLa|mudeCorDoLápis|mudecl', 'kk': 'қалам_түсі|сызық_түсі|т', 'km': 'ពណ៌\u200bប៉ិក|pencolour|linecolor|pc', 'nb': 'pennfarge|pencolour|pf|linjefarge|pc', 'bs': 'bojaolovke|bojaolovke|bojalinije|pc', 'eu': 'lumakolorea|marrakolorea|lk', 'ast': 'llapizcolor|lliniacolor|lc', 'gug': "sa'y.lápiz|sa'y.línea|cl", 'or': 'ପେନରଙ୍ଗ|ପେନରଙ୍ଗ|ଧାଡ଼ିରଙ୍ଗ|pc', 'mn': 'үзэгний өнгө|шугамын өнгө|үөн|шөн', 'ja': 'ペンの色|線の色|pencolor|pc', 'nn': 'pennfarge|linjefarge|pf|pencolor', 'fr': 'couleurcrayon|ccrayon|couleurligne|cc', 'gl': 'estilocor|estilodacor|liñadecor|ec', 'ar': 'لون_القلم', 'en_US': 'pencolor|pencolour|linecolor|pc', 'sk': 'farbapera|farbačiary|fp|fč', 'eo': 'plumkoloro|linikoloro|pk', 'ca_valencia': 'color.llapis|color.línia|cl', 'ca': 'color.llapis|color.línia|cl', 'zh_CN': '笔颜色|笔色|线颜色|线色|pencolor|pencolour|linecolor|pc'},
2132 'HEADING':{'lt': 'žvelk', 'sid': 'umallo|umalloqineessi|uqineessi', 'ja': '進む向き|向き|heading', 'pt_BR': 'mudarDireção|mDir|direção', 'kk': 'атауы|атауын_орнату|ата', 'fi': 'suunta', 'br': 'talbenn|setheading|seth', 'eo': 'direkto|dir', 'ro': 'heading|setheading|seth|direcție', 'fr': 'cap|fixecap|fc', 'lv': 'azimuts|iestatīt_azimutu|iest_az', 'kn': 'ಶೀರ್ಷಿಕೆ|ಶೀರ್ಷಿಕೆಹೊಂದಿಸು|seth', 'eu': 'izenburua|ezarriizenburua|ezarrig', 'tr': 'başlık|başlığıayarla|baş.ayarla', 'es': 'sentido|dirección|dir', 'ca': 'canvia.sentit|sentit|heading|setheading|seth', 'el': 'επικεφαλίδα|ορισμόςεπικεφαλίδας|ορε|heading|setheading|seth', 'uk': 'заголовок|задати_заголовок|заг', 'hr': 'naslov|postavinaslov|postavin', 'cs': 'směr|nastavsměr', 'de': 'richtung|ri', 'nl': 'richting', 'bs': 'zaglavlje|postavizaglavlje|seth', 'he': 'כותרת|הגדרתכותרת|הגכ', 'hsb': 'směr', 'nb': 'retning|settretning|heading', 'hu': 'irány|irány!', 'gl': 'cabeceira|estabelecercabeceira|ec', 'ar': 'ترويسة|عين_ترويسة', 'en_US': 'heading|setheading|seth', 'sk': 'smer|nastavsmer|ns', 'ko': '제목|제목설정|seth', 'or': 'ଶୀର୍ଷକ|ଶୀର୍ଷକ ବିନ୍ୟାସ|seth', 'ca_valencia': 'canvia.sentit|sentit|heading|setheading|seth', 'zh_TW': '朝向|定向|heading|setheading|seth', 'mr': 'हेडिंग|सेटहेडिंग|सेटएच', 'zh_CN': '朝向|定向|heading|setheading|seth', 'ast': 'direición|pondireición|dir', 'ru': 'заголовок|установить_заголовок|заг', 'sl': 'smer|določismer|dols', 'oc': 'títol|definirtítol|deft', 'am': 'ራስጌ|ራስጌ ማሰናጃ|ራ.ማ', 'et': 'pealkiri|määra_pealkiri'},
2133 'MITER':{'lt': 'kampinis', 'sid': 'metire', 'fi': 'jiiri', 'ro': 'miter|ascuțit', 'lv': 'spics', 'kn': 'ಮಿಟರ್', 'hsb': 'nakosa', 'tr': 'köşe', 'es': 'mitra|inglete|bies', 'el': 'μύτη|miter', 'hr': 'koljeno', 'cs': 'ostré', 'de': 'gehrung', 'he': 'משלים', 'nl': 'snijdend', 'hu': 'hegyes', 'hi': 'माइटर', 'gu': 'મિટર', 'ko': '미터', 'zh_TW': '尖角|miter', 'mr': 'मीटर', 'ru': 'скос45', 'sl': 'izbočeno', 'am': 'መጋጠሚያ', 'et': 'terav', 'uk': 'скіс45', 'pt_BR': 'pontudo', 'kk': 'көлбеу45', 'br': 'garan', 'is': 'hornskeyting', 'km': 'ផ្គុំ', 'nb': 'skarp|miter', 'bs': 'kosispoj', 'eu': 'ebakia', 'cy': 'meitr', 'pa_IN': 'ਕਣ', 'ast': 'inglete', 'gug': 'mitra|inglete|bies', 'oc': 'mitra', 'or': 'ମିଟର', 'gd': 'bairrin', 'ja': '角をとがらせる|miter', 'nn': 'skarp|miter', 'fr': 'mitre', 'gl': 'bispel', 'ar': 'قلنسوة', 'en_US': 'miter', 'sk': 'ostré', 'zh_CN': '尖角|miter', 'eo': 'oblikva', 'ta': 'மைட்டர்', 'ca_valencia': 'esbiaixa|biaix', 'ca': 'esbiaixa|biaix', 'ug': 'چېتىق'},
2134 'SKYBLUE':{'lt': 'dangaus', 'sid': 'gordukuula', 'fi': 'taivaansininen', 'lv': 'debeszils', 'kn': 'ಆಕಾಶನೀಲಿ', 'hsb': 'njebjomódry', 'tr': 'gök mavisi', 'es': 'azulcielo|celeste', 'el': 'ουρανί|skyblue', 'hr': 'nebeskoplava', 'cs': 'bleděmodrá', 'sr_Latn': 'nebesko plava', 'he': 'כחולשמיים|כחולשמים|שמיים|שמים', 'nl': 'hemelsblauw', 'de': 'hellblau', 'hi': 'आसमानी', 'ml': 'സ്കൈബ്ലൂ', 'gu': 'આકાશીવાદળી', 'ko': '하늘색', 'zh_TW': '天藍|skyblue', 'mr': 'स्कायब्ल्यु', 'ru': 'небесно-голубой', 'sl': 'nebesnomodra', 'bn_IN': 'অাকাশি নীল', 'am': 'ሰማያዊ', 'et': 'taevasinine', 'uk': 'небесно-синій', 'pt_BR': 'celeste', 'kk': 'ашық_көк', 'te': 'నింగినీలం', 'br': 'glaz oabl', 'is': 'himinblátt', 'km': 'ផ្ទៃមេឃ', 'nb': 'himmelblå|skyblue', 'bs': 'nebeskoplava', 'eu': 'zeruurdina', 'hu': 'égszínkék|világoskék', 'ast': 'celeste', 'it': 'celeste', 'gug': 'hovyyvága|celeste', 'as': 'আকাশনীলা', 'gd': 'speur-ghorm', 'or': 'ଆକାଶୀ ନୀଳ', 'ja': '空色|スカイブルー|skyblue', 'nn': 'himmelblå|skyblue', 'fr': 'bleuciel', 'be': 'нябесна-блакітны', 'gl': 'celeste', 'ar': 'سماوي', 'en_US': 'skyblue', 'sk': 'bledomodrá', 'sr': 'небеско плава', 'eo': 'ĉielblua', 'ta': 'வான்நீலம்', 'ca_valencia': 'blau.cel|cel', 'ca': 'blau.cel|cel', 'zh_CN': '天蓝|天蓝色|skyblue'},
2135 'FONTSTYLE':{'lt': 'šrifto.stilius|teksto.stilius', 'th': 'รูปแบบอักขระ', 'sid': 'borangichuakat', 'fi': 'fonttityyli', 'ro': 'fontstyle|stilfont', 'lv': 'fonta_stils', 'kn': 'ಅಕ್ಷರಶೈಲಿ', 'hsb': 'stilpisma|sp', 'es': 'estilo.letra|estilo.fuente', 'el': 'μορφήγραμματοσειράς|fontstyle', 'hr': 'stil fonta', 'cs': 'stylpísma', 'de': 'schriftstil|schs', 'he': 'סגנוןגופן', 'nl': 'tekststijl|letterstijl', 'hu': 'betűstílus', 'gu': 'ફોન્ટ શૈલી', 'ko': '글꼴스타일', 'zh_TW': '字型樣式|字樣式|fontstyle', 'mr': 'फाँटची शैली', 'ru': 'стиль_шрифта', 'sl': 'slogpisave', 'bn_IN': 'হরফ-শৈলী', 'am': 'የፊደል ዘዴ', 'et': 'fondi_stiil', 'uk': 'стиль_символів', 'pt_BR': 'mudarEstiloDaLetra|mEstLe', 'kk': 'қаріп_стилі', 'te': 'ఫాంటుశైలి', 'br': 'stil an nodrezh', 'is': 'leturstíll', 'km': 'រចនាប័ទ្ម\u200bពុម្ពអក្សរ', 'nb': 'skriftstil|fontstyle', 'bs': 'stilfonta', 'eu': 'letraestiloa', 'ast': 'estiludefonte', 'tr': 'yazı tipi biçemi', 'or': 'ଅକ୍ଷରରୂପ ଶୈଳୀ', 'ja': '文字の書き方|文字のスタイル|フォントのスタイル|fontstyle', 'nn': 'skriftstil|fontstyle', 'fr': 'stylepolice', 'gl': 'estilo de tipo de letra', 'ar': 'نمط_الخط', 'en_US': 'fontstyle', 'sk': 'štýlpísma|šp', 'zh_CN': '字体样式|字样式|字样|fontstyle', 'eo': 'tiparostilo', 'ta': 'எழுத்துரு பாணி', 'ca_valencia': 'estil.lletra|el', 'ca': 'estil.lletra|el', 'ug': 'خەت نۇسخا ئۇسلۇبى'},
2136 'LIST':{'lt': 'gauk.sąrašą|sąrašas|gksr', 'sid': 'dirto', 'fi': 'lista', 'ro': 'list|listă', 'lv': 'saraksts', 'kn': 'ಪಟ್ಟಿ', 'hsb': 'lisćina', 'tr': 'liste', 'es': 'lista', 'el': 'κατάλογος|list', 'hr': 'popis', 'cs': 'seznam', 'de': 'liste', 'he': 'רשימה', 'nl': 'Lijst', 'hu': 'lista', 'hi': 'सूची', 'gu': 'યાદી', 'ko': '목록', 'zh_TW': '清單|列表|list', 'mr': 'लिस्ट', 'sat': 'लिसटी', 'ru': 'список', 'sl': 'izpišiseznam', 'bn_IN': 'তালিকা', 'am': 'ዝርዝር', 'et': 'loend', 'uk': 'список', 'pt_BR': 'lista', 'kk': 'тізім', 'te': 'జాబిత', 'br': 'roll', 'is': 'listi', 'km': 'បញ្ជី', 'nb': 'liste|list', 'bs': 'lista', 'eu': 'zerrenda', 'cy': 'rhestr', 'ka': 'სია', 'ast': 'llista', 'gug': 'lista', 'oc': 'lista', 'or': 'ତାଲିକା', 'ja': 'リスト|list', 'nn': 'liste|list', 'fr': 'liste', 'be': 'спіс', 'sq': 'lista', 'gl': 'lista', 'ar': 'قائمة', 'en_US': 'list', 'sk': 'Zoznam', 'zh_CN': '列表|list', 'eo': 'listo', 'ta': 'பட்டியல்', 'ca_valencia': 'llista', 'ne': 'सूची', 'ca': 'llista', 'si': 'ලැයිස්තුව', 'dgo': 'सूची', 'my': 'စာရင်း'},
2137 'ERR_ZERODIVISION':{'fi': 'Jako nollalla.', 'kn': 'ಶೂನ್ಯದಿಂದ ಭಾಗಾಕಾರ.', 'sv': 'Division med noll.', 'hr': 'Dijeljenje s nulom.',