view libgui/src/m-editor/lexer-octave-gui.cc @ 15873:7d300b85ee25

allow build to proceed if either Qt or QScintilla is missing * configure.ac: Instead of aborting the configure script, set build_gui to "no" if Qt is missing. Don't abort configure script if QScintilla is missing. If QScintilla is available, define HAVE_QSCINTILLA. * file-editor-tab.cc, file-editor.cc, find-dialog.cc, lexer-octave-gui.cc: Surround file contents with #ifdef HAVE_QSCINTILLA. * main-window.cc (main_window::~main_window): Skip deletion of _file_editor if HAVE_QSCINTILLA is not defined. (main_window::new_file, main_window::open_file, main_window::focus_editor): Do nothing if HAVE_QSCINTILLA is not defined. (main_window::handle_entered_debug_mode, main_window::handle_quit_debug_mode): Skip operation on _file_editor if HAVE_QSCINTILLA is not defined. (main_window::construct): Skip creation of _file_editor and operations on it if HAVE_QSCINTILLA is not defined. * main-window.h (main_window::_file_editor): Omit data member from class if HAVE_QSCINTILLA is not defined.
author John W. Eaton <jwe@octave.org>
date Wed, 02 Jan 2013 14:29:50 -0500
parents 8ae34ffe5c1b
children 7fa90eb41240
line wrap: on
line source

/*

Copyright (C) 2011-2012 Jacob Dawid

This file is part of Octave.

Octave 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 of the License, or (at your
option) any later version.

Octave 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 Octave; see the file COPYING.  If not, see
<http://www.gnu.org/licenses/>.

*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifdef HAVE_QSCINTILLA

#include "lexer-octave-gui.h"
#include <qcolor.h>
#include <qfont.h>

// -----------------------------------------------------
// Some basic functions
// -----------------------------------------------------
lexer_octave_gui::lexer_octave_gui (QObject *p)
  : QsciLexer (p)
{
  // The API info that is used for auto completion
  // TODO: Where to store a file with API info (raw or prepared?)?
  // TODO: Also provide infos on octave-forge functions?
  // TODO: Also provide infos on function parameters?
  // By now, use the keywords-list from syntax highlighting

  QString keyword;
  QStringList keywordList;

  // get whole string with all keywords
  keyword = this->keywords (1);
  // split into single strings
  keywordList = keyword.split (QRegExp ("\\s+"));

  lexer_api = new QsciAPIs (this);
  if (lexer_api)
    {
      for (int i = 0; i < keywordList.size (); i++)
        {
          // add single strings to the API
          lexer_api->add (keywordList.at (i));
        }
      // prepare API info ... this may take some time
      lexer_api->prepare ();
    }
}

lexer_octave_gui::~lexer_octave_gui()
{
  if (lexer_api)
    delete lexer_api;
}

const char *lexer_octave_gui::language() const
{
  return "Octave";  // return the name of the language
}

const char *lexer_octave_gui::lexer() const
{
  return "octave";  // return the name of the lexer
}

// -----------------------------------------------------
// The colors for syntax highlighting
// -----------------------------------------------------
QColor lexer_octave_gui::defaultColor(int style) const
{
  switch (style)
    {
    case Default:  // black
      return QColor(0x00,0x00,0x00);
    case Operator: // red
      return QColor(0xef,0x00,0x00);
    case Comment:  // gray
      return QColor(0x7f,0x7f,0x7f);
    case Command:  // blue-green
      return QColor(0x00,0x7f,0x7f);
    case Number:   // orange
      return QColor(0x7f,0x7f,0x00);
    case Keyword:  // blue
      return QColor(0x00,0x00,0xbf);
    case SingleQuotedString: // green
      return QColor(0x00,0x7f,0x00);
    case DoubleQuotedString: // green-yellow
      return QColor(0x4f,0x7f,0x00);
    }
  return QsciLexer::defaultColor(style);
}


// -----------------------------------------------------
// The font decorations for highlighting
// -----------------------------------------------------
QFont lexer_octave_gui::defaultFont(int style) const
{
  QFont f;

  switch (style)
    {
    case Comment: // default but italic
      f = QsciLexer::defaultFont(style);
      f.setItalic(true);
      break;
    case Keyword: // default
      f = QsciLexer::defaultFont(style);
      break;
    case Operator:  // default
      f = QsciLexer::defaultFont(style);
      break;
    default:        // default
      f = QsciLexer::defaultFont(style);
      break;
    }
  return f;   // return the selected font
}


// -----------------------------------------------------
// Style names
// -----------------------------------------------------
QString lexer_octave_gui::description(int style) const
{
  switch (style)
    {
    case Default:
      return tr("Default");
    case Comment:
      return tr("Comment");
    case Command:
      return tr("Command");
    case Number:
      return tr("Number");
    case Keyword:
      return tr("Keyword");
    case SingleQuotedString:
      return tr("Single-quoted string");
    case Operator:
      return tr("Operator");
    case Identifier:
      return tr("Identifier");
    case DoubleQuotedString:
      return tr("Double-quoted string");
    }
  return QString();
}


// -----------------------------------------------------
// The set of keywords for highlighting
// TODO: How to define a second set?
// -----------------------------------------------------
const char *lexer_octave_gui::keywords(int set) const
{
  if (set == 1)
    {
      return resource_manager::octave_keywords ();
    }
  return 0;
}

#endif