i thought i'd start this here for a wide audience. documentation for efl. it's rather horrible. and yesterday it dawned on me... it has license problems too.
1. license problems: the documentation in many parts is lgpl - and that means copying any code from code snippets or examples in the docs makes the app you copy it into lgpl. that is BAD. enforcing the license even though with lgpl we intend the library boundary to be the library itself. we can add exceptions, but splitting docs out might actually be best. reality is that no one is ever going to sue over this and it's safe as it's not intended to be a problem, but strictly/legally it is. if someone has a legal department that really dots their i's and crosses their t's... they would spot this. 2. our docs are a mess. a lot are not linked to and undiscoverable. they have typos, missing docs - often are sparse and with little or nothing in the way of binding things together. they are at best a very slim reference set for apis with little besides that. some references are good, but most are also very thin. keeping docs totally in the hands of core devs (always in the source tree - src commit access needed) simply is *NOT WORKING*. devs work on code. we just are not doing docs. we should do them, but reality is we are not and have little incentive to do it. core devs are busy enough as-is. 3. eo brings the added problem of needing docs to cover multiple languages from a single source. C, C++, Lua, JS, Python... it's a unique problem that using doxygen is never going to solve. we need a solution. i haven't found another solution and to be honest ours will be custom due to eo/eolian anwyay. 4. people ask questions on efl all the time and we answer in email, irc etc. .. and this information is not captured. it's lost. that's because there is no "forum" for asking such q's. we should closely tie such forums and q&a to documentation. this would massively improve the value of docs. 5. the theory of keeping docs with the code is just not working. it doesn't encourage them to be good. it just isn't working - plain and simple. it's time to re-evaluate that. ... we need a solution. we need to expand the set of peole who can contribute to documentation. we need to handle multiple languages with a single source. we need to collect q&a together with the docs that are relevant. we need to encourage our docs not to fragment. what i propose is we take a long hard look at how we document and present docs to the world. i'm opening this up to people to contribute to the discussion and propose solutions and share their knowledge/experience. let me start: 1. we set up a wiki that is easy to drive from a back-end in terms of inserting content. jpeg has spent a fair bit of time looking at gollum. gollum looks good: https://github.com/gollum/gollum - it is a wiki that is all plain text files (hooray! no danged db) in a directory tree... with everything in git. that means you can edit the wiki with your fave text editor and git commit/push your changes. web interface is not needed - but is there for those without back-end git access. we can automate inserting content with scripts too and so life gets easy for automated infra. that is good. 2. we need to solve discussions. being able to have a thread on any wiki page would really help. like reddit or any of these places, we would have a live community of people discussing things. they can discuss on the page that is relevant. it'd be nice if someone proposes a way to do this with gollum or has a solution that already does this that is as nice as gollum is? 3. we write scripts (maybe lua? since we already have lualian using eolian libs from lua) that use eolian and parse eo files and GENERATE the template documentation markdown pages from our eo classes. they only generate EMPTY templates with func prototypes, enums, structs etc. only generate them when a new class or method/property/event is added. these pages then are filled in via the documentation git repo/wiki etc. and can be edited over time and improved. 4. this documentation now has a more acceptable license - maybe creative commons or bsd-2-clause? be explicit on it. 5. we just re-run the generation scripts every efl release so new things we added get templates. maybe when we begin release freeze/stabilization to make this period a documentation effort too. the scripts can even generate pages that give status on how much is or is not documented yet, giving a quality measure so we can strive to get that to 100%. dont overwrite pages already there as they may have changes in them. by generating current status, it's a score that "gameifies" documentation. you want 100% of pages that are auto generated that should then be filled to have at least 1 commit after the intial insert into the repo. that gets your % coverage. then you get bonus points for how much extra documentation there is (size of these files lets say in bytes as a quick and dirty measure of doc points). 6. as it's git - we can revert any doc changes we see are inappropriate - easily. git revert. yay. we also get emails on commits so we know what's going on. 7. when we generate, we generate docs in sections. you generate the "core" docs (gollum supports markdown that lets you "#include" other markdown pages) per language we support, and then specific markdown is generic (include that into the master page for that class, method, event generated for that language), with the rest of that page being language specific. thus every class and method, event generates a skeleton per language, as well as a generic "core" markdown that is included into the skeleton. this should support multiple languages nicely. the generation also ensures that symbols are linked to the right markdown pages automatically. so you end up with something like: timer/ timer/C_class.md -> "#include class.md + #include class_inherits.md ..." timer/LUA_class.md -> "#include class.md + ..." timer/CPP_class.md -> "#include class.md + ..." timer/JS_class.md -> "#include class.md + ..." timer/PY_class.md -> "#include class.md + ..." timer/class.md timer/class_inherits.md timer/class_contents.md ... timer/funcs/C_method1.md timer/funcs/LUA_method1.md timer/funcs/CPP_method1.md ... timer/funcs/method1.md ... timer/events/C_callback1.md timer/events/LUA_callback1.md ... timer/events/callback1.md you get the idea (ok have some more auto generated files that are included too most likely - like classes that are inherited for this class the actual list of funcs, properties and callbacks (including overridden ones that are marked as such)). same per func/method/property/event - generate the lan specific prototypes and "#include" the core docs, then you can put lang specifics per generated file if need be (or just edit class.md) 8. gollum uses pygments for code highlighting. it can #include c/h/js/py files etc. and color highlight them via pygments. we'd have to teach pygments about .eo syntax i think - maybe edc. we can cheat and use C highlights for now. but what does need doing is ensuring pygments can generate LINKS to the right markdown pages in the docs. the doc generator will need to generate some kind of index of symbol -> markdown page address so pygments can create the correct link when generating the colorized output when it sees a matching symbol. someone willing to do the python work here would be needed. but the nice thing is we can "#include" the c src for docs .. keeping the original src in separate files .. thus keeping them compileable! :) this is a start - what do people have to add/say? do you have something ... better? can you improve the above? -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel