File: main.cc

package info (click to toggle)
gtkmathview 0.8.0-8
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 7,904 kB
  • sloc: cpp: 53,699; xml: 12,660; sh: 8,979; makefile: 1,722; ansic: 1,149; perl: 88
file content (114 lines) | stat: -rw-r--r-- 2,928 bytes parent folder | download | duplicates (6)
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
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright (C) 2000-2007, Luca Padovani <padovani@sti.uniurb.it>.
// 
// This file is part of GtkMathView, a flexible, high-quality rendering
// engine for MathML documents.
// 
// GtkMathView is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
// 
// GtkMathView 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
// Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include <config.h>

// needed for old versions of GCC, must come before String.hh!
#include "CharTraits.icc"

#include <cassert>
#include <stdlib.h>

#include <popt.h>

#include "defs.h"
#include "guiGTK.h"
#include "String.hh"
#include "MathMLTokenElement.hh"
#ifdef DEBUG
#include "Gtk_GraphicsContext.hh"
#endif // DEBUG
#ifdef ENABLE_PROFILE
#endif // ENABLE_PROFILE

enum CommandLineOptionId {
  OPTION_VERSION = 256,
  OPTION_VERBOSE
};

// global options
bool entityWarning = false;

static char appName[64];

extern void *parseMathMLFile(char *);

static void printVersion()
{
  printf("%s - written by Luca Padovani (C) 2000-2005.\n", appName);
  exit(0);
}

static gint logLevel = -1;
static struct poptOption optionsTable[] = {
  { "version", 'V', POPT_ARG_NONE, 0, OPTION_VERSION, "Output version information", 0 },
  { "verbose", 'v', POPT_ARG_INT, &logLevel, OPTION_VERBOSE, "Display messages", "[0-3]" },
  POPT_AUTOHELP
  { 0, 0, 0, 0, 0, 0, 0 }
};

static void
usage(poptContext optCon, int exitcode, const char* msg)
{
  poptPrintUsage(optCon, stderr, 0);
  if (msg) fprintf(stderr, "%s\n", msg);
  exit(exitcode);
}

int
main(int argc, const char *argv[])
{
  poptContext ctxt = poptGetContext(NULL, argc, argv, optionsTable, 0);
  sprintf(appName, "mathmlviewer v%s", VERSION);

  gint c;
  while ((c = poptGetNextOpt(ctxt)) >= 0)
    {
      switch (c) {
      case OPTION_VERSION:
	printVersion();
	break;
      case OPTION_VERBOSE:
	break;
      default:
	assert(false);
      }
    }

  if (c < -1)
    {
      /* an error occurred during option processing */
      fprintf(stderr, "%s: %s\n",
	      poptBadOption(ctxt, POPT_BADOPTION_NOALIAS),
	      poptStrerror(c));
      return 1;
    }

  const gchar* file = poptGetArg(ctxt);
  if (file == 0 || !(poptPeekArg(ctxt) == 0))
    usage(ctxt, 1, "fatal error: no input document");

  poptFreeContext(ctxt);

  GUI_init(&argc, &argv, appName, 500, 600, logLevel);
  if (GUI_load_document(file) < 0)
    printf("fatal error: cannot load document `%s'\n", file);
  GUI_run();
  GUI_uninit();
  exit(0);
}