| 1 |
cycrow |
1 |
#include "bod_parser.h"
|
|
|
2 |
#include "bod_text_parser.h"
|
|
|
3 |
#include "token_stream.h"
|
|
|
4 |
#include "bod_cut_parser.h"
|
|
|
5 |
//---------------------------------------------------------------------------------
|
|
|
6 |
bob_dom_document * bod_parser::parseBuffer(char *pszBuffer, size_t size, fileType type)
|
|
|
7 |
{
|
|
|
8 |
bod_text_parser parser;
|
|
|
9 |
token_stream is;
|
|
|
10 |
bob_dom_document *doc=NULL;
|
|
|
11 |
bob_dom_cut *cut=NULL;
|
|
|
12 |
bob_dom_bob *bob=NULL;
|
|
|
13 |
bod_parser_base *errorObj;
|
|
|
14 |
bool bRes=false;
|
|
|
15 |
|
|
|
16 |
is.rdbuffer(pszBuffer, size);
|
|
|
17 |
|
|
|
18 |
if(type==bobFile){
|
|
|
19 |
bod_bob_parser *bp=new bod_bob_parser(m_settings);
|
|
|
20 |
errorObj=bp;
|
|
|
21 |
bob=bp->loadBOB(is, false);
|
|
|
22 |
bRes=bob!=NULL;
|
|
|
23 |
}
|
|
|
24 |
else if(type==cutFile){
|
|
|
25 |
bod_cut_parser *cp=new bod_cut_parser(m_settings);
|
|
|
26 |
cut=cp->loadCUT(is);
|
|
|
27 |
errorObj=cp;
|
|
|
28 |
bRes=cut!=NULL;
|
|
|
29 |
}
|
|
|
30 |
|
|
|
31 |
for(iterator &it=errorObj->errors.begin(); it!=errorObj->errors.end(); ++it){
|
|
|
32 |
error(it);
|
|
|
33 |
}
|
|
|
34 |
|
|
|
35 |
if(bRes){
|
|
|
36 |
doc=new bob_dom_document(m_settings);
|
|
|
37 |
doc->bob=bob;
|
|
|
38 |
doc->cut=cut;
|
|
|
39 |
}
|
|
|
40 |
return doc;
|
|
|
41 |
}
|
|
|
42 |
//---------------------------------------------------------------------------------
|
|
|
43 |
bool bod_parser::compile(char *pszBuffer, size_t size, fileType type, bob_dom_obinaryfilestream& os)
|
|
|
44 |
{
|
|
|
45 |
bod_text_parser parser;
|
|
|
46 |
token_stream is;
|
|
|
47 |
bod_parser_base *errorObj;
|
|
|
48 |
bool bRes=false;
|
|
|
49 |
|
|
|
50 |
is.rdbuffer(pszBuffer, size);
|
|
|
51 |
|
|
|
52 |
if(type==bobFile){
|
|
|
53 |
bod_bob_parser *bp=new bod_bob_parser(m_settings);
|
|
|
54 |
errorObj=bp;
|
|
|
55 |
bRes=bp->compile(is, os, false);
|
|
|
56 |
}
|
|
|
57 |
else if(type==cutFile){
|
|
|
58 |
bod_cut_parser *cp=new bod_cut_parser(m_settings);
|
|
|
59 |
bRes=cp->compile(is, os);
|
|
|
60 |
errorObj=cp;
|
|
|
61 |
}
|
|
|
62 |
|
|
|
63 |
for(iterator &it=errorObj->errors.begin(); it!=errorObj->errors.end(); ++it){
|
|
|
64 |
error(it);
|
|
|
65 |
}
|
|
|
66 |
return bRes;
|
|
|
67 |
}
|
|
|
68 |
//---------------------------------------------------------------------------------
|
|
|
69 |
void bod_parser::error(iterator& it)
|
|
|
70 |
{
|
|
|
71 |
Error *e=new Error();
|
|
|
72 |
|
|
|
73 |
e->code=it->code;
|
|
|
74 |
e->col=it->col;
|
|
|
75 |
e->line=it->line;
|
|
|
76 |
memcpy(e->text, it->text, sizeof(e->text));
|
|
|
77 |
errors.push_back(e);
|
|
|
78 |
}
|
|
|
79 |
//---------------------------------------------------------------------------------
|