geometry: Simplify keyboard declarations
This commit is contained in:
		@ -1,48 +1,10 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<geometry version="0.90">
 | 
			
		||||
  <bounds x="10" y="10" width="410.0000" height="229"/>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="AD01" />
 | 
			
		||||
      <key name="AD02" />
 | 
			
		||||
      <key name="AD03" />
 | 
			
		||||
      <key name="AD04" />
 | 
			
		||||
      <key name="AD05" />
 | 
			
		||||
      <key name="AD06" />
 | 
			
		||||
      <key name="AD07" />
 | 
			
		||||
      <key name="AD08" />
 | 
			
		||||
      <key name="AD09" />
 | 
			
		||||
      <key name="AD10" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="AC01" />
 | 
			
		||||
      <key name="AC02" />
 | 
			
		||||
      <key name="AC03" />
 | 
			
		||||
      <key name="AC04" />
 | 
			
		||||
      <key name="AC05" />
 | 
			
		||||
      <key name="AC06" />
 | 
			
		||||
      <key name="AC07" />
 | 
			
		||||
      <key name="AC08" />
 | 
			
		||||
      <key name="AC09" />
 | 
			
		||||
      <key name="AC10" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="LFSH" />
 | 
			
		||||
      <key name="AB01" />
 | 
			
		||||
      <key name="AB02" />
 | 
			
		||||
      <key name="AB03" />
 | 
			
		||||
      <key name="AB04" />
 | 
			
		||||
      <key name="AB05" />
 | 
			
		||||
      <key name="AB06" />
 | 
			
		||||
      <key name="AB07" />
 | 
			
		||||
      <key name="BKSP" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="ABC123" />
 | 
			
		||||
      <key name="I149" />
 | 
			
		||||
      <key name="SPCE" />
 | 
			
		||||
      <key name="AB08" />
 | 
			
		||||
      <key name="RTRN" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">AD01 AD02 AD03 AD04 AD05 AD06 AD07 AD08 AD09 AD10</section>
 | 
			
		||||
  <section angle="0">AC01 AC02 AC03 AC04 AC05 AC06 AC07 AC08 AC09 AC10</section>
 | 
			
		||||
  <section angle="0"> LFSH   AB01 AB02 AB03 AB04 AB05 AB06 AB07  BKSP </section>
 | 
			
		||||
  <section angle="0"> ABC123 I149         SPCE        AB08    RTRN    </section>
 | 
			
		||||
  <button name="LFSH" oref="altline" />
 | 
			
		||||
  <button name="BKSP" oref="altline" />
 | 
			
		||||
  <button name="I149" oref="altline" />
 | 
			
		||||
 | 
			
		||||
@ -1,34 +1,15 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<geometry version="0.90">
 | 
			
		||||
  <bounds x="0" y="10.000000" width="426.0000" height="296.5853"/>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="AD01" oref="outline2" />
 | 
			
		||||
      <key name="AD02" oref="outline2" />
 | 
			
		||||
      <key name="AD03" oref="outline2" />
 | 
			
		||||
      <key name="AD04" oref="outline2" />
 | 
			
		||||
      <key name="AD05" oref="outline2" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="AC01" oref="outline2" />
 | 
			
		||||
      <key name="AC02" oref="outline2" />
 | 
			
		||||
      <key name="AC03" oref="outline2" />
 | 
			
		||||
      <key name="AC04" oref="outline2" />
 | 
			
		||||
      <key name="AC05" oref="outline2" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="AB01" oref="outline2" />
 | 
			
		||||
      <key name="AB02" oref="outline2" />
 | 
			
		||||
      <key name="AB03" oref="outline2" />
 | 
			
		||||
      <key name="AB04" oref="outline2" />
 | 
			
		||||
      <key name="AB05" oref="outline2" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
      <key name="BKSP" oref="altline" />
 | 
			
		||||
      <key name="AB06" oref="outline2" />
 | 
			
		||||
      <key name="SPCE" oref="spaceline" />
 | 
			
		||||
      <key name="RTRN" oref="outline7" />
 | 
			
		||||
  </section>
 | 
			
		||||
  <outline id="outline2" corner-radius="1.000000">
 | 
			
		||||
  <section angle="0">AD01 AD02 AD03 AD04 AD05</section>
 | 
			
		||||
  <section angle="0">AC01 AC02 AC03 AC04 AC05</section>
 | 
			
		||||
  <section angle="0">AB01 AB02 AB03 AB04 AB05</section>
 | 
			
		||||
  <section angle="0">BKSP AB06 SPCE RTRN</section>
 | 
			
		||||
  <button name="BKSP" oref="altline" />
 | 
			
		||||
  <button name="SPCE" oref="spaceline" />
 | 
			
		||||
  <button name="RTRN" oref="outline7" />
 | 
			
		||||
 | 
			
		||||
  <outline id="default" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="52.44877"/>
 | 
			
		||||
 | 
			
		||||
@ -246,6 +246,8 @@ struct _GeometryParseData {
 | 
			
		||||
    gchar *oref;
 | 
			
		||||
    guint keycode;
 | 
			
		||||
 | 
			
		||||
    GString *text;
 | 
			
		||||
 | 
			
		||||
    GHashTable *name_key_hash; // char* -> EekKey*
 | 
			
		||||
    GHashTable *key_oref_hash;
 | 
			
		||||
    GHashTable *oref_outline_hash;
 | 
			
		||||
@ -274,6 +276,8 @@ geometry_parse_data_new (EekKeyboard *keyboard)
 | 
			
		||||
                               g_str_equal,
 | 
			
		||||
                               g_free,
 | 
			
		||||
                               NULL);
 | 
			
		||||
 | 
			
		||||
    data->text = g_string_sized_new (BUFSIZE);
 | 
			
		||||
    data->keycode = 8;
 | 
			
		||||
    return data;
 | 
			
		||||
}
 | 
			
		||||
