mimeview.h 2.23 KB
/* GNU Mailutils -- a suite of utilities for electronic mail
   Copyright (C) 2005, 2007, 2010-2012, 2014-2017 Free Software
   Foundation, Inc.

   GNU Mailutils is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   GNU Mailutils is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include <mailutils/mailutils.h>
#include <fnmatch.h>

struct mimetypes_string
{
  char *ptr;
  size_t len;
};

int mimetypes_yylex (void);
int mimetypes_yyerror (char *s);

int mimetypes_open (const char *name);
void mimetypes_close (void);
int mimetypes_parse (const char *name);
void mimetypes_lex_init (void);
void lex_arglist (int);
void *mimetypes_malloc (size_t size);

struct mimetypes_string *mimetypes_string_dup (struct mimetypes_string *s);

const char *get_file_type (void);

extern char *mimeview_file;
extern mu_stream_t mimeview_stream;    

struct concat_segm
{
  struct concat_segm *next;
  char const *val;
};

void lex_concat (struct concat_segm *p, struct mimetypes_string *ret);

struct mu_locus_range
{
  struct mu_locus beg;
  struct mu_locus end;
};

#define YYLTYPE struct mu_locus_range
#define YYLLOC_DEFAULT(Current, Rhs, N)				  \
  do								  \
    {								  \
      if (N)							  \
	{							  \
	  (Current).beg = YYRHSLOC(Rhs, 1).beg;			  \
	  (Current).end = YYRHSLOC(Rhs, N).end;			  \
	}							  \
      else							  \
	{							  \
	  (Current).beg = YYRHSLOC(Rhs, 0).end;			  \
	  (Current).end = (Current).beg;			  \
	}							  \
    } while (0)
#define YY_LOCATION_PRINT(File, Loc)				    \
  fprintf(File, "%s:%u.%u-%u.%u",				    \
	  (Loc).beg.mu_file,					    \
	  (Loc).beg.mu_line, (Loc).beg.mu_col,			    \
	  (Loc).end.mu_line, (Loc).end.mu_col)