File: PHPDocParam.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (59 lines) | stat: -rw-r--r-- 1,576 bytes parent folder | download | duplicates (2)
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;
}