1 /* commentscanner.c generated by valac, the Vala compiler
2  * generated from commentscanner.vala, do not modify */
3 
4 /* commentscanner.vala
5  *
6  * Copyright (C) 2008-2009 Florian Brosch, Didier Villevalois
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
21  *
22  * Author:
23  * 	Didier 'Ptitjes Villevalois <ptitjes@free.fr>
24  */
25 
26 #include "valadoc.h"
27 #include <glib.h>
28 
29 enum  {
30 	VALADOC_COMMENT_SCANNER_0_PROPERTY,
31 	VALADOC_COMMENT_SCANNER_NUM_PROPERTIES
32 };
33 static GParamSpec* valadoc_comment_scanner_properties[VALADOC_COMMENT_SCANNER_NUM_PROPERTIES];
34 
35 struct _ValadocCommentScannerPrivate {
36 	gboolean in_line_start;
37 	gboolean past_star;
38 	gint start_column;
39 };
40 
41 static gint ValadocCommentScanner_private_offset;
42 static gpointer valadoc_comment_scanner_parent_class = NULL;
43 
44 static void valadoc_comment_scanner_real_reset (ValadocWikiScanner* base);
45 static gint valadoc_comment_scanner_real_get_line_start_column (ValadocWikiScanner* base);
46 static void valadoc_comment_scanner_real_accept (ValadocWikiScanner* base,
47                                           gunichar c,
48                                           GError** error);
49 static void valadoc_comment_scanner_finalize (GObject * obj);
50 static GType valadoc_comment_scanner_get_type_once (void);
51 
52 static inline gpointer
valadoc_comment_scanner_get_instance_private(ValadocCommentScanner * self)53 valadoc_comment_scanner_get_instance_private (ValadocCommentScanner* self)
54 {
55 	return G_STRUCT_MEMBER_P (self, ValadocCommentScanner_private_offset);
56 }
57 
58 ValadocCommentScanner*
valadoc_comment_scanner_construct(GType object_type,ValadocSettings * settings)59 valadoc_comment_scanner_construct (GType object_type,
60                                    ValadocSettings* settings)
61 {
62 	ValadocCommentScanner * self = NULL;
63 	g_return_val_if_fail (settings != NULL, NULL);
64 	self = (ValadocCommentScanner*) valadoc_wiki_scanner_construct (object_type, settings);
65 	return self;
66 }
67 
68 ValadocCommentScanner*
valadoc_comment_scanner_new(ValadocSettings * settings)69 valadoc_comment_scanner_new (ValadocSettings* settings)
70 {
71 	return valadoc_comment_scanner_construct (VALADOC_TYPE_COMMENT_SCANNER, settings);
72 }
73 
74 static void
valadoc_comment_scanner_real_reset(ValadocWikiScanner * base)75 valadoc_comment_scanner_real_reset (ValadocWikiScanner* base)
76 {
77 	ValadocCommentScanner * self;
78 	self = (ValadocCommentScanner*) base;
79 	VALADOC_WIKI_SCANNER_CLASS (valadoc_comment_scanner_parent_class)->reset (G_TYPE_CHECK_INSTANCE_CAST (self, VALADOC_TYPE_WIKI_SCANNER, ValadocWikiScanner));
80 	self->priv->in_line_start = TRUE;
81 	self->priv->past_star = FALSE;
82 	self->priv->start_column = 0;
83 }
84 
85 static gint
valadoc_comment_scanner_real_get_line_start_column(ValadocWikiScanner * base)86 valadoc_comment_scanner_real_get_line_start_column (ValadocWikiScanner* base)
87 {
88 	ValadocCommentScanner * self;
89 	gint result = 0;
90 	self = (ValadocCommentScanner*) base;
91 	result = self->priv->start_column;
92 	return result;
93 }
94 
95 static void
valadoc_comment_scanner_real_accept(ValadocWikiScanner * base,gunichar c,GError ** error)96 valadoc_comment_scanner_real_accept (ValadocWikiScanner* base,
97                                      gunichar c,
98                                      GError** error)
99 {
100 	ValadocCommentScanner * self;
101 	GError* _inner_error0_ = NULL;
102 	self = (ValadocCommentScanner*) base;
103 	if (self->priv->in_line_start) {
104 		gint _tmp0_;
105 		_tmp0_ = self->priv->start_column;
106 		self->priv->start_column = _tmp0_ + 1;
107 		if (c == ((gunichar) '*')) {
108 			self->priv->past_star = TRUE;
109 		} else {
110 			if (self->priv->past_star) {
111 				self->priv->past_star = FALSE;
112 				if (c == ((gunichar) '\n')) {
113 					VALADOC_WIKI_SCANNER_CLASS (valadoc_comment_scanner_parent_class)->accept (G_TYPE_CHECK_INSTANCE_CAST (self, VALADOC_TYPE_WIKI_SCANNER, ValadocWikiScanner), c, &_inner_error0_);
114 					if (G_UNLIKELY (_inner_error0_ != NULL)) {
115 						if (_inner_error0_->domain == VALADOC_PARSER_ERROR) {
116 							g_propagate_error (error, _inner_error0_);
117 							return;
118 						} else {
119 							g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
120 							g_clear_error (&_inner_error0_);
121 							return;
122 						}
123 					}
124 					self->priv->in_line_start = TRUE;
125 					self->priv->start_column = 0;
126 				} else {
127 					self->priv->in_line_start = FALSE;
128 				}
129 			}
130 		}
131 	} else {
132 		VALADOC_WIKI_SCANNER_CLASS (valadoc_comment_scanner_parent_class)->accept (G_TYPE_CHECK_INSTANCE_CAST (self, VALADOC_TYPE_WIKI_SCANNER, ValadocWikiScanner), c, &_inner_error0_);
133 		if (G_UNLIKELY (_inner_error0_ != NULL)) {
134 			if (_inner_error0_->domain == VALADOC_PARSER_ERROR) {
135 				g_propagate_error (error, _inner_error0_);
136 				return;
137 			} else {
138 				g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
139 				g_clear_error (&_inner_error0_);
140 				return;
141 			}
142 		}
143 		if (c == ((gunichar) '\n')) {
144 			self->priv->in_line_start = TRUE;
145 			self->priv->start_column = 0;
146 		}
147 	}
148 }
149 
150 static void
valadoc_comment_scanner_class_init(ValadocCommentScannerClass * klass,gpointer klass_data)151 valadoc_comment_scanner_class_init (ValadocCommentScannerClass * klass,
152                                     gpointer klass_data)
153 {
154 	valadoc_comment_scanner_parent_class = g_type_class_peek_parent (klass);
155 	g_type_class_adjust_private_offset (klass, &ValadocCommentScanner_private_offset);
156 	((ValadocWikiScannerClass *) klass)->reset = (void (*) (ValadocWikiScanner*)) valadoc_comment_scanner_real_reset;
157 	((ValadocWikiScannerClass *) klass)->get_line_start_column = (gint (*) (ValadocWikiScanner*)) valadoc_comment_scanner_real_get_line_start_column;
158 	((ValadocWikiScannerClass *) klass)->accept = (void (*) (ValadocWikiScanner*, gunichar, GError**)) valadoc_comment_scanner_real_accept;
159 	G_OBJECT_CLASS (klass)->finalize = valadoc_comment_scanner_finalize;
160 }
161 
162 static void
valadoc_comment_scanner_instance_init(ValadocCommentScanner * self,gpointer klass)163 valadoc_comment_scanner_instance_init (ValadocCommentScanner * self,
164                                        gpointer klass)
165 {
166 	self->priv = valadoc_comment_scanner_get_instance_private (self);
167 }
168 
169 static void
valadoc_comment_scanner_finalize(GObject * obj)170 valadoc_comment_scanner_finalize (GObject * obj)
171 {
172 	ValadocCommentScanner * self;
173 	self = G_TYPE_CHECK_INSTANCE_CAST (obj, VALADOC_TYPE_COMMENT_SCANNER, ValadocCommentScanner);
174 	G_OBJECT_CLASS (valadoc_comment_scanner_parent_class)->finalize (obj);
175 }
176 
177 static GType
valadoc_comment_scanner_get_type_once(void)178 valadoc_comment_scanner_get_type_once (void)
179 {
180 	static const GTypeInfo g_define_type_info = { sizeof (ValadocCommentScannerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) valadoc_comment_scanner_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ValadocCommentScanner), 0, (GInstanceInitFunc) valadoc_comment_scanner_instance_init, NULL };
181 	GType valadoc_comment_scanner_type_id;
182 	valadoc_comment_scanner_type_id = g_type_register_static (VALADOC_TYPE_WIKI_SCANNER, "ValadocCommentScanner", &g_define_type_info, 0);
183 	ValadocCommentScanner_private_offset = g_type_add_instance_private (valadoc_comment_scanner_type_id, sizeof (ValadocCommentScannerPrivate));
184 	return valadoc_comment_scanner_type_id;
185 }
186 
187 GType
valadoc_comment_scanner_get_type(void)188 valadoc_comment_scanner_get_type (void)
189 {
190 	static volatile gsize valadoc_comment_scanner_type_id__volatile = 0;
191 	if (g_once_init_enter (&valadoc_comment_scanner_type_id__volatile)) {
192 		GType valadoc_comment_scanner_type_id;
193 		valadoc_comment_scanner_type_id = valadoc_comment_scanner_get_type_once ();
194 		g_once_init_leave (&valadoc_comment_scanner_type_id__volatile, valadoc_comment_scanner_type_id);
195 	}
196 	return valadoc_comment_scanner_type_id__volatile;
197 }
198 
199