@ -284,6 +288,7 @@ geometry_parse_data_free (GeometryParseData *data)
 | 
			
		||||
    g_object_unref (data->keyboard);
 | 
			
		||||
    g_hash_table_destroy (data->key_oref_hash);
 | 
			
		||||
    g_hash_table_destroy (data->oref_outline_hash);
 | 
			
		||||
    g_string_free (data->text, TRUE);
 | 
			
		||||
    g_slice_free (GeometryParseData, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -293,7 +298,6 @@ static const gchar *geometry_valid_path_list[] = {
 | 
			
		||||
    "bounds/geometry",
 | 
			
		||||
    "section/geometry",
 | 
			
		||||
    "outline/geometry",
 | 
			
		||||
    "key/section/geometry",
 | 
			
		||||
    "point/outline/geometry",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -380,34 +384,6 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
            angle = strtol (attribute, NULL, 10);
 | 
			
		||||
            eek_section_set_angle (data->section, angle);
 | 
			
		||||
        }
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (g_strcmp0 (element_name, "key") == 0) {
 | 
			
		||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
			
		||||
                                   "name");
 | 
			
		||||
        if (attribute == NULL) {
 | 
			
		||||
            g_set_error (error,
 | 
			
		||||
                         G_MARKUP_ERROR,
 | 
			
		||||
                         G_MARKUP_ERROR_MISSING_ATTRIBUTE,
 | 
			
		||||
                         "no \"name\" attribute for \"key\"");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        gchar *name = g_strdup (attribute);
 | 
			
		||||
 | 
			
		||||
        guint keycode = data->keycode++;
 | 
			
		||||
 | 
			
		||||
        data->key = eek_section_create_key (data->section,
 | 
			
		||||
                                            name,
 | 
			
		||||
                                            keycode);
 | 
			
		||||
        g_hash_table_insert (data->name_key_hash,
 | 
			
		||||
                             g_strdup(name),
 | 
			
		||||
                             data->key);
 | 
			
		||||
        data->num_columns++;
 | 
			
		||||
 | 
			
		||||
        g_hash_table_insert (data->key_oref_hash,
 | 
			
		||||
                             data->key,
 | 
			
		||||
                             g_strdup ("default"));
 | 
			
		||||
 | 
			
		||||
        goto out;
 | 
			
		||||
    }
 | 
			
		||||
@ -497,6 +473,7 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
 out:
 | 
			
		||||
    data->element_stack = g_slist_prepend (data->element_stack,
 | 
			
		||||
                                           g_strdup (element_name));
 | 
			
		||||
    data->text->len = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -512,7 +489,50 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
    data->element_stack = g_slist_next (data->element_stack);
 | 
			
		||||
    g_slist_free1 (head);
 | 
			
		||||
 | 
			
		||||
    const gchar *text = g_strndup (data->text->str, data->text->len);
 | 
			
		||||
 | 
			
		||||
    if (g_strcmp0 (element_name, "section") == 0) {
 | 
			
		||||
        // Split text on spaces and process each part
 | 
			
		||||
        unsigned head = 0;
 | 
			
		||||
        while (head < strlen(text)) {
 | 
			
		||||
            // Skip to the first non-space character
 | 
			
		||||
            for (; head < strlen(text); head++) {
 | 
			
		||||
                if (text[head] != ' ') {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            unsigned start = head;
 | 
			
		||||
 | 
			
		||||
            // Skip to the first space character
 | 
			
		||||
            for (; head < strlen(text); head++) {
 | 
			
		||||
                if (text[head] == ' ') {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            unsigned end = head;
 | 
			
		||||
 | 
			
		||||
            /// Reached the end
 | 
			
		||||
            if (start == end) {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            gchar *name = g_strndup (&text[start], end - start);
 | 
			
		||||
 | 
			
		||||
            guint keycode = data->keycode++;
 | 
			
		||||
 | 
			
		||||
            data->key = eek_section_create_key (data->section,
 | 
			
		||||
                                                name,
 | 
			
		||||
                                                keycode);
 | 
			
		||||
            g_hash_table_insert (data->name_key_hash,
 | 
			
		||||
                                 g_strdup(name),
 | 
			
		||||
                                 data->key);
 | 
			
		||||
            data->num_columns++;
 | 
			
		||||
 | 
			
		||||
            g_hash_table_insert (data->key_oref_hash,
 | 
			
		||||
                                 data->key,
 | 
			
		||||
                                 g_strdup ("default"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data->section = NULL;
 | 
			
		||||
        data->num_rows = 0;
 | 
			
		||||
        return;
 | 
			
		||||
@ -557,10 +577,21 @@ geometry_end_element_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
geometry_text_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
                       const gchar         *text,
 | 
			
		||||
                       gsize                text_len,
 | 
			
		||||
                       gpointer             user_data,
 | 
			
		||||
                       GError             **error)
 | 
			
		||||
{
 | 
			
		||||
    GeometryParseData *data = user_data;
 | 
			
		||||
    g_string_append_len (data->text, text, text_len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const GMarkupParser geometry_parser = {
 | 
			
		||||
    geometry_start_element_callback,
 | 
			
		||||
    geometry_end_element_callback,
 | 
			
		||||
    0,
 | 
			
		||||
    geometry_text_callback,
 | 
			
		||||
    0,
 | 
			
		||||
    0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user