xdg::desktop_entry: Fix references to format::xdg::ini

This commit is contained in:
Sasha Koshka 2024-10-22 18:05:05 -04:00
parent fdcef60130
commit 21bc239cef
3 changed files with 41 additions and 41 deletions

View File

@ -1,3 +1,3 @@
The desktop_entry module implements the XDG Desktop Entry Specification as The desktop_entry module implements the XDG Desktop Entry Specification as
described in (https://specifications.freedesktop.org/desktop-entry-spec/latest). described in (https://specifications.freedesktop.org/desktop-entry-spec/latest).
For the generalized format, see [[format::desktop_entry]]. For the generalized format, see [[format::xdg::ini]].

View File

@ -1,4 +1,4 @@
use format::desktop_entry; use format::xdg::ini;
use io; use io;
use locale; use locale;
use strings; use strings;
@ -44,14 +44,14 @@ export type action = struct {
}; };
// Parses a desktop entry file. Use [[file_finish]] to get rid of it. // Parses a desktop entry file. Use [[file_finish]] to get rid of it.
export fn parse(input: io::handle) (file | desktop_entry::error) = { export fn parse(input: io::handle) (file | ini::error) = {
let file = file { ... }; let file = file { ... };
let scanne = desktop_entry::scan(input); let scanne = ini::scan(input);
defer desktop_entry::finish(&scanne); defer ini::finish(&scanne);
for (let entr => desktop_entry::next_entry(&scanne)?) { for (let entr => ini::next_entry(&scanne)?) {
match(parse_handle_entry(&file, entr)) { match(parse_handle_entry(&file, entr)) {
case let err: desktop_entry::error => case let err: ini::error =>
finish(&file); finish(&file);
return err; return err;
case void => void; case void => void;
@ -90,17 +90,17 @@ export fn finish(this: *file) void = {
free(this.actions); free(this.actions);
}; };
fn parse_handle_entry(this: *file, entr: desktop_entry::entry) (void | desktop_entry::error) = { fn parse_handle_entry(this: *file, entr: ini::entry) (void | ini::error) = {
const desktop_action_prefix = "Desktop Action "; const desktop_action_prefix = "Desktop Action ";
if (entr.group == "Desktop Entry") { if (entr.group == "Desktop Entry") {
return parse_handle_desktop_entry_entry(this, entr); return parse_handle_ini_entry(this, entr);
} else if (strings::hasprefix(entr.group, desktop_action_prefix)) { } else if (strings::hasprefix(entr.group, desktop_action_prefix)) {
let key = strings::trimprefix(entr.group, desktop_action_prefix); let key = strings::trimprefix(entr.group, desktop_action_prefix);
return parse_handle_desktop_action_entry(this, entr, key); return parse_handle_desktop_action_entry(this, entr, key);
}; };
}; };
fn parse_handle_desktop_action_entry(this: *file, entr: desktop_entry::entry, key: str) (void | desktop_entry::error) = { fn parse_handle_desktop_action_entry(this: *file, entr: ini::entry, key: str) (void | ini::error) = {
let actio = match(parse_find_action(this, key)) { let actio = match(parse_find_action(this, key)) {
case let actio: *action => yield actio; case let actio: *action => yield actio;
case void => return void; case void => return void;
@ -108,70 +108,70 @@ fn parse_handle_desktop_action_entry(this: *file, entr: desktop_entry::entry, ke
if (entr.key == "Name") { if (entr.key == "Name") {
parse_set_locale_string( parse_set_locale_string(
&actio.name, entr.locale, &actio.name, entr.locale,
desktop_entry::parse_localestring(entr.value)?); ini::parse_localestring(entr.value)?);
} else if (entr.key == "Icon") { } else if (entr.key == "Icon") {
parse_set_locale_string( parse_set_locale_string(
&actio.icon, entr.locale, &actio.icon, entr.locale,
desktop_entry::parse_iconstring(entr.value)?); ini::parse_iconstring(entr.value)?);
} else if (entr.key == "Exec") { } else if (entr.key == "Exec") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
actio.exec = desktop_entry::parse_string(entr.value)?; actio.exec = ini::parse_string(entr.value)?;
}; };
}; };
fn parse_handle_desktop_entry_entry(this: *file, entr: desktop_entry::entry) (void | desktop_entry::error) = { fn parse_handle_ini_entry(this: *file, entr: ini::entry) (void | ini::error) = {
if (entr.key == "Type") { if (entr.key == "Type") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.typ = desktop_entry::parse_string(entr.value)?; this.typ = ini::parse_string(entr.value)?;
} else if (entr.key == "Version") { } else if (entr.key == "Version") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.version = desktop_entry::parse_string(entr.value)?; this.version = ini::parse_string(entr.value)?;
} else if (entr.key == "Name") { } else if (entr.key == "Name") {
parse_set_locale_string( parse_set_locale_string(
&this.name, entr.locale, &this.name, entr.locale,
desktop_entry::parse_localestring(entr.value)?); ini::parse_localestring(entr.value)?);
} else if (entr.key == "GenericName") { } else if (entr.key == "GenericName") {
parse_set_locale_string( parse_set_locale_string(
&this.generic_name, entr.locale, &this.generic_name, entr.locale,
desktop_entry::parse_localestring(entr.value)?); ini::parse_localestring(entr.value)?);
} else if (entr.key == "NoDisplay") { } else if (entr.key == "NoDisplay") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.no_display = desktop_entry::parse_boolean(entr.value)?; this.no_display = ini::parse_boolean(entr.value)?;
} else if (entr.key == "Comment") { } else if (entr.key == "Comment") {
parse_set_locale_string( parse_set_locale_string(
&this.comment, entr.locale, &this.comment, entr.locale,
desktop_entry::parse_localestring(entr.value)?); ini::parse_localestring(entr.value)?);
} else if (entr.key == "Icon") { } else if (entr.key == "Icon") {
parse_set_locale_string( parse_set_locale_string(
&this.icon, entr.locale, &this.icon, entr.locale,
desktop_entry::parse_iconstring(entr.value)?); ini::parse_iconstring(entr.value)?);
} else if (entr.key == "Hidden") { } else if (entr.key == "Hidden") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.hidden = desktop_entry::parse_boolean(entr.value)?; this.hidden = ini::parse_boolean(entr.value)?;
} else if (entr.key == "OnlyShowIn") { } else if (entr.key == "OnlyShowIn") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.only_show_in = desktop_entry::parse_strings(entr.value)?; this.only_show_in = ini::parse_strings(entr.value)?;
} else if (entr.key == "NotShowIn") { } else if (entr.key == "NotShowIn") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.not_show_in = desktop_entry::parse_strings(entr.value)?; this.not_show_in = ini::parse_strings(entr.value)?;
} else if (entr.key == "DBusActivatable") { } else if (entr.key == "DBusActivatable") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.dbus_activatable = desktop_entry::parse_boolean(entr.value)?; this.dbus_activatable = ini::parse_boolean(entr.value)?;
} else if (entr.key == "TryExec") { } else if (entr.key == "TryExec") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.try_exec = desktop_entry::parse_string(entr.value)?; this.try_exec = ini::parse_string(entr.value)?;
} else if (entr.key == "Exec") { } else if (entr.key == "Exec") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.exec = desktop_entry::parse_string(entr.value)?; this.exec = ini::parse_string(entr.value)?;
} else if (entr.key == "Path") { } else if (entr.key == "Path") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.path = desktop_entry::parse_string(entr.value)?; this.path = ini::parse_string(entr.value)?;
} else if (entr.key == "Terminal") { } else if (entr.key == "Terminal") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.terminal = desktop_entry::parse_boolean(entr.value)?; this.terminal = ini::parse_boolean(entr.value)?;
} else if (entr.key == "Actions") { } else if (entr.key == "Actions") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
let strings =desktop_entry::parse_strings(entr.value)?; let strings =ini::parse_strings(entr.value)?;
defer free(strings); defer free(strings);
this.actions = alloc([], len(strings)); this.actions = alloc([], len(strings));
for (let string .. strings) { for (let string .. strings) {
@ -182,33 +182,33 @@ fn parse_handle_desktop_entry_entry(this: *file, entr: desktop_entry::entry) (vo
}; };
} else if (entr.key == "MimeType") { } else if (entr.key == "MimeType") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.mime_type = desktop_entry::parse_strings(entr.value)?; this.mime_type = ini::parse_strings(entr.value)?;
} else if (entr.key == "Categories") { } else if (entr.key == "Categories") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.categories = desktop_entry::parse_strings(entr.value)?; this.categories = ini::parse_strings(entr.value)?;
} else if (entr.key == "Implements") { } else if (entr.key == "Implements") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.implements = desktop_entry::parse_strings(entr.value)?; this.implements = ini::parse_strings(entr.value)?;
} else if (entr.key == "Keywords") { } else if (entr.key == "Keywords") {
parse_set_locale_strings( parse_set_locale_strings(
&this.keywords, entr.locale, &this.keywords, entr.locale,
desktop_entry::parse_localestrings(entr.value)?); ini::parse_localestrings(entr.value)?);
} else if (entr.key == "StartupWMClass") { } else if (entr.key == "StartupWMClass") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.startup_wm_class = desktop_entry::parse_string(entr.value)?; this.startup_wm_class = ini::parse_string(entr.value)?;
} else if (entr.key == "URL") { } else if (entr.key == "URL") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.url = desktop_entry::parse_string(entr.value)?; this.url = ini::parse_string(entr.value)?;
} else if (entr.key == "PrefersNonDefaultGPU") { } else if (entr.key == "PrefersNonDefaultGPU") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.prefers_non_default_gpu = desktop_entry::parse_boolean(entr.value)?; this.prefers_non_default_gpu = ini::parse_boolean(entr.value)?;
} else if (entr.key == "SingleMainWindow") { } else if (entr.key == "SingleMainWindow") {
if (parse_is_localized(entr)) return void; if (parse_is_localized(entr)) return void;
this.single_main_window = desktop_entry::parse_boolean(entr.value)?; this.single_main_window = ini::parse_boolean(entr.value)?;
}; };
}; };
fn parse_is_localized(entr: desktop_entry::entry) bool = { fn parse_is_localized(entr: ini::entry) bool = {
return !locale::equal(entr.locale, locale::c); return !locale::equal(entr.locale, locale::c);
}; };

View File

@ -1,11 +1,11 @@
use format::desktop_entry; use format::xdg::ini;
use fmt; use fmt;
use io; use io;
use locale; use locale;
use os; use os;
@test fn parse() void = { @test fn parse() void = {
let file = os::open("format/desktop_entry/test_data/foo_full.desktop")!; let file = os::open("format/xdg/ini/test_data/foo_full.desktop")!;
defer io::close(file)!; defer io::close(file)!;
let file = parse(file)!; let file = parse(file)!;
defer finish(&file); defer finish(&file);