Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Gimp/plug-ins/imagemap/   (Gimp Bildeditor Version 3.2.0©)  Datei vom 14.2.2026 mit Größe 3 kB image not shown  

Quelle  imap_cern.y  Sprache: unbekannt

 
Spracherkennung für: .y vermutete Sprache: Masm {Masm[48] ABAP[33] PHP[33]} [Methode: maximale Elemente, drei Dimensionen]

%{
/*
 * This is a plug-in for GIMP.
 *
 * Generates clickable image maps.
 *
 * Copyright (C) 1998-1999 Maurits Rijk  lpeek.mrijk@consunet.nl
 *
 * This program 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.
 *
 * This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */


#include <math.h>

#include <glib/gstdio.h>

#include <gtk/gtk.h>

#include "imap_circle.h"
#include "imap_file.h"
#include "imap_main.h"
#include "imap_polygon.h"
#include "imap_rectangle.h"
#include "imap_string.h"

extern int cern_lex(void);
extern int cern_restart(FILE *cern_in);
static void cern_error(char* s);

static Object_t *current_object;

%}

%union {
   int val;
   double value;
   char *id;
}

%token<val> RECTANGLE POLYGON CIRCLE DEFAULT
%token<val> AUTHOR DESCRIPTION BEGIN_COMMENT
%token<value> FLOAT
%token<id> COMMENT LINK

%%

cern_file : area_list
  ;

area_list : /* Empty */
  | area_list area
  ;

area  : default
  | rectangle
  | circle
  | polygon
  | comment_line
  ;

default  : DEFAULT LINK
  {
     MapInfo_t *info = get_map_info();
     g_strreplace(&info->default_url, $2);
                   g_free ($2);
  }
  ;


rectangle : RECTANGLE '(' FLOAT ',' FLOAT ')' '(' FLOAT ',' FLOAT ')' LINK
  {
     gint x = (gint) $3;
     gint y = (gint) $5;
     gint width = (gint) fabs($8 - x);
     gint height = (gint) fabs($10 - y);
     current_object = create_rectangle(x, y, width, height);
     object_set_url(current_object, $12);
     add_shape(current_object);
                   g_free ($12);
  }
  ;

circle  : CIRCLE '(' FLOAT ',' FLOAT ')' FLOAT LINK
  {
     gint x = (gint) $3;
     gint y = (gint) $5;
     gint r = (gint) $7;
     current_object = create_circle(x, y, r);
     object_set_url(current_object, $8);
     add_shape(current_object);
                   g_free ($8);
  }
  ;

polygon  : POLYGON {current_object = create_polygon(NULL);} coord_list LINK
  {
     object_set_url(current_object, $4);
     add_shape(current_object);
                   g_free ($4);
  }
  ;

coord_list : /* Empty */
  | coord_list coord
  {
  }
  ;

coord  : '(' FLOAT ',' FLOAT ')'
  {
     Polygon_t *polygon = ObjectToPolygon(current_object);
     GdkPoint *point = new_point((gint) $2, (gint) $4);
     polygon->points = g_list_append(polygon->points, 
         (gpointer) point);
  }
  ;

comment_line : author_line
  | description_line
  | real_comment
  ;

real_comment : BEGIN_COMMENT COMMENT
  {
    g_free ($2);
  }
  ;

author_line : AUTHOR COMMENT
  {
     MapInfo_t *info = get_map_info();
     g_strreplace(&info->author, $2);
     g_free ($2);
  }
  ;

description_line: DESCRIPTION COMMENT
  {
     MapInfo_t *info = get_map_info();
     gchar *description;

     description = g_strconcat(info->description, $2, "\n", 
          NULL);
     g_strreplace(&info->description, description);
     g_free ($2);
  }
  ;


%%

static void 
cern_error(char* s)
{
   extern FILE *cern_in;
   cern_restart(cern_in);
}

gboolean
load_cern(const char* filename)
{
   gboolean status;
   extern FILE *cern_in;
   cern_in = g_fopen(filename, "r");
   if (cern_in) {
      status = !cern_parse();
      fclose(cern_in);
   } else {
      status = FALSE;
   }
   return status;
}

[Dauer der Verarbeitung: 0.3 Sekunden, vorverarbeitet 2026-10-27]