Logo Search packages:      
Sourcecode: malaga version File versions  Download package

options.c

/* Copyright (C) 1995 Bjoern Beutel. */

/* Description. =============================================================*/

/* This module contains options that can be set by both malaga and mallex. */

/* Includes. ================================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#include <string.h>
#include "basic.h"
#include "pools.h"
#include "values.h"
#include "symbols.h"
#include "input.h"
#include "commands.h"
#include "rule_type.h"
#include "rules.h"
#include "value_parser.h"
#include "hangul.h"
#include "scanner.h"
#include "options.h"

/* Global variables. ========================================================*/

bool_t auto_variables; /* TRUE if variables are shown automatically */

bool_t use_display; 
/* TRUE if "variables" and "result" use the display process */

/* Commands. ================================================================*/

static void 
do_sort_records_option( string_t arguments )
/* Select the order in which attributes in a record are printed. */
{
  string_t argument;

  if (*arguments == EOS) 
  { 
    printf( "sort-records: %s\n", 
            attribute_order == INTERNAL_ORDER ? "internal" :
            attribute_order == ALPHABETIC_ORDER ? "alphabetic" :
            attribute_order == DEFINITION_ORDER ? "definition" : "" );
  }
  else 
  { 
    argument = parse_word( &arguments );
    if (strcmp_no_case( argument, "internal" ) == 0) 
      attribute_order = INTERNAL_ORDER;
    else if (strcmp_no_case( argument, "alphabetic" ) == 0)
      attribute_order = ALPHABETIC_ORDER;
    else if (strcmp_no_case( argument, "definition" ) == 0)
      attribute_order = DEFINITION_ORDER;
    else
    { 
      complain( "\"internal\", \"alphabetic\" or \"definition\" expected, "
            "not \"%s\".", argument );
    }
    free_mem( &argument );
  }
  parse_end( &arguments );
}

command_t sort_records_option = 
{ 
  "sort-records", do_sort_records_option,
  "Usage:\n"
  "  set sort-records internal -- Print attributes in internal order.\n"
  "  set sort-records alphabetic -- Print attributes in alphabetic order.\n"
  "  set sort-records definition -- Print attributes in symbol-table order.\n"
};

/*---------------------------------------------------------------------------*/

static void 
do_hidden_option( string_t arguments )
/* Hide specified attributes when printing values. */
{
  symbol_t *attribs;
  int_t i;
  string_t argument;

  if (*arguments == EOS) 
  { 
    /* Get list of hidden attributes, terminated by value SYMBOL_MAX. */
    attribs = get_hidden_attributes();

    printf( "hidden:" );
    if (attribs[0] == SYMBOL_MAX) 
      printf( " (none)" );
    else 
    { 
      for (i = 0; attribs[i] != SYMBOL_MAX; i++) 
      printf( " %s", get_symbol_name( attribs[i] ) );
    }
    printf( "\n" );
    free_mem( &attribs );
  } 
  else 
  { 
    while (*arguments != EOS) 
    { 
      argument = parse_word( &arguments );
      if (strcmp_no_case( argument, "none" ) == 0) 
      clear_hidden_attributes();
      else if (*argument == '+') 
      add_hidden_attribute( find_symbol( argument + 1 ) );
      else if (*argument == '-') 
      remove_hidden_attribute( find_symbol( argument + 1 ) );
      else
      {
      complain( "\"+...\", \"-...\" or \"none\" expected, not \"%s\".", 
              argument );
      }
      free_mem( &argument );
    }
  }
}

command_t hidden_option = 
{ 
  "hidden", do_hidden_option,
  "Set hidden attributes in feature structures.\n"
  "Usage: set hidden ARGUMENT...\n"
  "ARGUMENT may be:\n"
  "  none -- Don't hide any attributes.\n"
  "  +ATTRIBUTE -- Hide ATTRIBUTE.\n"
  "  -ATTRIBUTE -- Don't hide ATTRIBUTE any longer.\n"
};

/*---------------------------------------------------------------------------*/

static void 
do_use_ksc_option( string_t arguments )
/* Switch to KSC5601 output. */
{
  if (*arguments == EOS) 
    printf( "use-ksc: %s\n", (convert_to_ksc ? "yes" : "no") );
  else 
    convert_to_ksc = parse_yes_no( &arguments );
  parse_end( &arguments );
}

command_t use_ksc_option = 
{ 
  "use-ksc hangul", do_use_ksc_option,
  "This option only has an effect in Hangul projects.\n"
  "Usage:\n"
  "  set use-ksc yes -- Display output in KSC5601 code.\n"
  "  set use-ksc no -- Display output in romanised Hangul.\n"
};

/*---------------------------------------------------------------------------*/

static void 
do_use_display_option( string_t arguments )
/* Determine whether output is shown using the Display process. */
{
  if (*arguments == EOS) 
    printf( "use-display: %s\n", (use_display ? "yes" : "no") );
  else 
    use_display = parse_yes_no( &arguments );
  parse_end( &arguments );
}

command_t use_display_option = 
{ 
  "use-display", do_use_display_option,
  "Usage:\n"
  "  set use-display yes -- Show output using display process.\n"
  "  set use-display no -- Show output using malaga itself.\n"
};

/*---------------------------------------------------------------------------*/

static void 
do_auto_variables_option( string_t arguments )
/* Determine if variables are displayed in debug mode. */
{
  if (*arguments == EOS) 
    printf( "auto-variables: %s\n", (auto_variables ? "yes" : "no") );
  else 
    auto_variables = parse_yes_no( &arguments );
  parse_end( &arguments );
}

command_t auto_variables_option = 
{ 
  "auto-variables variables", do_auto_variables_option,
  "Usage:\n"
  "  set auto-variables yes -- Show variables automatically in debug mode.\n"
  "  set auto-variables no -- Don't show variables automatically.\n"
};

/*---------------------------------------------------------------------------*/

static void 
do_switch_option( string_t arguments )
/* Set switches that can be read from Malaga rules. */
{
  symbol_t key;
  value_t value;
  string_t value_string, key_name;

  if (*arguments == EOS) 
  { 
    /* No switch name follows: list all switches. */
    get_first_switch( &value, &key );
    if (value == NULL) 
      printf( "switch: (none defined)\n" );
    else 
    { 
      do 
      { 
      key_name = get_symbol_name( key );
        value_string = value_to_readable( value, FALSE, 
                                11 + strlen( key_name ) );
        printf( "switch \"%s\": %s\n", key_name, value_string );
        free_mem( &value_string );
        get_next_switch( &value, &key );
      } while (value != NULL);
    }
  } 
  else 
  { 
    /* A switch name follows: read it. */
    key_name = parse_word( &arguments );
    if (*arguments == EOS) 
    { 
      /* Print value of given switch. */
      value = get_switch( find_symbol( key_name ) );
      value_string = value_to_readable( value, FALSE, 
                              11 + strlen( key_name ) );
      printf( "switch \"%s\": %s\n", key_name, value_string );
      free_mem( &value_string );
    } 
    else 
    { 
      /* A value follows: read it. */
      set_scanner_input( arguments );
      TRY 
      { 
      parse_a_value();
      test_token( EOF );
      } 
      FINALLY 
      set_scanner_input( NULL );
      END_TRY;
      set_switch( find_symbol( key_name ), value_stack[ --top ] );
    }
    free_mem( &key_name );
  }
}

command_t switch_option = 
{ 
  "switch", do_switch_option, 
  "Set a switch that can be read from Malaga rule files.\n"
  "Usage: set switch SWITCH VALUE\n"
};

/* End of file. =============================================================*/

Generated by  Doxygen 1.6.0   Back to index