Ken. As an XML fan I like the idea but really since LibLouis doesn't use XML anywhere else it makes more sense to me to keep it as a simple key/value table. Why add XML dependencies to something that has no compelling need to use it? -----Original Message----- From: liblouis-liblouisxml-bounce@xxxxxxxxxxxxx [mailto:liblouis-liblouisxml-bounce@xxxxxxxxxxxxx] On Behalf Of Ken Perry Sent: Tuesday, October 21, 2014 9:55 AM To: liblouis-liblouisxml@xxxxxxxxxxxxx Subject: [liblouis-liblouisxml] Re: Liblouis table header I wonder though if this would not be better done as an extra xml file like an index card sort of like how a daisy book is done. For example the xml file could have all the info for a certain set of tables. It could also list all the tables that are included in the grouping for example for ueb it could have all the latten files and the braille pattern file listed as files to include if you want contracted ueb. Thus the xml tool could be used not only as a pretty way to show the name of the tables but also a way to group sets of tables together so you know what tables are affected when you make changes. An index card could also show relationships between different tables. And you wouldn't have to have info at the top of every table just a card for each language or braille type. Ken -----Original Message----- From: liblouis-liblouisxml-bounce@xxxxxxxxxxxxx [mailto:liblouis-liblouisxml-bounce@xxxxxxxxxxxxx] On Behalf Of Bert Frees Sent: Monday, October 20, 2014 2:52 PM To: liblouis-liblouisxml@xxxxxxxxxxxxx Subject: [liblouis-liblouisxml] Re: Liblouis table header Hammer Attila writes: > Bert, this is good ydea my openion. > Now, for example in Orca Screen Reader some Liblouis table names > marked for translation in Orca side, but more tables not. > If when Orca future requesting table list from the louis Python3 > binding and the table list function returning the localized table > name, Joanie have possibility to fill Contraction table combo box with > translated table name. > If I understanding right your examples, of course, only presents the > localized table name when the equals system locale is used. > For example, when I future using hungarian locale and your example the > afrikaans table pretty-name is "Afrikaans ongekontrakteerde", possible > translating future hungarian locale the afrikaans table name with > "afrikai" table name, or simple presents the english table name future > when I selecting a table from the Orca preferences dialog contraction > table combo box? > Possible extending the pretty_name tag to pretty-name[locale] variant? > So, the header have possibility to add following style translations: > pretty-name[af]="Afrikaans ongekontrakteerde" > pretty-name[hu]="afrikai (irodalmi)" > This is examples only. `pretty-name` could be treated as a special metadata field with a special API call associated, named something like "get_localized_pretty_name(char* table, char* locale)". For mapping locales to strings in the table header, I had proposed to use keywords of the form "#+pretty-name-hu", but your idea "#+pretty-name[hu]" would work equaly fine and looks a bit better. I come to realize now that we're trying to cover two completely different use cases here, namely "table discovery" vs. "table name localization". Although they are both related to metadata, I wonder if it's such a good idea to mix the two. Michael Whapples writes: > Hello, > Much of that sounds quite good. > > I have some questions. > 1. What if one is doing a partial search of a value (eg. If asking for > (locale:en) which I might take to mean return any English table > regardless of country). The reverse may also be desired, where a less > specific match would be acceptable (eg. (locale:fr_FR) but if that > specific one cannot be matched then (locale:fr) will also be checked). > Locales come to mind because this comes up in other things (eg. Java > applications choosing locale resource bundles), but other criteria may > need this partial matching on values. Good point. I would say we treat `locale` as a special keyword and implement some kind of fallback mechanism. E.g. when the query is "(locale:fr_FR)", tables with locale "fr_FR" will get the most points, then "fr_FR_*" (a variant, e.g. "fr_FR_1694acad"), then "fr", and then possibly "fr_*" (e.g. "fr_CA"). Applications can still check the actual locale of a matching table and decide to not consider it a match after all. An alternative is for applications to make several query calls and implement the fallback mechanism theirselves. (To illustrate, in CSS, several media queries can be combined in a comma separated list. If one or more of the queries match, the whole list matches, otherwise not.) We could also allow applications to override the "matching function" for a particular keyword, although that's pretty advanced usage already and I would rather keep it as simple as possible. Yet another approach is to allow multiple locales in a table header. For example, a translation table for Spanish braille could possibly also be used for Catalan. There's no way an automatic fallback mechanism would cover this case. > 2. Where you mention doing matches with single keywords, why not just > be like XPath's attribute matching, just check for a key regardless of > its value instead of a separate tags field? The single keywords were meant for things that can't really have a value (apart maybe for values that evaluate to true or false). For this reason I wanted to also treat them different from key-value pairs. I wanted to avoid things like "(locale)" matching all tables that have a locale value. (In CSS media queries, features, as they are called there, without a value actually kind of behave like this. E.g. "(color)" means "(min-color: 1)". But this only really makes sense if the required value type is an integer.) But I also see where you're coming from. It might simplify things if we could eliminate the special-purpose keyword "#+tags". What if we make "(some-tag)" match tables with the field "#+some-tag" but not tables with the field "#+some-tag: some-value"? > 3. I imagine the API would have a query for tables function (IE. I > give it a set of key, value pairs and it gives me a table which matches). > There may be queries which could give multiple tables (eg. (grade:2)) > so the function may return multiple tables. I think this would be > better than just a single table (eg. the first matching table) as then > the application could present the options to the user. OK, makes perfect sense. > 4. Thinking back to question 1, I think the indicator value may be > useful, even with the query for tables function (IE. one could list > the tables in order of best match). Also a function to check a named > table against criteria may also be useful (IE. if the application > wants to take more control over table handling, eg. caching query results). OK. > On 20/10/2014 15:49, Bert Frees wrote: >> Hi all, >> >> I want to bring this subject up again because we've been discussing >> it so many times and I think it's about time we finally do something. >> To recap, we need to develop a header format that can contain >> metadata about the table, and an API for extracting metadata and querying >> tables. >> >> Greg's proposal with the single-line comment on the first line was a >> good start. But I'd like to have something a bit more >> flexible/extensible. I have worked out something and I'd like to have you >> guy's opinions and suggestions. >> >> For my DAISY Pipeline 2 work I have been nurturing the idea of >> selecting translators based on some kind of "translator query". The >> use case is quite the same as we have here for liblouis. The syntax I >> am proposing for DAISY Pipeline is inspired by CSS media queries. A >> query is basically a list of key-value pairs or keywords. I'm not >> proposing to use exactly the same syntax for liblouis, but I believe we need >> something similar/mappable. >> >> Let's take Greg's example: >> >> #afr#1#Afrikaans Uncontracted#za#Afrikaans ongekontrakteerde >> >> It consists of 5 metadata fields. 3 of them can be used for automatic >> table selection. The two other are for pretty printing in graphical >> user interfaces. Combining the two locale fields (language and >> country) into a single tag, the corresponding CSS query would look like this: >> >> (locale:af-ZA) (grade:1) >> >> The same key-value pairs could be put in liblouis table headers. I >> like the idea of having the metadata in special comments, in order to >> assure backwards compatibility of new tables with old library >> versions, and so that implementations of the liblouis table format >> can choose whether or not they support metadata. >> >> A possible syntax could be `#+<KEY>: <value>` >> >> #+LOCALE: af-ZA >> #+GRADE: 1 >> #+PRETTY_NAME: Afrikaans ongekontrakteerde >> #+PRETTY_NAME_EN: Afrikaans Uncontracted >> >> (This is org-mode's syntax by the way.) The keywords would be >> case-insensitive. Some keywords will be standard, such as LOCALE, >> GRADE and PRETTY_NAME, but I wouldn't restrict the allowed keywords >> in any way, in order to keep the system flexible. >> >> The CSS query syntax also allows single keywords, without a value. For >> example: >> >> (ueb) (grade:2) >> >> This could be reflected in a `#+TAGS` field with a list of >> space-separated >> "tags": >> >> #+LOCALE: en-US >> #+GRADE: 2 >> #+TAGS: ueb >> >> I haven't really thought about the API yet. It would be nice if one >> could provide a list of key-value pairs and/or single keywords, >> together with a table path, and get a table name back. The keys could >> possibly be sorted by importance, and the API could possibly return some >> kind of "matching quotient" >> that indicates whether the table is a good match for the query or not. >> >> >> Thoughts? >> Bert For a description of the software, to download it and links to project pages go to http://www.abilitiessoft.com For a description of the software, to download it and links to project pages go to http://www.abilitiessoft.com For a description of the software, to download it and links to project pages go to http://www.abilitiessoft.com