Exemplo n.º 1
0
  void
  xml_compiler::reload(void)
  {
    error_information_.clear();
    replacement_.clear();
    symbol_map_.clear();
    app_vector_.clear();
    vk_change_inputsource_map_.clear();
    inputsource_vector_.clear();
    identifier_map_.clear();
    essential_configurations_.clear();
    remapclasses_initialize_vector_.clear();
    preferences_checkbox_node_tree_.clear();
    preferences_number_node_tree_.clear();

    try {
      std::string private_xml_file_path = make_file_path(private_xml_directory_, "private.xml");

      // ------------------------------------------------------------
      // Loading replacement
      {
        replacement_loader loader(*this, replacement_);

        // private.xml
        {
          ptree_ptr ptree_ptr;
          pqrs::string::replacement dummy; // Use dummy replacement when we read <replacementdef>.
          read_xml_(ptree_ptr, private_xml_file_path, dummy);
          if (ptree_ptr) {
            loader.traverse(make_extracted_ptree(*ptree_ptr, private_xml_file_path));
          }
        }
        // replacementdef.xml
        {
          ptree_ptr ptree_ptr;
          pqrs::string::replacement dummy; // Use dummy replacement when we read <replacementdef>.
          std::string xml_file_path = make_file_path(system_xml_directory_,  "replacementdef.xml");
          read_xml_(ptree_ptr, xml_file_path, dummy);
          if (ptree_ptr) {
            loader.traverse(make_extracted_ptree(*ptree_ptr, xml_file_path));
          }
        }
      }

      // ------------------------------------------------------------
      // Then, we read private.xml with replacement and loaders share it.

      ptree_ptr private_xml_ptree_ptr;
      read_xml_(private_xml_ptree_ptr, private_xml_file_path);
      if (private_xml_ptree_ptr && private_xml_ptree_ptr->empty()) {
        private_xml_ptree_ptr.reset();
      }

      // symbol_map
      {
        symbol_map_loader loader(*this, symbol_map_);

        if (private_xml_ptree_ptr) {
          loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
        }

        loader_wrapper<symbol_map_loader>::traverse_system_xml(*this, loader, "symbol_map.xml");
      }

      // app
      {
        app_loader loader(*this, symbol_map_, app_vector_);

        if (private_xml_ptree_ptr) {
          loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
        }

        loader_wrapper<app_loader>::traverse_system_xml(*this, loader, "appdef.xml");
      }

      // device
      {
        device_loader loader(*this, symbol_map_);

        if (private_xml_ptree_ptr) {
          loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
        }

        loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicevendordef.xml");
        loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "deviceproductdef.xml");
        loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicelocationdef.xml");
      }

      // inputsource
      {
        inputsource_loader loader(*this,
                                  symbol_map_,
                                  remapclasses_initialize_vector_,
                                  identifier_map_,
                                  vk_change_inputsource_map_,
                                  inputsource_vector_);

        if (private_xml_ptree_ptr) {
          loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
        }

        loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "vkchangeinputsourcedef.xml");
        loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "inputsourcedef.xml");
      }

      // config_index, remapclasses_initialize_vector, preferences_node
      {
        std::string checkbox_xml_file_path = make_file_path(system_xml_directory_, "checkbox.xml");
        ptree_ptr checkbox_xml_ptree_ptr;
        read_xml_(checkbox_xml_ptree_ptr, checkbox_xml_file_path);

        std::string number_xml_file_path = make_file_path(system_xml_directory_, "number.xml");
        ptree_ptr number_xml_ptree_ptr;
        read_xml_(number_xml_ptree_ptr, number_xml_file_path);

        // remapclasses_initialize_vector
        {
          // prepare
          {
            remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_number_node> > loader(*this, symbol_map_, essential_configurations_, &preferences_number_node_tree_);

            if (number_xml_ptree_ptr) {
              loader.traverse(make_extracted_ptree(*number_xml_ptree_ptr, number_xml_file_path));
              loader.fixup();
            }
            loader.cleanup();
          }
          {
            remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_checkbox_node> > loader(*this, symbol_map_, essential_configurations_, &preferences_checkbox_node_tree_);

            if (private_xml_ptree_ptr) {
              loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
              loader.fixup();
            }
            if (checkbox_xml_ptree_ptr) {
              loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path));
              loader.fixup();
            }
            loader.cleanup();
          }

          // ----------------------------------------
          {
            remapclasses_initialize_vector_loader loader(*this,
                                                         symbol_map_,
                                                         remapclasses_initialize_vector_,
                                                         identifier_map_);
            if (private_xml_ptree_ptr) {
              loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path), "");
            }
            if (checkbox_xml_ptree_ptr) {
              loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path), "");
            }
          }

          remapclasses_initialize_vector_.freeze();
        }
      }

    } catch (std::exception& e) {
      error_information_.set(e.what());
    }
  }
