+<C_CODE>^#[ \t]*include[ \t][<"][^\n">]*[>"] {
+ if(look_for_includes==1) {
+ char *p;
+ char *file;
+ char *str = g_strdup(yytext);
+ file = strchr(str,'"');
+ if(!file) file = strchr(str,'<');
+ file++;
+ p = strchr(file,'"');
+ if(!p) p = strchr(file,'>');
+ *p = '\0';
+ include_files = g_list_prepend(include_files,g_strdup(file));
+ g_free(str);
+ }
+ REJECT;
+}
+
+<CLASS_CODE_I>\/\*\*[ \t]*$ {
+ /* eat out gtk doc stuff */
+ BEGIN(GTK_DOC_BEFORE_NAME);
+ clear_cbuf();
+ }
+<GTK_DOC_BEFORE_NAME>^[ \t]*\*[ \t]*$ {
+ /* empty doc lines */
+ ;
+ }
+<GTK_DOC_BEFORE_NAME>^[ \t]*\*\ [_a-zA-Z][_a-zA-Z0-9]*:?[ \t]*$ {
+ char *p;
+ BEGIN(GTK_DOC);
+ p = strchr(yytext, '*');
+ g_free(gtk_doc_func);
+ gtk_doc_func = g_strdup(p+2);
+ p = strchr(gtk_doc_func, ':');
+ if(p) *p='\0';
+ g_strstrip(gtk_doc_func);
+ }
+<GTK_DOC_BEFORE_NAME>\*\/ {
+ BEGIN(CLASS_CODE_I);
+ }
+<GTK_DOC_BEFORE_NAME>. {
+ BEGIN(COMMENT);
+ before_comment = CLASS_CODE_I;
+ }
+<GTK_DOC>^[ \t]*\*[ \t]*$ {
+ /* empty doc lines */
+ add_to_cbuf(" *\n");
+ }
+<GTK_DOC>^[ \t]*\*?\*\/ {
+ BEGIN(CLASS_CODE_I);
+ add_gtk_doc_func();
+ }
+<GTK_DOC>^[ \t]*\*\ {
+ fflush(stdout);
+ add_to_cbuf(" * ");
+ BEGIN(GTK_DOC_LINE);
+ }
+<GTK_DOC>\*\/ {
+ BEGIN(CLASS_CODE_I);
+ }
+<GTK_DOC>. {
+ BEGIN(COMMENT);
+ before_comment = CLASS_CODE_I;
+ }
+<GTK_DOC_LINE>\*\/ {
+ BEGIN(CLASS_CODE_I);
+ add_to_cbuf("\n");
+ add_gtk_doc_func();
+ }
+<GTK_DOC_LINE>.$ {
+ BEGIN(GTK_DOC);
+ add_to_cbuf(yytext);
+ add_to_cbuf("\n");
+ }
+<GTK_DOC_LINE>. {
+ fflush(stdout);
+ add_to_cbuf(yytext);
+ }
+
+<C_CODE>\/\/.*$ { add_to_cbuf(yytext); /*comment, ignore*/ }