-
Notifications
You must be signed in to change notification settings - Fork 467
/
Copy pathPHPDocParam.cpp
59 lines (48 loc) · 1.54 KB
/
PHPDocParam.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "PHPDocParam.h"
#include <wx/wxcrt.h>
#include <wx/tokenzr.h>
PHPDocParam::PHPDocParam(PHPSourceFile& sourceFile, const wxString& comment)
: m_sourceFile(sourceFile)
, m_comment(comment)
{
}
PHPDocParam::~PHPDocParam() {}
const PHPDocParam::Vec_t& PHPDocParam::Parse()
{
wxString sname;
wxString stype;
m_params.clear();
wxStringTokenizer tokenizer(m_comment, " \n\r", wxTOKEN_STRTOK);
while(tokenizer.HasMoreTokens()) {
wxString word = tokenizer.GetNextToken();
if(word == "@param") {
// Next word should be the type
if(!tokenizer.HasMoreTokens()) {
break;
}
stype = tokenizer.GetNextToken();
// Next comes the name
if(!tokenizer.HasMoreTokens()) {
break;
}
sname = tokenizer.GetNextToken();
// Handle common developer mistake
if (stype.StartsWith("$") || stype.StartsWith("&")) {
sname.swap(stype);
}
// TODO Support nullable parameters
if (stype.StartsWith("?")) {
stype.Remove(0, 1);
}
// TODO Support by reference parameters
if (sname.StartsWith("&")) {
sname.Remove(0, 1);
} else if (stype.EndsWith("&")) {
stype.RemoveLast();
}
stype = m_sourceFile.MakeIdentifierAbsolute(stype);
m_params.push_back(std::make_pair(sname, stype));
}
}
return m_params;
}