Camera-specific tags: yes, your suggestion about implementing is more elegant than just copying the strings and doing some parsing on the fly, but we would have to maintain a list of MODEL_EOS_xxD constants; I'm not a big fan of these lists, I prefer to reuse the camera_model_short strings, as they are quite readable.
C-only modules: didn't think yet about how to annotate them (the RST parser is a Python script). Good point, will think about it.
Now, combining with the idea from Audionut, what about filtering the displayed modules like this?
static struct menu_entry module_menu[] = {
{
.name = "Show modules",
.priv = &show_modules,
.choices = CHOICES("All", "Stable", "Usable & stable", "Untested", "Photo", "Video", "RAW", "Exposure", "Diagnostics", "Experiments"),
.help = "Choose what modules to display:",
.help2 =
"All: show all modules\n"
"Stable: developer has this model and it shows no misbehavior\n"
"Usable: seems to work on this camera, hiccups may happen\n"
"Untested: might work, expect anything\n"
"Photo: show modules focused on stills shooting\n"
"Video: show modules focused on video shooting\n"
"RAW: show modules focused on RAW shooting (photo or video)\n"
"Exposure: show modules that help with exposure (photo or video)\n"
"Diagnostics: show modules intended for troubleshooting\n"
"Experiments: show developer's experiments and research code\n",
},
MODULE_ENTRY(0)
MODULE_ENTRY(1)
MODULE_ENTRY(2)
...
I've mixed stability ratings with tags for the following reasons;
- to have a single entry in menu
- troubleshooting and experiments don't really need stability ratings, do they?
And, of course, the tag list is open, and each tag also has a description visible in the menu.
So, the modules could be tagged in the README, besides stability ratings, as:
:Tags: exposure raw photo
:Tags: experiment video
and so on.