Blame src/conv/svg/pub2xhtml.cpp

Packit Service 7605e7
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
Packit Service 7605e7
/*
Packit Service 7605e7
 * This file is part of the libmspub project.
Packit Service 7605e7
 *
Packit Service 7605e7
 * This Source Code Form is subject to the terms of the Mozilla Public
Packit Service 7605e7
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit Service 7605e7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit Service 7605e7
 */
Packit Service 7605e7
Packit Service 7605e7
#ifdef HAVE_CONFIG_H
Packit Service 7605e7
#include "config.h"
Packit Service 7605e7
#endif
Packit Service 7605e7
Packit Service 7605e7
#include <fstream>
Packit Service 7605e7
#include <iostream>
Packit Service 7605e7
#include <stdio.h>
Packit Service 7605e7
#include <string.h>
Packit Service 7605e7
#include <librevenge-stream/librevenge-stream.h>
Packit Service 7605e7
#include <librevenge/librevenge.h>
Packit Service 7605e7
#include <libmspub/libmspub.h>
Packit Service 7605e7
Packit Service 7605e7
#ifndef VERSION
Packit Service 7605e7
#define VERSION "UNKNOWN VERSION"
Packit Service 7605e7
#endif
Packit Service 7605e7
Packit Service 7605e7
namespace
Packit Service 7605e7
{
Packit Service 7605e7
Packit Service 7605e7
int printUsage()
Packit Service 7605e7
{
Packit Service 7605e7
  printf("`pub2xhtml' converts Microsoft Publisher documents to SVG.\n");
Packit Service 7605e7
  printf("\n");
Packit Service 7605e7
  printf("Usage: pub2xhtml [OPTION] INPUT [OUTPUT]\n");
Packit Service 7605e7
  printf("\n");
Packit Service 7605e7
  printf("Options:\n");
Packit Service 7605e7
  printf("\t--help                show this help message\n");
Packit Service 7605e7
  printf("\t--version             show version information\n");
Packit Service 7605e7
  printf("\n");
Packit Service 7605e7
  printf("Report bugs to <https://bugs.documentfoundation.org/>.\n");
Packit Service 7605e7
  return -1;
Packit Service 7605e7
}
Packit Service 7605e7
Packit Service 7605e7
int printVersion()
Packit Service 7605e7
{
Packit Service 7605e7
  printf("pub2raw " VERSION "\n");
Packit Service 7605e7
  return 0;
Packit Service 7605e7
}
Packit Service 7605e7
Packit Service 7605e7
} // anonymous namespace
Packit Service 7605e7
Packit Service 7605e7
int main(int argc, char *argv[])
Packit Service 7605e7
{
Packit Service 7605e7
  if (argc < 2)
Packit Service 7605e7
    return printUsage();
Packit Service 7605e7
Packit Service 7605e7
  char *in_file = nullptr, *out_file = nullptr;
Packit Service 7605e7
Packit Service 7605e7
  for (int i = 1; i < argc; i++)
Packit Service 7605e7
  {
Packit Service 7605e7
    if (!in_file)
Packit Service 7605e7
    {
Packit Service 7605e7
      if (!strcmp(argv[i], "--version"))
Packit Service 7605e7
        return printVersion();
Packit Service 7605e7
      else if (strncmp(argv[i], "--", 2))
Packit Service 7605e7
        in_file = argv[i];
Packit Service 7605e7
    }
Packit Service 7605e7
    else if (!out_file)
Packit Service 7605e7
    {
Packit Service 7605e7
      if (strncmp(argv[i], "--", 2))
Packit Service 7605e7
        out_file = argv[i];
Packit Service 7605e7
    }
Packit Service 7605e7
    else
Packit Service 7605e7
      return printUsage();
Packit Service 7605e7
  }
Packit Service 7605e7
Packit Service 7605e7
  if (!in_file)
Packit Service 7605e7
    return printUsage();
Packit Service 7605e7
Packit Service 7605e7
  librevenge::RVNGFileStream input(in_file);
Packit Service 7605e7
  std::ofstream o;
Packit Service 7605e7
  if (out_file)
Packit Service 7605e7
    o.open(out_file);
Packit Service 7605e7
  std::ostream &output = out_file ? o : std::cout;
Packit Service 7605e7
Packit Service 7605e7
  if (!libmspub::MSPUBDocument::isSupported(&input))
Packit Service 7605e7
  {
Packit Service 7605e7
    std::cerr << "ERROR: Unsupported file format!" << std::endl;
Packit Service 7605e7
    return 1;
Packit Service 7605e7
  }
Packit Service 7605e7
Packit Service 7605e7
  librevenge::RVNGStringVector outputStrings;
Packit Service 7605e7
  librevenge::RVNGSVGDrawingGenerator generator(outputStrings, "svg");
Packit Service 7605e7
  if (!libmspub::MSPUBDocument::parse(&input, &generator))
Packit Service 7605e7
  {
Packit Service 7605e7
    std::cerr << "ERROR: SVG Generation failed!" << std::endl;
Packit Service 7605e7
    return 1;
Packit Service 7605e7
  }
Packit Service 7605e7
  if (outputStrings.empty())
Packit Service 7605e7
  {
Packit Service 7605e7
    std::cerr << "ERROR: No SVG document generated!" << std::endl;
Packit Service 7605e7
    return 1;
Packit Service 7605e7
  }
Packit Service 7605e7
Packit Service 7605e7
  output << "" << std::endl;
Packit Service 7605e7
  output << "" << std::endl;
Packit Service 7605e7
  output << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" << std::endl;
Packit Service 7605e7
  output << "<body>" << std::endl;
Packit Service 7605e7
  output << "" << std::endl;
Packit Service 7605e7
Packit Service 7605e7
  for (unsigned k = 0; k
Packit Service 7605e7
  {
Packit Service 7605e7
    if (k>0)
Packit Service 7605e7
      output << "
\n";
Packit Service 7605e7
Packit Service 7605e7
    output << "
Packit Service 7605e7
    output << "\n";
Packit Service 7605e7
    output << "
Packit Service 7605e7
    output << " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n";
Packit Service 7605e7
    output << " -->\n";
Packit Service 7605e7
Packit Service 7605e7
    output << outputStrings[k].cstr() << std::endl;
Packit Service 7605e7
  }
Packit Service 7605e7
Packit Service 7605e7
  output << "</body>" << std::endl;
Packit Service 7605e7
  output << "</html>" << std::endl;
Packit Service 7605e7
Packit Service 7605e7
  return 0;
Packit Service 7605e7
}
Packit Service 7605e7
Packit Service 7605e7
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */