doxygen: prevent GPL license block from being parsed as doxygen comment.
[blender.git] / source / blender / blenfont / intern / blf_util.c
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2009 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Blender Foundation
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32
33 #include "blf_internal.h"
34
35 unsigned int blf_next_p2(unsigned int x)
36 {
37         x -= 1;
38         x |= (x >> 16);
39         x |= (x >> 8);
40         x |= (x >> 4);
41         x |= (x >> 2);
42         x |= (x >> 1);
43         x += 1;
44         return(x);
45 }
46
47 unsigned int blf_hash(unsigned int val)
48 {
49         unsigned int key;
50
51         key= val;
52         key += ~(key << 16);
53         key ^= (key >> 5);
54         key += (key << 3);
55         key ^= (key >> 13);
56         key += ~(key << 9);
57         key ^= (key >> 17);
58         return(key % 257);
59 }
60
61 /*
62  * This function is from Imlib2 library (font_main.c), a
63  * library that does image file loading and saving as well
64  * as rendering, manipulation, arbitrary polygon support, etc.
65  *
66  * Copyright (C) 2000 Carsten Haitzler and various contributors
67  * The original name: imlib_font_utf8_get_next
68  * more info here: http://docs.enlightenment.org/api/imlib2/html/
69  */
70 int blf_utf8_next(unsigned char *buf, int *iindex)
71 {
72         /* Reads UTF8 bytes from 'buf', starting at 'index' and
73          * returns the code point of the next valid code point.
74          * 'index' is updated ready for the next call.
75          *
76          * Returns 0 to indicate an error (e.g. invalid UTF8)
77          */
78         int index= *iindex, len, r;
79         unsigned char d, d2, d3, d4;
80
81         d= buf[index++];
82         if (!d)
83                 return(0);
84
85         while (buf[index] && ((buf[index] & 0xc0) == 0x80))
86                 index++;
87
88         len= index - *iindex;
89         if (len == 1)
90                 r= d;
91         else if (len == 2) {
92                 /* 2 byte */
93                 d2= buf[*iindex + 1];
94                 r= d & 0x1f; /* copy lower 5 */
95                 r <<= 6;
96                 r |= (d2 & 0x3f); /* copy lower 6 */
97         }
98         else if (len == 3) {
99                 /* 3 byte */
100                 d2= buf[*iindex + 1];
101                 d3= buf[*iindex + 2];
102                 r= d & 0x0f; /* copy lower 4 */
103                 r <<= 6;
104                 r |= (d2 & 0x3f);
105                 r <<= 6;
106                 r |= (d3 & 0x3f);
107         }
108         else {
109                 /* 4 byte */
110                 d2= buf[*iindex + 1];
111                 d3= buf[*iindex + 2];
112                 d4= buf[*iindex + 3];
113                 r= d & 0x0f; /* copy lower 4 */
114                 r <<= 6;
115                 r |= (d2 & 0x3f);
116                 r <<= 6;
117                 r |= (d3 & 0x3f);
118                 r <<= 6;
119                 r |= (d4 & 0x3f);
120         }
121         *iindex= index;
122         return(r);
123 }