Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/bin


Modified Files:
        edje_cc.h edje_cc_handlers.c edje_cc_out.c edje_cc_parse.c 


Log Message:


and.... edje_cc can take small code snippets in script{} areas and compile
them, include them int eh edje.eet and edje can run them. all i have to do
now is actually give the small scripts an api worht talking about

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/bin/edje_cc.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- edje_cc.h   23 Jan 2004 02:13:35 -0000      1.9
+++ edje_cc.h   28 Mar 2004 05:26:17 -0000      1.10
@@ -23,6 +23,8 @@
 typedef struct _New_Object_Handler    New_Object_Handler;
 typedef struct _New_Statement_Handler New_Statement_Handler;
 typedef struct _Font                  Font;
+typedef struct _Code                  Code;
+typedef struct _Code_Program          Code_Program;
 
 struct _New_Object_Handler
 {
@@ -42,6 +44,18 @@
    char *name;
 };
 
+struct _Code
+{
+   char      *shared;
+   Evas_List *programs; 
+};
+
+struct _Code_Program
+{
+   int        id;
+   char      *script;
+};
+
 /* global fn calls */
 void    data_setup(void);
 void    data_write(void);
@@ -50,7 +64,11 @@
 void    data_queue_image_lookup(char *name, int *dest);
 void    data_process_lookups(void);
     
-    
+
+int     is_verbatim(void);
+void    track_verbatim(int on);
+void    set_verbatim(char *s);
+char   *get_verbatim(void);
 void    compile(void);
 int     is_param(int n);
 int     is_num(int n);    
@@ -81,6 +99,7 @@
 extern Edje_File             *edje_file;
 extern Evas_List             *edje_collections;
 extern Evas_List             *fonts;
+extern Evas_List             *codes;
 extern New_Object_Handler     object_handlers[];
 extern New_Statement_Handler  statement_handlers[];
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/bin/edje_cc_handlers.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- edje_cc_handlers.c  8 Mar 2004 02:43:47 -0000       1.28
+++ edje_cc_handlers.c  28 Mar 2004 05:26:17 -0000      1.29
@@ -17,6 +17,8 @@
 static void st_collections_group_max(void);
 static void st_collections_group_data_item(void);
 
+static void ob_collections_group_script(void);
+
 static void ob_collections_group_parts_part(void);
 static void st_collections_group_parts_part_name(void);
 static void st_collections_group_parts_part_type(void);
@@ -78,6 +80,8 @@
 static void st_collections_group_programs_program_target(void);
 static void st_collections_group_programs_program_after(void);
 
+static void ob_collections_group_programs_program_script(void);
+
 /*****/
 
 New_Statement_Handler statement_handlers[] =
@@ -159,6 +163,7 @@
      {"collections.group.max", NULL},
      {"collections.group.data", NULL},
      {"collections.group.data.item", NULL},
+     {"collections.group.script", ob_collections_group_script},
      {"collections.group.parts", NULL},
      {"collections.group.parts.part", ob_collections_group_parts_part},
      {"collections.group.parts.part.name", NULL},
@@ -224,7 +229,8 @@
      {"collections.group.programs.program.action", NULL},
      {"collections.group.programs.program.transition", NULL},
      {"collections.group.programs.program.target", NULL},
-     {"collections.group.programs.program.after", NULL}
+     {"collections.group.programs.program.after", NULL},
+     {"collections.group.programs.program.script", 
ob_collections_group_programs_program_script}
 };
 
 /*****/
@@ -332,6 +338,7 @@
 {
    Edje_Part_Collection_Directory_Entry *de;
    Edje_Part_Collection *pc;
+   Code *cd;
    
    de = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
    edje_file->collection_dir->entries = 
evas_list_append(edje_file->collection_dir->entries, de);
@@ -340,6 +347,9 @@
    pc = mem_alloc(SZ(Edje_Part_Collection));
    edje_collections = evas_list_append(edje_collections, pc);
    pc->id = evas_list_count(edje_collections) - 1;
+   
+   cd = mem_alloc(SZ(Code));
+   codes = evas_list_append(codes, cd);
 }
 
 static void
@@ -372,6 +382,35 @@
 }
 
 static void
