summaryrefslogtreecommitdiff
path: root/src/piraha/Group.cc
blob: 11e1ac613682816879706279e46370904870d332 (plain)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "Piraha.hpp"

using namespace cctki_piraha;

void Group::dump(std::ostream& o) {
	dump(-1,o,0);
}
void Group::dump(int n,std::ostream& o,int indent) {
    for(int i=0;i<indent;i++)
        o << ' ';
    if(n >= 0) {
    	o << "[" << n << "] ";
    }
    o << pattern << ": ";
    if(children.size()==0) {
        for(int i=start_;i<end_;i++)
            o << input[i];
    }
    o << std::endl;
    typedef vector<smart_ptr<Group> >::iterator group_iter;
    int nn = 0;
    for(group_iter gi = children.begin();
            gi != children.end();
            ++gi) {
        (*gi)->dump(nn++,o,indent+2);
    }
}
void Group::dumpPerl(std::ostream& o) {
	o << "$VAR = ";
	dumpPerl(o,0);
	o << ";" << std::endl;
}
void Group::dumpPerl(std::ostream &o,int indent) {
	for(int i=0;i<indent;i++)
		o << ' ';
	o << "{" << std::endl;
	indent += 2;
	for(int i=0;i<indent;i++)
		o << ' ';
	o << "name=> \"" << getPatternName() << "\"," << std::endl;
	if(children.size()==0) {
		for(int i=0;i<indent;i++)
			o << ' ';
		o << "children=>[]," << std::endl;
		for(int i=0;i<indent;i++)
			o << ' ';
		o << "text=>\"";
		for(int i=start_;i<end_;i++)
			insertc(o,input[i]);
		o << "\"," << std::endl;
	} else {
		for(int i=0;i<indent;i++)
			o << ' ';
		o << "children=>[" << std::endl;
		typedef vector<smart_ptr<Group> >::iterator group_iter;
		for(group_iter gi = children.begin();
				gi != children.end();
				++gi) {
			(*gi)->dumpPerl(o,indent+2);
			for(int i=0;i<indent;i++)
				o << ' ';
			o << "," << std::endl;
		}
		for(int i=0;i<indent;i++)
			o << ' ';
		o << "]," << std::endl;
	}
	for(int i=0;i<indent;i++)
		o << ' ';
	o << "start=>" << start() << "," << std::endl;
	for(int i=0;i<indent;i++)
		o << ' ';
	o << "end=>" << end() << "," << std::endl;
	for(int i=0;i<indent;i++)
		o << ' ';
	o << "line=>" << line() << "," << std::endl;
	indent -= 2;
	for(int i=0;i<indent;i++)
		o << ' ';
	o << "}" << std::endl;
}

std::string Group::substring() {
    std::string sub;
    for(int i=start_;i<end_;i++) {
        sub += input[i];
    }
    return sub;
}

std::string Group::getPatternName() {
    return pattern;
}

int Group::line() {
	int line = 1;
	for(int i=0;i<start_;i++) {
		if(input[i] == '\n')
			line++;
	}
	return line;
}