Exemplo n.º 2
0
 void read_xml_(ptree_ptr& out,
                const std::string& file_path) const {
   read_xml_(out, file_path, replacement_);
 }
Exemplo n.º 3
0
void xml_compiler::reload(const std::string& checkbox_xml_file_name) {
  error_information_.clear();
  replacement_warnings_.clear();
  global_included_files_.clear();
  replacement_.clear();
  symbol_map_.clear();
  modifier_map_.clear();
  app_vector_.clear();
  bundle_identifier_override_vector_.clear();
  window_name_vector_.clear();
  vk_change_inputsource_map_.clear();
  inputsource_vector_.clear();
  vk_open_url_map_.clear();
  identifier_map_.clear();
  essential_configurations_.clear();
  remapclasses_initialize_vector_.clear();
  preferences_checkbox_node_tree_.clear();
  preferences_number_node_tree_.clear();

  try {
    std::string private_xml_file_path = make_file_path(private_xml_directory_, "private.xml");

    // ------------------------------------------------------------
    // Loading replacement
    {
      replacement_loader loader(*this, replacement_);

      pqrs::string::replacement dummy; // Use dummy replacement when we read <replacementdef>.
      append_environments_to_replacement_(dummy);

      // private.xml
      {
        ptree_ptr ptree_ptr;
        read_xml_(ptree_ptr, private_xml_file_path, dummy);
        if (ptree_ptr) {
          loader.traverse(make_extracted_ptree(*ptree_ptr, private_xml_file_path, dummy));
        }
      }
      // replacementdef.xml
      {
        ptree_ptr ptree_ptr;
        std::string xml_file_path = make_file_path(system_xml_directory_, "replacementdef.xml");
        read_xml_(ptree_ptr, xml_file_path, dummy);
        if (ptree_ptr) {
          loader.traverse(make_extracted_ptree(*ptree_ptr, xml_file_path, dummy));
        }
      }

      append_environments_to_replacement_(replacement_);
    }

    // Reset replacement warnings that occur during loading replacement.
    replacement_warnings_.clear();

    // Reset global_included_files_ for each loading.
    global_included_files_.clear();

    // ------------------------------------------------------------
    // Then, we read private.xml with replacement and loaders share it.

    ptree_ptr private_xml_ptree_ptr;
    read_xml_(private_xml_ptree_ptr, private_xml_file_path);
    if (private_xml_ptree_ptr && private_xml_ptree_ptr->empty()) {
      private_xml_ptree_ptr.reset();
    }

    // symbol_map
    {
      symbol_map_loader loader(*this, symbol_map_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<symbol_map_loader>::traverse_system_xml(*this, loader, "symbol_map.xml");

      global_included_files_.clear();
    }

    // modifier
    {
      modifier_loader loader(*this,
                             symbol_map_,
                             remapclasses_initialize_vector_,
                             identifier_map_,
                             modifier_map_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<modifier_loader>::traverse_system_xml(*this, loader, "modifierdef.xml");

      global_included_files_.clear();
    }

    // app
    {
      app_loader loader(*this, symbol_map_, app_vector_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<app_loader>::traverse_system_xml(*this, loader, "appdef.xml");

      global_included_files_.clear();
    }

    // bundle_identifier_override
    {
      bundle_identifier_override_loader loader(*this, symbol_map_, bundle_identifier_override_vector_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<bundle_identifier_override_loader>::traverse_system_xml(*this, loader, "bundleidentifieroverridedef.xml");

      global_included_files_.clear();
    }

    // window_name
    {
      window_name_loader loader(*this, symbol_map_, window_name_vector_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<window_name_loader>::traverse_system_xml(*this, loader, "windownamedef.xml");

      global_included_files_.clear();
    }

    // ui_element_role
    {
      ui_element_role_loader loader(*this, symbol_map_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<ui_element_role_loader>::traverse_system_xml(*this, loader, "uielementroledef.xml");

      global_included_files_.clear();
    }

    // device
    {
      device_loader loader(*this, symbol_map_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicevendordef.xml");
      loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "deviceproductdef.xml");
      loader_wrapper<device_loader>::traverse_system_xml(*this, loader, "devicelocationdef.xml");

      global_included_files_.clear();
    }

    // inputsource
    {
      inputsource_loader loader(*this,
                                symbol_map_,
                                remapclasses_initialize_vector_,
                                identifier_map_,
                                vk_change_inputsource_map_,
                                inputsource_vector_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "vkchangeinputsourcedef.xml");
      loader_wrapper<inputsource_loader>::traverse_system_xml(*this, loader, "inputsourcedef.xml");

      global_included_files_.clear();
    }

    // url
    {
      url_loader loader(*this,
                        symbol_map_,
                        remapclasses_initialize_vector_,
                        identifier_map_,
                        vk_open_url_map_);

      if (private_xml_ptree_ptr) {
        loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path));
      }

      loader_wrapper<url_loader>::traverse_system_xml(*this, loader, "vkopenurldef.xml");

      global_included_files_.clear();
    }

    // config_index, remapclasses_initialize_vector, preferences_node
    {
      std::string checkbox_xml_file_path = make_file_path(system_xml_directory_, checkbox_xml_file_name);
      ptree_ptr checkbox_xml_ptree_ptr;
      read_xml_(checkbox_xml_ptree_ptr, checkbox_xml_file_path);

      std::string number_xml_file_path = make_file_path(system_xml_directory_, "number.xml");
      ptree_ptr number_xml_ptree_ptr;
      read_xml_(number_xml_ptree_ptr, number_xml_file_path);

      // remapclasses_initialize_vector
      {
        // prepare
        {
          remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_number_node>> loader(*this, symbol_map_, essential_configurations_, &preferences_number_node_tree_);

          if (number_xml_ptree_ptr) {
            loader.traverse(make_extracted_ptree(*number_xml_ptree_ptr, number_xml_file_path), "");
            loader.fixup();
          }
          loader.cleanup();

          global_included_files_.clear();
        }
        {
          remapclasses_initialize_vector_prepare_loader<preferences_node_tree<preferences_checkbox_node>> loader(*this, symbol_map_, essential_configurations_, &preferences_checkbox_node_tree_);

          if (private_xml_ptree_ptr) {
            loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path), "");
            loader.fixup();
          }
          if (checkbox_xml_ptree_ptr) {
            loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path), "");
            loader.fixup();
          }
          loader.cleanup();

          global_included_files_.clear();
        }

        // ----------------------------------------
        {
          remapclasses_initialize_vector_loader loader(*this,
                                                       symbol_map_,
                                                       remapclasses_initialize_vector_,
                                                       identifier_map_);
          if (private_xml_ptree_ptr) {
            loader.traverse(make_extracted_ptree(*private_xml_ptree_ptr, private_xml_file_path), "");
          }
          if (checkbox_xml_ptree_ptr) {
            loader.traverse(make_extracted_ptree(*checkbox_xml_ptree_ptr, checkbox_xml_file_path), "");
          }

          global_included_files_.clear();
        }

        remapclasses_initialize_vector_.freeze();
      }
    }

    if (!replacement_warnings_.empty()) {
      error_information_.set(replacement_warnings_);
    }

  } catch (std::exception& e) {
    error_information_.set(e.what());
  }
}