+ob_collections_group_script(void)
+{
+   Edje_Part_Collection *pc;
+   Code *cd;
+   
+   pc = evas_list_data(evas_list_last(edje_collections));
+   cd = evas_list_data(evas_list_last(codes));
+   
+   if (!is_verbatim()) track_verbatim(1);
+   else
+     {
+       char *s;
+       
+       s = get_verbatim();
+       if (s)
+         {
+            if (cd->shared)
+              {
+                 fprintf(stderr, "%s: Error. parse error %s:%i. There is already an 
existing script section for the group\n",
+                         progname, file_in, line);
+                 exit(-1);
+              }
+            cd->shared = s;
+            set_verbatim(NULL);
+         }
+     }
+}
+
+static void
 st_collections_group_data_item(void)
 {
    Edje_Part_Collection *pc;
@@ -1256,6 +1295,7 @@
                           "DRAG_VAL_SET", EDJE_ACTION_TYPE_DRAG_VAL_SET,
                           "DRAG_VAL_STEP", EDJE_ACTION_TYPE_DRAG_VAL_STEP,
                           "DRAG_VAL_PAGE", EDJE_ACTION_TYPE_DRAG_VAL_PAGE,
+                          "SCRIPT", EDJE_ACTION_TYPE_SCRIPT,
                           NULL);
    if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
      {
@@ -1348,14 +1388,45 @@
      {
        Edje_Program_After *pa;
        char *name;
-
+       
        name = parse_str(0);
-
+       
        pa = mem_alloc(SZ(Edje_Program_After));
        pa->id = -1;
        ep->after = evas_list_append(ep->after, pa);
-
+       
        data_queue_program_lookup(pc, name, &(pa->id));
        free(name);
      }
 }
+
+static void
+ob_collections_group_programs_program_script(void)
+{
+   Edje_Part_Collection *pc;
+   Edje_Program *ep;
+   Code *cd;
+   
+   pc = evas_list_data(evas_list_last(edje_collections));
+   ep = evas_list_data(evas_list_last(pc->programs));
+   cd = evas_list_data(evas_list_last(codes));
+   
+   if (!is_verbatim()) track_verbatim(1);
+   else
+     {
+       char *s;
+       
+       s = get_verbatim();
+       if (s)
+         {
+            Code_Program *cp;
+            
+            cp = mem_alloc(SZ(Code_Program));
+            cp->id = ep->id;
+            cp->script = s;
+            cd->programs = evas_list_append(cd->programs, cp);
+            set_verbatim(NULL);
+            ep->action = EDJE_ACTION_TYPE_SCRIPT;
+         }
+     }
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/bin/edje_cc_out.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- edje_cc_out.c       26 Mar 2004 09:10:04 -0000      1.11
+++ edje_cc_out.c       28 Mar 2004 05:26:17 -0000      1.12
@@ -27,6 +27,7 @@
 Edje_File *edje_file = NULL;
 Evas_List *edje_collections = NULL;
 Evas_List *fonts = NULL;
+Evas_List *codes = NULL;
 
 static Eet_Data_Descriptor *edd_edje_file = NULL;
 static Eet_Data_Descriptor *edd_edje_image_directory = NULL;
@@ -77,6 +78,7 @@
    int image_num;
    int font_num;
    int collection_num;
+   int i;
    
    bytes = 0;
    input_bytes = 0;
@@ -374,37 +376,6 @@
        char buf[4096];
        
        pc = l->data;
-
-       /* FIXME: hack!!!! */
-         {
-            FILE *f;
-            
-            f = fopen("test.amx", "r");
-            if (f)
-              {
-                 int size;
-                 void *data;
-                 
-                 fseek(f, 0, SEEK_END);
-                 size = ftell(f);
-                 rewind(f);
-                 if (size > 0)
-                   {
-                      int bt;
-                      
-                      data = malloc(size);
-                      if (data)
-                        {
-                           fread(data, size, 1, f);
-                           snprintf(buf, sizeof(buf), "scripts/%i", pc->id);
-                           bt = eet_write(ef, buf, data, size, 1);
-                           free(data);
-                           printf("WROTE %i bytes of AMX!\n", bt);
-                        }
-                   }
-                 fclose(f);
-              }
-         }
        snprintf(buf, sizeof(buf), "collections/%i", pc->id);
        bytes = eet_data_write(ef, edd_edje_part_collection, buf, pc, 1);
        if (bytes <= 0)
@@ -424,6 +395,88 @@
                    progname, bytes, (bytes + 512) / 1024, buf);
          }
      }
