Bunch of fixes for UI messages.
[blender.git] / release / scripts / modules / bl_i18n_utils / spell_check_utils.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20
21 import re
22
23
24 _valid_before = "(?<=[\\s*'\"`])|(?<=[a-zA-Z][/-])|(?<=^)"
25 _valid_after = "(?=[\\s'\"`.!?,;:])|(?=[/-]\\s*[a-zA-Z])|(?=$)"
26 _valid_words = "(?:{})(?:(?:[A-Z]+[a-z]*)|[A-Z]*|[a-z]*)(?:{})".format(_valid_before, _valid_after)
27 _reg = re.compile(_valid_words)
28
29
30 def split_words(text):
31     return [w for w in _reg.findall(text) if w]
32
33
34 # These must be all lower case for comparisons
35 dict_uimsgs = {
36     # OK words
37     "aren",  # aren't
38     "betweens",  # yuck! in-betweens!
39     "boolean", "booleans",
40     "couldn",  # couldn't
41     "decrement",
42     "derivate",
43     "doesn",  # doesn't
44     "fader",
45     "hasn",  # hasn't
46     "hoc",  # ad-hoc
47     "indices",
48     "iridas",
49     "isn",  # isn't
50     "iterable",
51     "kyrgyz",
52     "latin",
53     "merchantability",
54     "mplayer",
55     "vertices",
56
57     # Merged words
58     "addon", "addons",
59     "antialiasing",
60     "arcsine", "arccosine", "arctangent",
61     "autoclip",
62     "autocomplete",
63     "autoname",
64     "autosave",
65     "autoscale",
66     "autosmooth",
67     "autosplit",
68     "backface", "backfacing",
69     "backimage",
70     "backscattered",
71     "bandnoise",
72     "bindcode",
73     "bitrate",
74     "blendin",
75     "bonesize",
76     "boundbox",
77     "boxpack",
78     "buffersize",
79     "builtin", "builtins",
80     "bytecode",
81     "chunksize",
82     "de",
83     "defocus",
84     "denoise",
85     "despill", "despilling",
86     "filebrowser",
87     "filelist",
88     "filename", "filenames",
89     "filepath", "filepaths",
90     "forcefield", "forcefields",
91     "fulldome", "fulldomes",
92     "fullscreen",
93     "gridline",
94     "hemi",
95     "inbetween",
96     "inscatter", "inscattering",
97     "libdata",
98     "lightless",
99     "lookup", "lookups",
100     "mathutils",
101     "midlevel",
102     "midground",
103     "mixdown",
104     "multi",
105     "multifractal",
106     "multires", "multiresolution",
107     "multisampling",
108     "multitexture",
109     "multiuser",
110     "namespace",
111     "keyconfig",
112     "playhead",
113     "polyline",
114     "popup", "popups",
115     "pre",
116     "precalculate",
117     "prefetch",
118     "premultiply", "premultiplied",
119     "prepass",
120     "prepend",
121     "preprocess", "preprocessing",
122     "preseek",
123     "readonly",
124     "realtime",
125     "rekey",
126     "remesh",
127     "reprojection",
128     "resize",
129     "restpose",
130     "retarget", "retargets", "retargeting", "retargeted",
131     "ringnoise",
132     "rolloff",
133     "screencast", "screenshot", "screenshots",
134     "selfcollision",
135     "singletexture",
136     "startup",
137     "stateful",
138     "starfield",
139     "subflare", "subflares",
140     "subframe", "subframes",
141     "subclass", "subclasses", "subclassing",
142     "subdirectory", "subdirectories", "subdir", "subdirs",
143     "submodule", "submodules",
144     "subpath",
145     "subsize",
146     "substep", "substeps",
147     "targetless",
148     "textbox", "textboxes",
149     "tilemode",
150     "timestamp", "timestamps",
151     "timestep", "timesteps",
152     "todo",
153     "un",
154     "unbake",
155     "uncomment",
156     "undeformed",
157     "undistort", "undistortion",
158     "ungroup",
159     "unhide",
160     "unindent",
161     "unkeyed",
162     "unpremultiply",
163     "unprojected",
164     "unreacted",
165     "unregister",
166     "unselected",
167     "unsubdivided", "unsubdivide",
168     "unshadowed",
169     "unspill",
170     "unstitchable",
171     "vectorscope",
172     "whitespace", "whitespaces",
173     "worldspace",
174     "workflow",
175
176     # Neologisms, slangs
177     "affectable",
178     "automagic", "automagically",
179     "blobby",
180     "blockiness", "blocky",
181     "collider", "colliders",
182     "deformer", "deformers",
183     "determinator",
184     "editability",
185     "keyer",
186     "lacunarity",
187     "numerics",
188     "occluder",
189     "passepartout",
190     "perspectively",
191     "pixelate",
192     "polygonization",
193     "selectability",
194     "slurph",
195     "stitchable",
196     "symmetrize",
197     "trackability",
198     "transmissivity",
199     "rasterized", "rasterization", "rasterizer",
200     "renderer", "renderable", "renderability",
201
202     # Abbreviations
203     "aero",
204     "amb",
205     "anim",
206     "bool",
207     "calc",
208     "config", "configs",
209     "const",
210     "coord", "coords",
211     "degr",
212     "dof",
213     "dupli", "duplis",
214     "eg",
215     "esc",
216     "expr",
217     "fac",
218     "fra",
219     "frs",
220     "grless",
221     "http",
222     "init",
223     "kbit",
224     "lensdist",
225     "loc", "rot", "pos",
226     "lorem",
227     "luma",
228     "multicam",
229     "num",
230     "ok",
231     "orco",
232     "ortho",
233     "persp",
234     "pref", "prefs",
235     "prev",
236     "param",
237     "premul",
238     "quad", "quads",
239     "quat", "quats",
240     "recalc", "recalcs",
241     "refl",
242     "sel",
243     "spec",
244     "struct", "structs",
245     "tex",
246     "tri", "tris",
247     "uv", "uvs", "uvw", "uw", "uvmap",
248     "vec",
249     "vel",  # velocity!
250     "vert", "verts",
251     "vis",
252     "xyz", "xzy", "yxz", "yzx", "zxy", "zyx",
253     "xy", "xz", "yx", "yz", "zx", "zy",
254
255     # General computer/science terms
256     "boid", "boids",
257     "equisolid",
258     "euler", "eulers",
259     "hashable",
260     "intrinsics",
261     "isosurface",
262     "jitter", "jittering", "jittered",
263     "keymap", "keymaps",
264     "lambertian",
265     "laplacian",
266     "metadata",
267     "nand", "xnor",
268     "normals",
269     "numpad",
270     "octree",
271     "opengl",
272     "pulldown", "pulldowns",
273     "quantized",
274     "samplerate",
275     "scrollback",
276     "scrollbar",
277     "scroller",
278     "searchable",
279     "spacebar",
280     "tooltip", "tooltips",
281     "trackpad",
282     "unicode",
283     "viewport", "viewports",
284     "viscoelastic",
285     "wildcard", "wildcards",
286
287     # General computer graphics terms
288     "anaglyph",
289     "bezier", "beziers",
290     "bicubic",
291     "bilinear",
292     "blackpoint", "whitepoint",
293     "blinn",
294     "bokeh",
295     "catadioptric",
296     "centroid",
297     "chrominance",
298     "codec", "codecs",
299     "collada",
300     "compositing",
301     "crossfade",
302     "deinterlace",
303     "dropoff",
304     "dv",
305     "eigenvectors",
306     "equirectangular",
307     "fisheye",
308     "framerate",
309     "gimbal",
310     "grayscale",
311     "icosphere",
312     "inpaint",
313     "lightmap",
314     "lossless", "lossy",
315     "matcap",
316     "midtones",
317     "mipmap", "mipmaps", "mip",
318     "ngon", "ngons",
319     "ntsc",
320     "nurb", "nurbs",
321     "perlin",
322     "phong",
323     "radiosity",
324     "raytrace", "raytracing", "raytraced",
325     "renderfarm",
326     "shader", "shaders",
327     "specular", "specularity",
328     "spillmap",
329     "sobel",
330     "tonemap",
331     "toon",
332     "timecode",
333     "voronoi",
334     "voxel", "voxels",
335     "wireframe",
336     "zmask",
337     "ztransp",
338
339     # Blender terms
340     "audaspace",
341     "bbone",
342     "breakdowner",
343     "bspline",
344     "bweight",
345     "colorband",
346     "datablock", "datablocks",
347     "despeckle",
348     "dopesheet",
349     "dupliface", "duplifaces",
350     "dupliframe", "dupliframes",
351     "dupliobject", "dupliob",
352     "dupligroup",
353     "duplivert",
354     "editbone",
355     "editmode",
356     "fcurve", "fcurves",
357     "fluidsim",
358     "frameserver",
359     "enum",
360     "keyframe", "keyframes", "keyframing", "keyframed",
361     "metaball", "metaballs",
362     "metaelement", "metaelements",
363     "metastrip", "metastrips",
364     "movieclip",
365     "mpoly",
366     "mtex",
367     "nabla",
368     "navmesh",
369     "outliner",
370     "paintmap", "paintmaps",
371     "polygroup", "polygroups",
372     "poselib",
373     "pushpull",
374     "pyconstraint", "pyconstraints",
375     "shapekey", "shapekeys",
376     "shrinkfatten",
377     "shrinkwrap",
378     "softbody",
379     "stucci",
380     "sunsky",
381     "subsurf",
382     "tessface", "tessfaces",
383     "texface",
384     "timeline", "timelines",
385     "tosphere",
386     "uilist",
387     "vcol", "vcols",
388     "vgroup", "vgroups",
389     "vinterlace",
390     "wetmap", "wetmaps",
391     "wpaint",
392     "uvwarp",
393
394     # Algorithm names
395     "beckmann",
396     "catmull",
397     "catrom",
398     "chebychev",
399     "courant",
400     "kutta",
401     "lennard",
402     "minkowski",
403     "minnaert",
404     "musgrave",
405     "nayar",
406     "netravali",
407     "oren",
408     "prewitt",
409     "runge",
410     "verlet",
411     "worley",
412
413     # Acronyms
414     "aa", "msaa",
415     "api",
416     "asc", "cdl",
417     "ascii",
418     "atrac",
419     "bw",
420     "ccd",
421     "cmd",
422     "cpus",
423     "ctrl",
424     "cw", "ccw",
425     "dev",
426     "djv",
427     "dpi",
428     "dvar",
429     "dx",
430     "eo",
431     "fh",
432     "fov",
433     "fft",
434     "futura",
435     "gfx",
436     "gl",
437     "glsl",
438     "gpl",
439     "gpu", "gpus",
440     "hc",
441     "hdc",
442     "hdr",
443     "hh", "mm", "ss", "ff",  # hh:mm:ss:ff timecode
444     "hsv", "hsva",
445     "id",
446     "itu",
447     "lhs",
448     "lmb", "mmb", "rmb",
449     "mux",
450     "ndof",
451     "ppc",
452     "precisa",
453     "px",
454     "qmc",
455     "rgb", "rgba",
456     "rhs",
457     "rv",
458     "sdl",
459     "sl",
460     "smpte",
461     "svn",
462     "ui",
463     "unix",
464     "vbo", "vbos",
465     "ycc", "ycca",
466     "yuv", "yuva",
467
468     # Blender acronyms
469     "bge",
470     "bli",
471     "bvh",
472     "dbvt",
473     "dop",  # BLI K-Dop BVH
474     "ik",
475     "nla",
476     "py",
477     "qbvh",
478     "rna",
479     "rvo",
480     "simd",
481     "sph",
482     "svbvh",
483
484     # CG acronyms
485     "ao",
486     "bsdf",
487     "ior",
488     "mocap",
489
490     # Files types/formats
491     "avi",
492     "attrac",
493     "autocad",
494     "autodesk",
495     "bmp",
496     "btx",
497     "cineon",
498     "dpx",
499     "dxf",
500     "eps",
501     "exr",
502     "fbx",
503     "ffmpeg",
504     "flac",
505     "gzip",
506     "ico",
507     "jpg", "jpeg",
508     "matroska",
509     "mdd",
510     "mkv",
511     "mpeg", "mjpeg",
512     "mtl",
513     "ogg",
514     "openjpeg",
515     "osl",
516     "oso",
517     "piz",
518     "png",
519     "po",
520     "quicktime",
521     "rle",
522     "sgi",
523     "stl",
524     "svg",
525     "targa", "tga",
526     "tiff",
527     "theora",
528     "vorbis",
529     "wav",
530     "xiph",
531     "xml",
532     "xna",
533     "xvid",
534 }