3999c01a896bfd3a67e511ad0e4e1415c34b2d4a
[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     "decrement",
41     "doesn",  # doesn't
42     "fader",
43     "hoc",  # ad-hoc
44     "indices",
45     "iridas",
46     "isn",  # isn't
47     "iterable",
48     "kyrgyz",
49     "latin",
50     "merchantability",
51     "mplayer",
52     "vertices",
53
54     # Merged words
55     "addon", "addons",
56     "antialiasing",
57     "arcsine", "arccosine", "arctangent",
58     "autoclip",
59     "autocomplete",
60     "autoname",
61     "autosave",
62     "autoscale",
63     "autosmooth",
64     "autosplit",
65     "backface",
66     "backimage",
67     "backscattered",
68     "bandnoise",
69     "bindcode",
70     "bitrate",
71     "blendin",
72     "bonesize",
73     "boundbox",
74     "boxpack",
75     "buffersize",
76     "builtin", "builtins",
77     "chunksize",
78     "de",
79     "defocus",
80     "denoise",
81     "despill", "despilling",
82     "filebrowser",
83     "filelist",
84     "filename", "filenames",
85     "filepath", "filepaths",
86     "forcefield", "forcefields",
87     "fulldome", "fulldomes",
88     "fullscreen",
89     "gridline",
90     "hemi",
91     "inscatter",
92     "lightless",
93     "lookup", "lookups",
94     "mathutils",
95     "midlevel",
96     "midground",
97     "mixdown",
98     "multi",
99     "multifractal",
100     "multires", "multiresolution",
101     "multisampling",
102     "multitexture",
103     "namespace",
104     "keyconfig",
105     "playhead",
106     "polyline",
107     "popup", "popups",
108     "pre",
109     "precalculate",
110     "prefetch",
111     "premultiply", "premultiplied",
112     "prepass",
113     "prepend",
114     "preprocess", "preprocessing",
115     "preseek",
116     "readonly",
117     "realtime",
118     "rekey",
119     "remesh",
120     "reprojection",
121     "resize",
122     "restpose",
123     "retarget", "retargets", "retargeting", "retargeted",
124     "ringnoise",
125     "rolloff",
126     "screencast", "screenshot", "screenshots",
127     "selfcollision",
128     "singletexture",
129     "startup",
130     "stateful",
131     "starfield",
132     "subflare", "subflares",
133     "subframe", "subframes",
134     "subclass", "subclasses", "subclassing",
135     "subdirectory", "subdirectories", "subdir", "subdirs",
136     "submodule", "submodules",
137     "subpath",
138     "subsize",
139     "substep", "substeps",
140     "targetless",
141     "textbox", "textboxes",
142     "tilemode",
143     "timestamp", "timestamps",
144     "timestep", "timesteps",
145     "un",
146     "unbake",
147     "uncomment",
148     "undeformed",
149     "undistort",
150     "ungroup",
151     "unhide",
152     "unindent",
153     "unkeyed",
154     "unpremultiply",
155     "unprojected",
156     "unreacted",
157     "unregister",
158     "unselected",
159     "unsubdivided",
160     "unshadowed",
161     "unspill",
162     "unstitchable",
163     "vectorscope",
164     "worldspace",
165     "workflow",
166
167     # Neologisms, slangs
168     "automagic", "automagically",
169     "blobby",
170     "blockiness", "blocky",
171     "collider", "colliders",
172     "deformer", "deformers",
173     "editability",
174     "keyer",
175     "lacunarity",
176     "numerics",
177     "occluder",
178     "passepartout",
179     "perspectively",
180     "polygonization",
181     "selectability",
182     "slurph",
183     "trackability",
184     "transmissivity",
185     "rasterized", "rasterization",
186     "renderer", "renderable", "renderability",
187
188     # Abbreviations
189     "aero",
190     "amb",
191     "anim",
192     "bool",
193     "calc",
194     "config", "configs",
195     "const",
196     "coord", "coords",
197     "dof",
198     "dupli", "duplis",
199     "eg",
200     "esc",
201     "fac",
202     "grless",
203     "http",
204     "init",
205     "kbit",
206     "lensdist",
207     "loc", "rot", "pos",
208     "lorem",
209     "luma",
210     "multicam",
211     "num",
212     "ok",
213     "ortho",
214     "persp",
215     "pref", "prefs",
216     "prev",
217     "param",
218     "premul",
219     "quad", "quads",
220     "quat", "quats",
221     "recalc", "recalcs",
222     "refl",
223     "spec",
224     "struct", "structs",
225     "tex",
226     "tri", "tris",
227     "uv", "uvs", "uvw", "uw", "uvmap",
228     "vec",
229     "vert", "verts",
230     "vis",
231     "xyz", "xzy", "yxz", "yzx", "zxy", "zyx",
232     "xy", "xz", "yx", "yz", "zx", "zy",
233
234     # General computer/science terms
235     "boid", "boids",
236     "equisolid",
237     "euler", "eulers",
238     "hashable",
239     "intrinsics",
240     "isosurface",
241     "jitter", "jittering", "jittered",
242     "keymap", "keymaps",
243     "lambertian",
244     "laplacian",
245     "metadata",
246     "nand", "xnor",
247     "normals",
248     "numpad",
249     "octree",
250     "opengl",
251     "pulldown", "pulldowns",
252     "quantized",
253     "samplerate",
254     "scrollback",
255     "scrollbar",
256     "scroller",
257     "searchable",
258     "spacebar",
259     "tooltip", "tooltips",
260     "trackpad",
261     "unicode",
262     "viewport", "viewports",
263     "viscoelastic",
264     "wildcard", "wildcards",
265
266     # General computer graphics terms
267     "anaglyph",
268     "bezier", "beziers",
269     "bicubic",
270     "bilinear",
271     "blackpoint", "whitepoint",
272     "blinn",
273     "bokeh",
274     "catadioptric",
275     "centroid",
276     "chrominance",
277     "codec", "codecs",
278     "collada",
279     "compositing",
280     "crossfade",
281     "deinterlace",
282     "dropoff",
283     "eigenvectors",
284     "equirectangular",
285     "fisheye",
286     "framerate",
287     "gimbal",
288     "grayscale",
289     "icosphere",
290     "lightmap",
291     "lossless", "lossy",
292     "midtones",
293     "mipmap", "mipmaps", "mip",
294     "ngon", "ngons",
295     "nurb", "nurbs",
296     "perlin",
297     "phong",
298     "radiosity",
299     "raytrace", "raytracing", "raytraced",
300     "renderfarm",
301     "shader", "shaders",
302     "specular", "specularity",
303     "spillmap",
304     "sobel",
305     "tonemap",
306     "toon",
307     "timecode",
308     "voronoi",
309     "voxel", "voxels",
310     "wireframe",
311     "zmask",
312     "ztransp",
313
314     # Blender terms
315     "bbone",
316     "breakdowner",
317     "bspline",
318     "bweight",
319     "datablock", "datablocks",
320     "dopesheet",
321     "dupliface", "duplifaces",
322     "dupliframe", "dupliframes",
323     "dupliobject", "dupliob",
324     "dupligroup",
325     "duplivert",
326     "fcurve", "fcurves",
327     "fluidsim",
328     "frameserver",
329     "enum",
330     "keyframe", "keyframes", "keyframing", "keyframed",
331     "metaball", "metaballs",
332     "metaelement", "metaelements",
333     "metastrip", "metastrips",
334     "movieclip",
335     "nabla",
336     "navmesh",
337     "outliner",
338     "paintmap", "paintmaps",
339     "polygroup", "polygroups",
340     "poselib",
341     "pushpull",
342     "pyconstraint", "pyconstraints",
343     "shapekey", "shapekeys",
344     "shrinkfatten",
345     "shrinkwrap",
346     "softbody",
347     "stucci",
348     "sunsky",
349     "subsurf",
350     "texface",
351     "timeline", "timelines",
352     "tosphere",
353     "vcol", "vcols",
354     "vgroup", "vgroups",
355     "vinterlace",
356     "wetmap", "wetmaps",
357     "wpaint",
358
359     # Algorithm names
360     "beckmann",
361     "catmull",
362     "catrom",
363     "chebychev",
364     "kutta",
365     "lennard",
366     "minkowsky",
367     "minnaert",
368     "musgrave",
369     "nayar",
370     "netravali",
371     "oren",
372     "prewitt",
373     "runge",
374     "verlet",
375     "worley",
376
377     # Acronyms
378     "aa", "msaa",
379     "api",
380     "asc", "cdl",
381     "ascii",
382     "atrac",
383     "bw",
384     "ccd",
385     "cmd",
386     "cpus",
387     "ctrl",
388     "cw", "ccw",
389     "dev",
390     "djv",
391     "dpi",
392     "dvar",
393     "dx",
394     "fh",
395     "fov",
396     "fft",
397     "gfx",
398     "gl",
399     "glsl",
400     "gpl",
401     "gpu", "gpus",
402     "hc",
403     "hdr",
404     "hh", "mm", "ss", "ff", # hh:mm:ss:ff timecode
405     "hsv", "hsva",
406     "id",
407     "itu",
408     "lhs",
409     "lmb", "mmb", "rmb",
410     "mux",
411     "ndof",
412     "ppc",
413     "px",
414     "qmc",
415     "rgb", "rgba",
416     "rhs",
417     "rv",
418     "sdl",
419     "sl",
420     "smpte",
421     "svn",
422     "ui",
423     "unix",
424     "vbo", "vbos",
425     "ycc", "ycca",
426     "yuv", "yuva",
427
428     # Blender acronyms
429     "bge",
430     "bli",
431     "bvh",
432     "dbvt",
433     "dop",  # BLI K-Dop BVH
434     "ik",
435     "nla",
436     "qbvh",
437     "rna",
438     "rvo",
439     "simd",
440     "sph",
441     "svbvh",
442
443     # CG acronyms
444     "ao",
445     "bsdf",
446     "ior",
447     "mocap",
448
449     # Files types/formats
450     "avi",
451     "attrac",
452     "autodesk",
453     "bmp",
454     "btx",
455     "cineon",
456     "dpx",
457     "dxf",
458     "eps",
459     "exr",
460     "fbx",
461     "ffmpeg",
462     "flac",
463     "gzip",
464     "ico",
465     "jpg", "jpeg",
466     "matroska",
467     "mdd",
468     "mkv",
469     "mpeg", "mjpeg",
470     "mtl",
471     "ogg",
472     "openjpeg",
473     "piz",
474     "png",
475     "po",
476     "quicktime",
477     "rle",
478     "sgi",
479     "stl",
480     "svg",
481     "targa", "tga",
482     "tiff",
483     "theora",
484     "vorbis",
485     "wav",
486     "xiph",
487     "xml",
488     "xna",
489     "xvid",
490 }