+   for (i = 0, l = codes; l; l = l->next, i++)
+     {
+       Code *cd;
+       
+       cd = l->data;
+       if ((cd->shared) || (cd->programs))
+         {
+            int fd;
+            char tmpn[4096];
+            
+            strcpy(tmpn, "/tmp/edje_cc.sma-tmp-XXXXXX");
+            fd = mkstemp(tmpn);
+            if (fd >= 0)
+              {
+                 FILE *f;
+                 char buf[4096];
+                 char tmpo[4096];
+                 int ret;
+                 
+                 f = fopen(tmpn, "w");
+                 if (f)
+                   {
+                      Evas_List *ll;
+                      
+                      fprintf(f, "#include <edje>\n\n");
+                      if (cd->shared) fprintf(f, "%s\n", cd->shared);
+                      for (ll = cd->programs; ll; ll = ll->next)
+                        {
+                           Code_Program *cp;
+                           
+                           cp = ll->data;
+                           if (cp->script)
+                             {
+                                /* FIXME: this prototype needs to be */
+                                /* formalised and set in stone */
+                                fprintf(f, "public _p%i(sig[], src[]) {\n", cp->id);
+                                fprintf(f, "%s\n", cp->script);
+                                fprintf(f, "}\n");
+                             }
+                        }
+                      fclose(f);
+                   }
+                 close(fd);
+                 strcpy(tmpo, "/tmp/edje_cc.amx-tmp-XXXXXX");
+                 fd = mkstemp(tmpo);
+                 if (fd >= 0)
+                   {
+                      snprintf(buf, sizeof(buf), "embryo_cc -i%s -o%s %s", 
+                               DAT"data/include", tmpo, tmpn);
+                      ret = system(buf);
+                      printf("ret = %i\n", ret);
+                      close(fd);
+                   }
+                 f = fopen(tmpo, "r");
+                 if (f)
+                   {
+                      int size;
+                      void *data;
+                      
+                      fseek(f, 0, SEEK_END);
+                      size = ftell(f);
+                      rewind(f);
+                      if (size > 0)
+                        {
+                           int bt;
+                           
+                           data = malloc(size);
+                           if (data)
+                             {
+                                fread(data, size, 1, f);
+                                snprintf(buf, sizeof(buf), "scripts/%i", i);
+                                bt = eet_write(ef, buf, data, size, 1);
+                                free(data);
+                             }
+                        }
+                      fclose(f);
+                   }
+                 unlink(tmpn);
+                 unlink(tmpo);
+              }
+         }
+     }
    eet_close(ef);
    if (verbose)
      {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/bin/edje_cc_parse.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- edje_cc_parse.c     11 Mar 2004 03:21:06 -0000      1.16
+++ edje_cc_parse.c     28 Mar 2004 05:26:17 -0000      1.17
@@ -36,7 +36,9 @@
 Evas_List *stack = NULL;
 Evas_List *params = NULL;
 
-static char file_buf[4096];
+static char  file_buf[4096];
+static int   verbatim = 0;
+static char *verbatim_str = NULL;
 
 static void
 new_object(void)
@@ -379,6 +381,73 @@
               {
                  stack = evas_list_append(stack, token);
                  new_object();
+                 if ((verbatim == 1) && (p < (end - 2)))
+                   {
+                      int escaped = 0;
+                      int inquotes = 0;
+                      int insquotes = 0;
+                      int squigglie = 1;
+                      char *verbatim_1;
+                      char *verbatim_2;
+                      
+                      while ((p[0] != '{') && (p < end)) p++;
+                      p++;
+                      verbatim_1 = p;
+                      verbatim_2 = NULL;
+                      for (; p < end; p++)
+                        {
+                           if (escaped) escaped = 0;
+                           if (!escaped)
+                             {
+                                if (p[0] == '\\') escaped = 1;
+                                else if (p[0] == '\"')
+                                  {
+                                     if (!insquotes)
+                                       {
+                                          if (inquotes) inquotes = 0;
+                                          else inquotes = 1;
+                                       }
+                                  }
+                                else if (p[0] == '\'')
+                                  {
+                                     if (!inquotes)
+                                       {
+                                          if (insquotes) insquotes = 0;
+                                          else insquotes = 1;
+                                       }
+                                  }
+                                else if ((!inquotes) && (!insquotes))
+                                  {
+                                     if      (p[0] == '{') squigglie++;
+                                     else if (p[0] == '}') squigglie--;
+                                     if (squigglie == 0)
+                                       {
+                                          verbatim_2 = p - 1;
+                                          break;
+                                       }
+                                  }
+                             }
+                        }
+                      if (verbatim_2 > verbatim_1)
+                        {
+                           int l;
+                           char *v;
+                           
+                           l = verbatim_2 - verbatim_1 + 1;
+                           v = malloc(l + 1);
+                           strncpy(v, verbatim_1, l);
+                           v[l] = 0;
+                           set_verbatim(v);
+                        }
+                      else
+                        {
+                           fprintf(stderr, "%s: Error. parse error %s:%i. { marker 
does not have matching } marker\n",
+                                   progname, file_in, line);
+                           exit(-1);
+                        }
+                      new_object();
+                      verbatim = 0;
+                   }
               }
          }
      }
@@ -396,6 +465,30 @@
    if (clean_file) unlink(clean_file);
 }
 
+int
+is_verbatim(void)
+{
+   return verbatim;
+}
+
+void
+track_verbatim(int on)
+{
+   verbatim = on;
+}
+
+void
+set_verbatim(char *s)
+{
+   verbatim_str = s;
+}
+
+char *
+get_verbatim(void)
+{
+   return verbatim_str;
+}
+
 void
 compile(void)
 {




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to