Mercurial > hg > Game > Cerium
annotate Renderer/Engine/xml.cc @ 1798:3babb36ac459 draft
array(bmskip table) allocate size change 256 to 256*sizeof(int)
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 05 Dec 2013 16:41:38 +0900 |
parents | e19296785c07 |
children |
rev | line source |
---|---|
539 | 1 #include <iostream> |
2 #include <SDL.h> | |
3 #include <SDL_opengl.h> | |
4 #include <libxml/parser.h> | |
5 #include "polygon.h" | |
6 using namespace std; | |
7 | |
8 char *skip_to_number(char *cont) | |
9 { | |
10 if (cont == NULL) return(NULL); | |
11 for (;(*cont < '+' || *cont > '9') && (*cont != '\0');cont++) {} | |
12 if (*cont == '\0') | |
13 { | |
14 fprintf(stderr,"Content data is short\n"); | |
15 return(NULL); | |
16 } | |
17 return(cont); | |
18 } | |
19 | |
20 char *pickup_float(char *cont, float *index) | |
21 { | |
1398 | 22 int sign=1; |
23 float shift=10,val_dec=0,val_int=0,exp=1;; | |
539 | 24 |
25 cont = skip_to_number(cont); | |
26 if (cont == NULL) return(NULL); | |
27 | |
1036
dcb3e55b34ed
xml accepts comma for backward compatibility
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
539
diff
changeset
|
28 for (;*cont != ' ' && *cont != '\n' && *cont != '\t' && *cont != ',' ;cont++) |
539 | 29 { |
30 if (*cont == '-') | |
31 { | |
32 sign = -1; | |
33 } | |
34 else if (*cont == '.') | |
35 { | |
36 shift = 0.1; | |
37 } | |
38 else if (*cont >= '0' && *cont <= '9') | |
39 { | |
40 if (shift == 10) | |
41 { | |
42 val_int *= shift; | |
43 val_int += *cont - 48; | |
44 } | |
45 else | |
46 { | |
47 val_dec += (*cont - 48) * shift; | |
48 shift *= 0.1; | |
49 } | |
50 } | |
51 else if (*cont == 'e' || *cont == 'E') | |
52 { | |
1398 | 53 if (cont == NULL){ |
54 return(NULL); | |
55 } | |
56 else if (*(cont+1) == '-'){ | |
57 for (int j=0;j<*(cont+2);j++)exp *= 0.1; | |
58 //cont = pickup_exponent(&exp,cont+1); | |
59 } | |
539 | 60 } |
61 else if (*cont == '+' || *cont == '/' || *cont == ' ') | |
62 { | |
63 // ignore | |
64 } | |
1299
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
65 |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
66 else if (*cont == '\0') |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
67 { |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
68 // NULL end |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
69 |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
70 /* ここの条件は collada の仕様に合わせたもの。 |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
71 * 自前の blender script から吐き出される xml形式では、 |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
72 * 文字の終わりをNULLでは判断せず、エラー処理としていた |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
73 * ので必要ではなかった。よって、自前 blender script の |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
74 * xml形式の時、途中で NULL が来た場合、エラー処理され |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
75 * なくなる。NULL を返すので、呼び出し側で判断する |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
76 */ |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
77 *index = sign * (val_int + val_dec) * exp; |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
78 return(NULL); |
f0e805c09ed6
minor fix xml_walk and pickup_float, not work yet.
Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
1036
diff
changeset
|
79 } |
539 | 80 else |
81 { | |
82 fprintf(stderr,"Pick up float failed : %c(%d)\n",*cont,*cont); | |
83 return(NULL); | |
84 } | |
85 } | |
86 *index = sign * (val_int + val_dec) * exp; | |
87 cont++; | |
88 return(cont); | |
89 } | |
90 | |
91 | |
92 /* | |
93 int main(int artc, char *argv[]) | |
94 { | |
95 xmlDocPtr doc; | |
96 xmlNodePtr cur; | |
97 char *cont; | |
98 | |
99 doc = xmlParseFile(argv[1]); | |
100 | |
101 cur = xmlDocGetRootElement(doc); | |
102 | |
103 xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D"); | |
104 | |
105 for (cur=cur->children; cur; cur=cur->next) | |
106 { | |
107 if (!xmlStrcmp(cur->name,(xmlChar*)"surface")) | |
108 { | |
109 get_data(cur->children); | |
110 } | |
111 } | |
112 | |
113 xmlFreeDoc(doc); | |
114 return 0; | |
115 | |
116 } | |
117 */ |