2014-11-28 15:34:36 -08:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2018-03-17 10:43:34 -07:00
|
|
|
#include "edi_content.h"
|
2014-11-28 15:34:36 -08:00
|
|
|
#include "edi_content_provider.h"
|
|
|
|
#include "editor/edi_editor.h"
|
|
|
|
|
2015-02-07 00:13:40 -08:00
|
|
|
#include "edi_config.h"
|
2014-11-28 15:34:36 -08:00
|
|
|
|
2017-07-04 06:10:55 -07:00
|
|
|
#include "language/edi_language_provider.h"
|
|
|
|
|
2015-02-07 08:37:36 -08:00
|
|
|
#include "edi_private.h"
|
|
|
|
|
2014-11-28 15:34:36 -08:00
|
|
|
static Edi_Content_Provider _edi_content_provider_registry[] =
|
|
|
|
{
|
2015-02-27 06:47:00 -08:00
|
|
|
{"text", "text-x-generic", EINA_TRUE, EINA_TRUE, edi_editor_add},
|
2015-02-22 06:17:51 -08:00
|
|
|
{"code", "text-x-csrc", EINA_TRUE, EINA_TRUE, edi_editor_add},
|
2018-03-17 10:43:34 -07:00
|
|
|
{"image", "image-x-generic", EINA_FALSE, EINA_FALSE, edi_content_image_add},
|
|
|
|
{"diff", "text-x-source", EINA_TRUE, EINA_FALSE, edi_content_diff_add},
|
2014-11-28 15:34:36 -08:00
|
|
|
|
2015-02-22 06:17:51 -08:00
|
|
|
{NULL, NULL, EINA_FALSE, EINA_FALSE, NULL}
|
2014-11-28 15:34:36 -08:00
|
|
|
};
|
|
|
|
|
2015-01-10 09:43:12 -08:00
|
|
|
Edi_Content_Provider *edi_content_provider_for_mime_get(const char *mime)
|
2014-11-28 15:34:36 -08:00
|
|
|
{
|
2015-02-07 08:37:36 -08:00
|
|
|
const char *id = NULL;
|
2017-07-04 06:10:55 -07:00
|
|
|
Edi_Language_Provider *provider;
|
2014-11-28 15:34:36 -08:00
|
|
|
|
2015-01-27 14:31:12 -08:00
|
|
|
if (!mime)
|
|
|
|
return NULL;
|
|
|
|
|
2017-07-04 06:10:55 -07:00
|
|
|
provider = edi_language_provider_for_mime_get(mime);
|
|
|
|
|
|
|
|
if (!!provider)
|
2015-02-06 06:16:26 -08:00
|
|
|
id = "code";
|
2017-07-04 06:10:55 -07:00
|
|
|
else if (!strcasecmp(mime, "text/plain") || !strcasecmp(mime, "application/x-shellscript"))
|
|
|
|
id = "text";
|
2014-11-28 15:34:36 -08:00
|
|
|
else if (!strncasecmp(mime, "image/", 6))
|
|
|
|
id = "image";
|
|
|
|
else if (!strcasecmp(mime, "text/x-diff") || !strcasecmp(mime, "text/x-patch"))
|
|
|
|
id = "diff";
|
|
|
|
else
|
2015-02-07 00:13:40 -08:00
|
|
|
{
|
2015-02-07 08:37:36 -08:00
|
|
|
id = _edi_config_mime_search(mime);
|
|
|
|
if (!id)
|
2017-05-21 15:22:36 -07:00
|
|
|
{
|
|
|
|
if (!strncasecmp(mime, "text/", 5))
|
|
|
|
id = "text";
|
|
|
|
else
|
|
|
|
return NULL;
|
|
|
|
}
|
2015-02-07 00:13:40 -08:00
|
|
|
}
|
2014-11-28 15:34:36 -08:00
|
|
|
|
|
|
|
return edi_content_provider_for_id_get(id);
|
|
|
|
}
|
|
|
|
|
2015-01-10 09:43:12 -08:00
|
|
|
Edi_Content_Provider *edi_content_provider_for_id_get(const char *id)
|
2014-11-28 15:34:36 -08:00
|
|
|
{
|
|
|
|
Edi_Content_Provider *provider;
|
|
|
|
|
|
|
|
provider = _edi_content_provider_registry;
|
|
|
|
while (provider != NULL && provider->id != NULL)
|
|
|
|
{
|
2017-06-27 08:48:49 -07:00
|
|
|
if (!strncmp(id, provider->id, strlen(id)))
|
2014-11-28 15:34:36 -08:00
|
|
|
return provider;
|
|
|
|
|
|
|
|
provider++;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|