1dcba6a62d152e2fdd9bd681b2ec204b45b8fb59
[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     "vert", "verts",
250     "vis",
251     "xyz", "xzy", "yxz", "yzx", "zxy", "zyx",
252     "xy", "xz", "yx", "yz", "zx", "zy",
253
254     # General computer/science terms
255     "boid", "boids",
256     "equisolid",
257     "euler", "eulers",
258     "hashable",
259     "intrinsics",
260     "isosurface",
261     "jitter", "jittering", "jittered",
262     "keymap", "keymaps",
263     "lambertian",
264     "laplacian",
265     "metadata",
266     "nand", "xnor",
267     "normals",
268     "numpad",
269     "octree",
270     "opengl",
271     "pulldown", "pulldowns",
272     "quantized",
273     "samplerate",
274     "scrollback",
275     "scrollbar",
276     "scroller",
277     "searchable",
278     "spacebar",
279     "tooltip", "tooltips",
280     "trackpad",
281     "unicode",
282     "viewport", "viewports",
283     "viscoelastic",
284     "wildcard", "wildcards",
285
286     # General computer graphics terms
287     "anaglyph",
288     "bezier", "beziers",
289     "bicubic",
290     "bilinear",
291     "blackpoint", "whitepoint",
292     "blinn",
293     "bokeh",
294     "catadioptric",
295     "centroid",
296     "chrominance",
297     "codec", "codecs",
298     "collada",
299     "compositing",
300     "crossfade",
301     "deinterlace",
302     "dropoff",
303     "dv",
304     "eigenvectors",
305     "equirectangular",
306     "fisheye",
307     "framerate",
308     "gimbal",
309     "grayscale",
310     "icosphere",
311     "inpaint",
312     "lightmap",
313     "lossless", "lossy",
314     "midtones",
315     "mipmap", "mipmaps", "mip",
316     "ngon", "ngons",
317     "ntsc",
318     "nurb", "nurbs",
319     "perlin",
320     "phong",
321     "radiosity",
322     "raytrace", "raytracing", "raytraced",
323     "renderfarm",
324     "shader", "shaders",
325     "specular", "specularity",
326     "spillmap",
327     "sobel",
328     "tonemap",
329     "toon",
330     "timecode",
331     "voronoi",
332     "voxel", "voxels",
333     "wireframe",
334     "zmask",
335     "ztransp",
336
337     # Blender terms
338     "audaspace",
339     "bbone",
340     "breakdowner",
341     "bspline",
342     "bweight",
343     "colorband",
344     "datablock", "datablocks",
345     "despeckle",
346     "dopesheet",
347     "dupliface", "duplifaces",
348     "dupliframe", "dupliframes",
349     "dupliobject", "dupliob",
350     "dupligroup",
351     "duplivert",
352     "editbone",
353     "editmode",
354     "fcurve", "fcurves",
355     "fluidsim",
356     "frameserver",
357     "enum",
358     "keyframe", "keyframes", "keyframing", "keyframed",
359     "metaball", "metaballs",
360     "metaelement", "metaelements",
361     "metastrip", "metastrips",
362     "movieclip",
363     "mpoly",
364     "mtex",
365     "nabla",
366     "navmesh",
367     "outliner",
368     "paintmap", "paintmaps",
369     "polygroup", "polygroups",
370     "poselib",
371     "pushpull",
372     "pyconstraint", "pyconstraints",
373     "shapekey", "shapekeys",
374     "shrinkfatten",
375     "shrinkwrap",
376     "softbody",
377     "stucci",
378     "sunsky",
379     "subsurf",
380     "tessface", "tessfaces",
381     "texface",
382     "timeline", "timelines",
383     "tosphere",
384     "uilist",
385     "vcol", "vcols",
386     "vgroup", "vgroups",
387     "vinterlace",
388     "wetmap", "wetmaps",
389     "wpaint",
390     "uvwarp",
391
392     # Algorithm names
393     "beckmann",
394     "catmull",
395     "catrom",
396     "chebychev",
397     "courant",
398     "kutta",
399     "lennard",
400     "minkowski",
401     "minnaert",
402     "musgrave",
403     "nayar",
404     "netravali",
405     "oren",
406     "prewitt",
407     "runge",
408     "verlet",
409     "worley",
410
411     # Acronyms
412     "aa", "msaa",
413     "api",
414     "asc", "cdl",
415     "ascii",
416     "atrac",
417     "bw",
418     "ccd",
419     "cmd",
420     "cpus",
421     "ctrl",
422     "cw", "ccw",
423     "dev",
424     "djv",
425     "dpi",
426     "dvar",
427     "dx",
428     "eo",
429     "fh",
430     "fov",
431     "fft",
432     "futura",
433     "gfx",
434     "gl",
435     "glsl",
436     "gpl",
437     "gpu", "gpus",
438     "hc",
439     "hdc",
440     "hdr",
441     "hh", "mm", "ss", "ff",  # hh:mm:ss:ff timecode
442     "hsv", "hsva",
443     "id",
444     "itu",
445     "lhs",
446     "lmb", "mmb", "rmb",
447     "mux",
448     "ndof",
449     "ppc",
450     "precisa",
451     "px",
452     "qmc",
453     "rgb", "rgba",
454     "rhs",
455     "rv",
456     "sdl",
457     "sl",
458     "smpte",
459     "svn",
460     "ui",
461     "unix",
462     "vbo", "vbos",
463     "ycc", "ycca",
464     "yuv", "yuva",
465
466     # Blender acronyms
467     "bge",
468     "bli",
469     "bvh",
470     "dbvt",
471     "dop",  # BLI K-Dop BVH
472     "ik",
473     "nla",
474     "py",
475     "qbvh",
476     "rna",
477     "rvo",
478     "simd",
479     "sph",
480     "svbvh",
481
482     # CG acronyms
483     "ao",
484     "bsdf",
485     "ior",
486     "mocap",
487
488     # Files types/formats
489     "avi",
490     "attrac",
491     "autocad",
492     "autodesk",
493     "bmp",
494     "btx",
495     "cineon",
496     "dpx",
497     "dxf",
498     "eps",
499     "exr",
500     "fbx",
501     "ffmpeg",
502     "flac",
503     "gzip",
504     "ico",
505     "jpg", "jpeg",
506     "matroska",
507     "mdd",
508     "mkv",
509     "mpeg", "mjpeg",
510     "mtl",
511     "ogg",
512     "openjpeg",
513     "osl",
514     "oso",
515     "piz",
516     "png",
517     "po",
518     "quicktime",
519     "rle",
520     "sgi",
521     "stl",
522     "svg",
523     "targa", "tga",
524     "tiff",
525     "theora",
526     "vorbis",
527     "wav",
528     "xiph",
529     "xml",
530     "xna",
531     "xvid",
532 }