Sat Apr 3 21:12:53 CEST 2010 Tobias Rautenkranz * KDE is split up in kde.ui and kde.core. Sat Apr 3 21:12:32 CEST 2010 Tobias Rautenkranz * C++ member variable access Sun Jan 10 09:57:54 CET 2010 Tobias Rautenkranz * modular smoke. Sun Dec 13 14:22:09 CET 2009 Tobias Rautenkranz * remove mudballs Wed Sep 2 14:08:06 CEST 2009 Tobias Rautenkranz * cl-smoke now supports user conversions for return values. Sun Aug 30 16:26:13 CEST 2009 Tobias Rautenkranz * Multiple inheritance doc & expand tabs in programmlisting. Thu Aug 27 13:47:08 CEST 2009 Tobias Rautenkranz * Update for the new smokegenerator Sun Aug 2 13:24:57 CEST 2009 Tobias Rautenkranz * Remove wrong note about cxx:meta-object Thu Jul 23 00:59:59 CEST 2009 Tobias Rautenkranz * add phonon repository Thu Jul 23 00:53:41 CEST 2009 Tobias Rautenkranz * phonon & :arg0 Mon Jul 6 23:51:20 CEST 2009 Tobias Rautenkranz * OpenGL: origami Fri Jul 3 00:28:43 CEST 2009 Tobias Rautenkranz * cl-smoke.commonqt & Clozure CL support Sun Jun 21 11:29:52 CEST 2009 Tobias Rautenkranz * Link Benchmark Wed Jun 10 14:17:14 CEST 2009 Tobias Rautenkranz * better Lisp source highlighting Fri Jun 5 16:17:33 CEST 2009 Tobias Rautenkranz * Lisp syntax highlighting Thu Jun 4 23:20:49 CEST 2009 Tobias Rautenkranz * interactive development Thu Jun 4 00:31:34 CEST 2009 Tobias Rautenkranz * ASDF & dispatch callback restarts Tue May 26 12:08:31 CEST 2009 Tobias Rautenkranz * Return value conversions Sun May 24 17:11:38 CEST 2009 Tobias Rautenkranz * Fixed hash-table multithreading Tue May 19 16:44:30 CEST 2009 Tobias Rautenkranz * Clozure CL save-application Thu May 14 14:56:16 CEST 2009 Tobias Rautenkranz * Save core image Tue May 12 19:03:22 CEST 2009 Tobias Rautenkranz * Note Clozure CL support Mon May 11 22:23:03 CEST 2009 Tobias Rautenkranz * Rename *.docbook -> *.xml Mon May 11 22:19:30 CEST 2009 Tobias Rautenkranz * document setf & cleanup Fri Apr 17 17:32:31 CEST 2009 Tobias Rautenkranz * C++ overload resolution Tue Apr 14 16:08:15 CEST 2009 Tobias Rautenkranz * FDL license & small updates Sun Apr 12 22:56:16 CEST 2009 Tobias Rautenkranz * operators & qt:variant diff -rN -u old-doc/Makefile new-doc/Makefile --- old-doc/Makefile 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/Makefile 2014-10-30 08:30:27.000000000 +0100 @@ -1,22 +1,36 @@ # # Dependancies: -# xmllint xsltproc docbook +# - xmllint +# - saxon +# - docbook +# - xslthl # +# Debian: download the xslthl jar into the doc/ directory; install the remaining dependancies with apt. +# + +SAXON_JAR := /usr/share/java/saxon.jar +XSLTHL_JAR := $(firstword $(wildcard xslthl*.jar)) +CLASSPATH := "$(SAXON_JAR):$(XSLTHL_JAR)" +SAXON := java -classpath $(CLASSPATH) \ + -Dxslthl.config="file://$(realpath xslthl-config.xml)" \ + com.icl.saxon.StyleSheet all: manual.html index.html -DEPENDANCIES := *docbook *.xsl ../qt.examples/src/*.lisp ../kde.examples/src/*.lisp *.dtd +DEPENDANCIES := *.xml *.xsl ../qt.examples/src/*.lisp ../kde.examples/src/*.lisp *.dtd + +# validate & process xincludes +manual.tmp: $(DEPENDANCIES) + xmllint --xinclude --postvalid manual.xml > manual.tmp + -manual.html: $(DEPENDANCIES) - xmllint --xinclude --postvalid manual.docbook > /dev/null - xsltproc --xinclude -o $@ manual.xsl manual.docbook +manual.html: manual.tmp + $(SAXON) -o manual.html manual.tmp manual.xsl -index.html: $(DEPENDANCIES) -# xsltproc --xinclude --stringparam base.dir "manual/" chunk.xsl manual.docbook - xsltproc --xinclude chunk.xsl manual.docbook - +index.html: manual.tmp + $(SAXON) manual.tmp chunk.xsl .PHONY: clean clean: - rm -f -- *.html + rm -f -- *.html *.tmp diff -rN -u old-doc/chunk.xsl new-doc/chunk.xsl --- old-doc/chunk.xsl 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/chunk.xsl 2014-10-30 08:30:27.000000000 +0100 @@ -2,13 +2,18 @@ - - + + + + + + + - + Binary files old-doc/commonqt-t14.png and new-doc/commonqt-t14.png differ diff -rN -u old-doc/fdl-1.3.xml new-doc/fdl-1.3.xml --- old-doc/fdl-1.3.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/fdl-1.3.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,560 @@ + + + GNU Free Documentation License + Version 1.3, 3 November 2008 + + Copyright © 2000, 2001, 2002, 2007, 2008 + Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + + 0. PREAMBLE + + + The purpose of this License is to make a manual, textbook, or other + functional and useful document “free” in the sense of freedom: + to assure everyone the effective freedom to copy and redistribute it, with + or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the author and + publisher a way to get credit for their work, while not being considered + responsible for modifications made by others. + + + This License is a kind of “copyleft”, which means that + derivative works of the document must themselves be free in the same + sense. It complements the GNU General Public License, which is a copyleft + license designed for free software. + + + We have designed this License in order to use it for manuals for free + software, because free software needs free documentation: a free program + should come with manuals providing the same freedoms that the software + does. But this License is not limited to software manuals; it can be used + for any textual work, regardless of subject matter or whether it is + published as a printed book. We recommend this License principally for + works whose purpose is instruction or reference. + + + 1. APPLICABILITY AND DEFINITIONS + + + This License applies to any manual or other work, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that work + under the conditions stated herein. The “Document”, below, + refers to any such manual or work. Any member of the public is a licensee, + and is addressed as “you”. You accept the license if you copy, + modify or distribute the work in a way requiring permission under + copyright law. + + + A “Modified Version” of the Document means any work containing + the Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + + A “Secondary Section” is a named appendix or a front-matter + section of the Document that deals exclusively with the relationship of + the publishers or authors of the Document to the Document’s overall + subject (or to related matters) and contains nothing that could fall + directly within that overall subject. (Thus, if the Document is in part a + textbook of mathematics, a Secondary Section may not explain any + mathematics.) The relationship could be a matter of historical connection + with the subject or with related matters, or of legal, commercial, + philosophical, ethical or political position regarding them. + + + The “Invariant Sections” are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the notice + that says that the Document is released under this License. If a section + does not fit the above definition of Secondary then it is not allowed to + be designated as Invariant. The Document may contain zero Invariant + Sections. If the Document does not identify any Invariant Sections then + there are none. + + + The “Cover Texts” are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says + that the Document is released under this License. A Front-Cover Text may + be at most 5 words, and a Back-Cover Text may be at most 25 words. + + + A “Transparent” copy of the Document means a machine-readable + copy, represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed of + pixels) generic paint programs or (for drawings) some widely available + drawing editor, and that is suitable for input to text formatters or for + automatic translation to a variety of formats suitable for input to text + formatters. A copy made in an otherwise Transparent file format whose + markup, or absence of markup, has been arranged to thwart or discourage + subsequent modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A copy that is + not “Transparent” is called “Opaque”. + + + Examples of suitable formats for Transparent copies include plain ASCII + without markup, Texinfo input format, LaTeX input format, SGML or XML + using a publicly available DTD, and standard-conforming simple HTML, + PostScript or PDF designed for human modification. Examples of transparent + image formats include PNG, XCF and JPG. Opaque formats include proprietary + formats that can be read and edited only by proprietary word processors, + SGML or XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF produced by + some word processors for output purposes only. + + + The “Title Page” means, for a printed book, the title page + itself, plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For works in + formats which do not have any title page as such, “Title Page” + means the text near the most prominent appearance of the work’s + title, preceding the beginning of the body of the text. + + + The “publisher” means any person or entity that distributes + copies of the Document to the public. + + + A section “Entitled XYZ” means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ stands + for a specific section name mentioned below, such as + “Acknowledgements”, “Dedications”, + “Endorsements”, or “History”.) To “Preserve + the Title” of such a section when you modify the Document means that + it remains a section “Entitled XYZ” according to this + definition. + + + The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this License, + but only as regards disclaiming warranties: any other implication that + these Warranty Disclaimers may have is void and has no effect on the + meaning of this License. + + + 2. VERBATIM COPYING + + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the copyright + notices, and the license notice saying this License applies to the + Document are reproduced in all copies, and that you add no other + conditions whatsoever to those of this License. You may not use technical + measures to obstruct or control the reading or further copying of the + copies you make or distribute. However, you may accept compensation in + exchange for copies. If you distribute a large enough number of copies you + must also follow the conditions in section 3. + + + You may also lend copies, under the same conditions stated above, and you + may publicly display copies. + + + 3. COPYING IN QUANTITY + + + If you publish printed copies (or copies in media that commonly have + printed covers) of the Document, numbering more than 100, and the + Document’s license notice requires Cover Texts, you must enclose + the copies in covers that carry, clearly and legibly, all these Cover + Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the + back cover. Both covers must also clearly and legibly identify you as the + publisher of these copies. The front cover must present the full title + with all words of the title equally prominent and visible. You may add + other material on the covers in addition. Copying with changes limited to + the covers, as long as they preserve the title of the Document and satisfy + these conditions, can be treated as verbatim copying in other respects. + + + If the required texts for either cover are too voluminous to fit legibly, + you should put the first ones listed (as many as fit reasonably) on the + actual cover, and continue the rest onto adjacent pages. + + + If you publish or distribute Opaque copies of the Document numbering more + than 100, you must either include a machine-readable Transparent copy + along with each Opaque copy, or state in or with each Opaque copy a + computer-network location from which the general network-using public has + access to download using public-standard network protocols a complete + Transparent copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you begin + distribution of Opaque copies in quantity, to ensure that this Transparent + copy will remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + + It is requested, but not required, that you contact the authors of the + Document well before redistributing any large number of copies, to give + them a chance to provide you with an updated version of the Document. + + + 4. MODIFICATIONS + + + You may copy and distribute a Modified Version of the Document under the + conditions of sections 2 and 3 above, provided that you release the + Modified Version under precisely this License, with the Modified Version + filling the role of the Document, thus licensing distribution and + modification of the Modified Version to whoever possesses a copy of it. In + addition, you must do these things in the Modified Version: + + + + + Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions (which + should, if there were any, be listed in the History section of the + Document). You may use the same title as a previous version if the + original publisher of that version gives permission. + + + + + List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. + + + + + State on the Title page the name of the publisher of the Modified + Version, as the publisher. + + + + + Preserve all the copyright notices of the Document. + + + + + Add an appropriate copyright notice for your modifications adjacent to + the other copyright notices. + + + + + Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. + + + + + Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document’s license + notice. + + + + + Include an unaltered copy of this License. + + + + + Preserve the section Entitled “History”, Preserve its + Title, and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the Title + Page. If there is no section Entitled “History” in the + Document, create one stating the title, year, authors, and publisher + of the Document as given on its Title Page, then add an item + describing the Modified Version as stated in the previous sentence. + + + + + Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise the + network locations given in the Document for previous versions it was + based on. These may be placed in the “History” + section. You may omit a network location for a work that was published + at least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + + + + + For any section Entitled “Acknowledgements” or + “Dedications”, Preserve the Title of the section, and + preserve in the section all the substance and tone of each of the + contributor acknowledgements and/or dedications given therein. + + + + + Preserve all the Invariant Sections of the Document, unaltered in + their text and in their titles. Section numbers or the equivalent are + not considered part of the section titles. + + + + + Delete any section Entitled “Endorsements”. Such a section + may not be included in the Modified Version. + + + + + Do not retitle any existing section to be Entitled + “Endorsements” or to conflict in title with any Invariant + Section. + + + + + Preserve any Warranty Disclaimers. + + + + + If the Modified Version includes new front-matter sections or appendices + that qualify as Secondary Sections and contain no material copied from the + Document, you may at your option designate some or all of these sections + as invariant. To do this, add their titles to the list of Invariant + Sections in the Modified Version’s license notice. These titles + must be distinct from any other section titles. + + + You may add a section Entitled “Endorsements”, provided it + contains nothing but endorsements of your Modified Version by various + parties — for example, statements of peer review or that the text + has been approved by an organization as the authoritative definition of a + standard. + + + You may add a passage of up to five words as a Front-Cover Text, and a + passage of up to 25 words as a Back-Cover Text, to the end of the list of + Cover Texts in the Modified Version. Only one passage of Front-Cover Text + and one of Back-Cover Text may be added by (or through arrangements made + by) any one entity. If the Document already includes a cover text for the + same cover, previously added by you or by arrangement made by the same + entity you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous publisher + that added the old one. + + + The author(s) and publisher(s) of the Document do not by this License give + permission to use their names for publicity for or to assert or imply + endorsement of any Modified Version. + + + 5. COMBINING DOCUMENTS + + + You may combine the Document with other documents released under this + License, under the terms defined in section 4 above for modified versions, + provided that you include in the combination all of the Invariant Sections + of all of the original documents, unmodified, and list them all as + Invariant Sections of your combined work in its license notice, and that + you preserve all their Warranty Disclaimers. + + + The combined work need only contain one copy of this License, and multiple + identical Invariant Sections may be replaced with a single copy. If there + are multiple Invariant Sections with the same name but different contents, + make the title of each such section unique by adding at the end of it, in + parentheses, the name of the original author or publisher of that section + if known, or else a unique number. Make the same adjustment to the section + titles in the list of Invariant Sections in the license notice of the + combined work. + + + In the combination, you must combine any sections Entitled + “History” in the various original documents, forming one + section Entitled “History”; likewise combine any sections + Entitled “Acknowledgements”, and any sections Entitled + “Dedications”. You must delete all sections Entitled + “Endorsements”. + + + 6. COLLECTIONS OF DOCUMENTS + + + You may make a collection consisting of the Document and other documents + released under this License, and replace the individual copies of this + License in the various documents with a single copy that is included in + the collection, provided that you follow the rules of this License for + verbatim copying of each of the documents in all other respects. + + + You may extract a single document from such a collection, and distribute + it individually under this License, provided you insert a copy of this + License into the extracted document, and follow this License in all other + respects regarding verbatim copying of that document. + + + 7. AGGREGATION WITH INDEPENDENT WORKS + + + A compilation of the Document or its derivatives with other separate and + independent documents or works, in or on a volume of a storage or + distribution medium, is called an “aggregate” if the copyright + resulting from the compilation is not used to limit the legal rights of + the compilation’s users beyond what the individual works + permit. When the Document is included in an aggregate, this License does + not apply to the other works in the aggregate which are not themselves + derivative works of the Document. + + + If the Cover Text requirement of section 3 is applicable to these copies + of the Document, then if the Document is less than one half of the entire + aggregate, the Document’s Cover Texts may be placed on covers that + bracket the Document within the aggregate, or the electronic equivalent of + covers if the Document is in electronic form. Otherwise they must appear + on printed covers that bracket the whole aggregate. + + + 8. TRANSLATION + + + Translation is considered a kind of modification, so you may distribute + translations of the Document under the terms of section 4. Replacing + Invariant Sections with translations requires special permission from + their copyright holders, but you may include translations of some or all + Invariant Sections in addition to the original versions of these Invariant + Sections. You may include a translation of this License, and all the + license notices in the Document, and any Warranty Disclaimers, provided + that you also include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of this + License or a notice or disclaimer, the original version will prevail. + + + If a section in the Document is Entitled “Acknowledgements”, + “Dedications”, or “History”, the requirement + (section 4) to Preserve its Title (section 1) will typically require + changing the actual title. + + + 9. TERMINATION + + + You may not copy, modify, sublicense, or distribute the Document except as + expressly provided under this License. Any attempt otherwise to copy, + modify, sublicense, or distribute it is void, and will automatically + terminate your rights under this License. + + + However, if you cease all violation of this License, then your license + from a particular copyright holder is reinstated (a) provisionally, unless + and until the copyright holder explicitly and finally terminates your + license, and (b) permanently, if the copyright holder fails to notify you + of the violation by some reasonable means prior to 60 days after the + cessation. + + + Moreover, your license from a particular copyright holder is reinstated + permanently if the copyright holder notifies you of the violation by some + reasonable means, this is the first time you have received notice of + violation of this License (for any work) from that copyright holder, and + you cure the violation prior to 30 days after your receipt of the notice. + + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under this + License. If your rights have been terminated and not permanently + reinstated, receipt of a copy of some or all of the same material does not + give you any rights to use it. + + + 10. FUTURE REVISIONS OF THIS LICENSE + + + The Free Software Foundation may publish new, revised versions of the GNU + Free Documentation License from time to time. Such new versions will be + similar in spirit to the present version, but may differ in detail to + address new problems or concerns. See + Copyleft. + + + Each version of the License is given a distinguishing version number. If + the Document specifies that a particular numbered version of this License + “or any later version” applies to it, you have the option of + following the terms and conditions either of that specified version or of + any later version that has been published (not as a draft) by the Free + Software Foundation. If the Document does not specify a version number of + this License, you may choose any version ever published (not as a draft) + by the Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy’s public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + + 11. RELICENSING + + + “Massive Multiauthor Collaboration Site” (or “MMC + Site”) means any World Wide Web server that publishes copyrightable + works and also provides prominent facilities for anybody to edit those + works. A public wiki that anybody can edit is an example of such a + server. A “Massive Multiauthor Collaboration” (or + “MMC”) contained in the site means any set of copyrightable + works thus published on the MMC site. + + + “CC-BY-SA” means the Creative Commons Attribution-Share Alike + 3.0 license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license published + by that same organization. + + + “Incorporate” means to publish or republish a Document, in + whole or in part, as part of another Document. + + + An MMC is “eligible for relicensing” if it is licensed under + this License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently incorporated in + whole or in part into the MMC, (1) had no cover texts or invariant + sections, and (2) were thus incorporated prior to November 1, 2008. + + + The operator of an MMC Site may republish an MMC contained in the site + under CC-BY-SA on the same site at any time before August 1, 2009, + provided the MMC is eligible for relicensing. + + + ADDENDUM: How to use this License for your documents + + + To use this License in a document you have written, include a copy of the + License in the document and put the following copyright and license + notices just after the title page: + + Copyright © YEAR YOUR NAME + +Permission is granted to copy, distribute and/or modify this document under the +terms of the GNU Free Documentation License, Version 1.3 or any later version +published by the Free Software Foundation; with no Invariant Sections, no +Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in +the section entitled “GNU Free Documentation License”. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the “with… Texts.” line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts +being LIST, and with the Back-Cover Texts being LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of free + software license, such as the GNU General Public License, to permit their + use in free software. + + diff -rN -u old-doc/introduction.docbook new-doc/introduction.docbook --- old-doc/introduction.docbook 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/introduction.docbook 1970-01-01 01:00:00.000000000 +0100 @@ -1,83 +0,0 @@ - - - -Introduction - - CL-Smoke provides CLOS bindings for the Qt and KDE libraries. - -
Related - - - CommonQt (No CLOS, no startup overhead) - - Lisp-CFFI-Qt4 (dead) - -
-
Limitations - - Bad multithreaded performance - due to a lock for the global hash-tables. - No C++ style argument conversion. - No custom overloading methods by argument count. - Limited conversions. E.g. QList<T> is missing. - - 10 seconds startup time (for qt.examples) on a - Pentium M 1.7GHz. (Compilation ~20 seconds) - Needs to be recompiled when the Smoke library is updated. - Saving a core image is not supported. - Does not recover well from errors - Thus you often need to restart the Lisp process - during interactive developement.. - -
-
Installation -
Dependencies - - Smoke2 - bindings 4.2 or later - Qt - (development package) - - CMake 2.6 - - a make program (preferably Gnu Make) - a C++ compiler (GCC) - - -On the Lisp side you need mudballs -and sysdef.cmake. - -
- -
Supported Platforms - - SBCL on Linux x86 in works; - CMUCL - Compiles and loads, still some unit test failtures - and - CLISP currently do not. - It should be possible to get it to work (with SBCL) on - other platforms. Contact me if you have any questions. - -
-
Installation - - You need to checkout the darcs repositories: - -cd SOME_DIR -for r in smoke qt qt.test qt.tests qt.examples qt.uitools qt.webkit kde kde.tests kde.examples; do - darcs get "http://tobias.rautenkranz.ch/lisp/cl-smoke/$r" -done - - Then add the directory SOME_DIR to the mudballs search paths by adding - -(push (wildcard-searcher "SOME_DIR/*/*.mbd") - *custom-search-modules*) - - to ~/.mudballs. - -
-
-
diff -rN -u old-doc/introduction.xml new-doc/introduction.xml --- old-doc/introduction.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/introduction.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,129 @@ + + + +Introduction + + CL-Smoke provides CLOS bindings for the Qt and KDE libraries. + +
Related + + + CommonQt (No CLOS, no startup overhead) + + Lisp-CFFI-Qt4 (dead) + +
+
Limitations + + Ownership transfer to / from C++ of non QObject objects is seldom known to cl-smoke. + E.g.: cl-smoke might delete an instance even though it is still needed by C++. + (One that is known is QUndoStack::push().) + + Limited conversions to and from C++. You will get an NO-APPLICABLE-CXX-METHOD error + when a Lisp to C++ conversion is missing and a pointer will be returned when there is no C++ to Lisp + conversion. + + 6 seconds startup time + + Using a core image it is around 1 second. + (see ) + + (for qt.examples) on a + Pentium M 1.7GHz. + Needs to be recompiled when the Smoke library is updated. + Could be faster + +
Performance + +Method calling is near 3000 times slower than native C++. The overhead is mainly in the overload +resolution and to/from foreign object translation. Some measurements by +:cl-smoke.benchmark +are in +benchmark.pdf. + +
+
+
Installation +
Dependencies + + Smoke2 + bindings from svn. + + The new smokegenerator is needed (developed by Arno Rehn for the GSOC 09). + + + Qt + (development package) + + CMake 2.6 + + a C++ compiler (GCC) + + + +alexandria +bordeaux-threads +cffi +closer-mop +trivial-garbage + + +
+ +
Supported Platforms +
Working + + + SBCL on Linux x86 (and x86_64) + + + Clozure CL on Linux x86. + + +
+
Not Working + + + CMUCL + + + CLISP + + +
+
+
Installation + + You need to checkout the darcs repositories: + +cd SOME_DIR +for r in smoke qt.core qt.gui qt.network qt.test qt.tests qt.examples qt.uitools qt.webkit qt.phonon; do + darcs get "http://tobias.rautenkranz.ch/lisp/cl-smoke/$r" +done + + + + There are also the following repositories: qt.svg qt.dbus kde.core kde.ui kde.tests kde.examples + + + + + Build and install the :smoke and :qt.core C wrapper libraries with: + + cmake ./ && make && sudo make install + + in the smoke/ and qt/ directories. + + + When you have symlinked the .asd system files, you + should be able to load the systems. The system name has a + :cl-smoke. prefix. e.g.: + + (asdf:oos 'asdf:load-op :cl-smoke.qt.examples) + + +
+
+
diff -rN -u old-doc/kde.docbook new-doc/kde.docbook --- old-doc/kde.docbook 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/kde.docbook 1970-01-01 01:00:00.000000000 +0100 @@ -1,64 +0,0 @@ - - - -KDE - -Besides the :kde package there -is :kde.tests for the unit tests and -:kde.examples containing the examples. - - -
Examples - -The examples can be run with: - -(mb:load :kde.examples) - -An the running the function of the example; e.g.: - -(kde.examples:mandelbrot) - - - -Hello World - - - - - - - - - - - - - -KMandelbrot - - - - - - - - - A port of the - - Qt Mandelbrot example to KDE. -
- -The Mandelbrot example shows how to use a worker thread to perform heavy computations without blocking the main thread's event loop. - -
- The sources can be found in the - src/mandelbrot/ - directory of the :kde.examples package - -
-
-
- -
diff -rN -u old-doc/kde.xml new-doc/kde.xml --- old-doc/kde.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/kde.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,68 @@ + + + +KDE + +To use the KDE libraries use the :cl-smoke.kde.ui +(Depends on :cl-smoke.kde.core). + + +Besides these packages there +is :kde.tests for the unit tests and +:kde.examples containing the examples. + + +
Examples + +The examples can be run with: + +(asdf:oos 'asdf:load-op :cl-smoke.kde.examples) + +And then running the function of the example; e.g.: + +(kde.examples:mandelbrot) + + + +Hello World + + + + + + + + + + + + + +KMandelbrot + + + + + + + + + A port of the + + Qt Mandelbrot example to KDE. +
+ +The Mandelbrot example shows how to use a worker thread to perform heavy computations without blocking the main thread's event loop. + +
+ The sources can be found in the + src/mandelbrot/ + directory of the :kde.examples package + +
+
+
+ +
diff -rN -u old-doc/link-apidoc.xsl new-doc/link-apidoc.xsl --- old-doc/link-apidoc.xsl 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/link-apidoc.xsl 2014-10-30 08:30:27.000000000 +0100 @@ -1,4 +1,29 @@ + + diff -rN -u old-doc/lisp-hl.xml new-doc/lisp-hl.xml --- old-doc/lisp-hl.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/lisp-hl.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,167 @@ + + + + + call-next-method + do-external-symbols + do + do* + eval-when + handler-bind + handler-case + in-package + let* + multiple-value-bind + restart-bind + restart-case + return-from + signal + unwind-protect + + + + + + assert + block + case + catch + ccase + cerror + check-type + declaim + declare + defclass + defconstant + defgeneric + define-condition + defmacro + defmethod + defpackage + defparameter + defstruct + deftype + defun + defvar + dolist + dotimes + ecase + error + flet + go + if + labels + lambda + let + loop + proclaim + prog1 + prog2 + progn + progv + return + tagbody + throw + typecase + unless + warn + when + + + + + + (?<=\()(\S+[:])?(with-\S+) + + + + + + #| + |# + + + + ; + + + + + " + + + + + + (?<=[ \(])(:[^\s\)]+) + + + + + + &allow-other-keys + &aux + &body + &environment + &key + &optional + &rest + &whole + + + + + + + + + (?<=defclass\s)(\S+) + + CASE_INSENSITIVE + + + + (?<=defun\s)(\S+) + + + + + (?<=defmacro\s)(\S+) + + + + + (?<=defgeneric\s)(\S+) + + + + + (?<=defmethod\s)(\S+) + + + + + (?<=defvar\s)(\S+) + + + + + (?<=defparameter\s)(\S+) + + + + + (?<=defconstant\s)(\S+) + + + + + (?<=defstruct\s)(\S+) + + + + + (?<=define-condition\s)(\S+) + + + diff -rN -u old-doc/manual.docbook new-doc/manual.docbook --- old-doc/manual.docbook 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/manual.docbook 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ - - - %link-api; - ]> - - - -CL-Smoke - - -Tobias -Rautenkranz -mail #\@ tobias #\. rautenkranz #\. ch - - - - -2009 -Tobias Rautenkranz - -FDL -2009-03-25 -0.0.1 - - -Common Lisp bindings for Qt and KDE using Smoke. - - - - - - - - - - diff -rN -u old-doc/manual.xml new-doc/manual.xml --- old-doc/manual.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/manual.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,47 @@ + + + %link-api; + ]> + + + +CL-Smoke + + +Tobias +Rautenkranz +mail #\@ tobias #\. rautenkranz #\. ch + + + + +2009 +Tobias Rautenkranz + + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 +or any later version published by the Free Software Foundation; +with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. +A copy of the license is included in the section entitled "GNU +Free Documentation License". + +2009-03-25 +0.0.1 + + +Common Lisp bindings for Qt and KDE using Smoke. + + + + + + + + + + + + diff -rN -u old-doc/manual.xsl new-doc/manual.xsl --- old-doc/manual.xsl 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/manual.xsl 2014-10-30 08:30:27.000000000 +0100 @@ -2,7 +2,13 @@ - - + + + + + + + + diff -rN -u old-doc/nonlink-apidoc.xsl new-doc/nonlink-apidoc.xsl --- old-doc/nonlink-apidoc.xsl 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/nonlink-apidoc.xsl 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + Binary files old-doc/origami.ogg and new-doc/origami.ogg differ Binary files old-doc/origami.png and new-doc/origami.png differ diff -rN -u old-doc/qt.docbook new-doc/qt.docbook --- old-doc/qt.docbook 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/qt.docbook 1970-01-01 01:00:00.000000000 +0100 @@ -1,174 +0,0 @@ - - - -Qt - -Besides the :qt there are these packages: with - - - :qt.uitools - - QtUiTools - :qt.test - - QtTest - :qt.webkit - - QtWebKit - - -which provide bindings for their Qt module. -Additionally there is the :qt.tests system, containing -the unit tests and :qt.examples for various examples. - - -
qt:application - -The qt:application object should created with: -qt:with-app. In its body the event loop can be -started with qt:exec. - - -Hello World - - - - - - - - - - - -
- -
Signal-Slot - -qt:connect connects a signal to a slot. -The signal is either a qt:qsignal created with -qt:make-signal or a C++ signal by using -qt:get-signal. -The slot can be a slot returned by qt:make-slot, a function -or a C++ slot a return from qt:get-slot. - -Quit - - - - - -When the argument types for a slot or signal are not specified they are determined when -the first connection is made. Note that when connecting a qt:qsignal -to a qt:qslot at least one must have its arguments types specified. - - - -The functionality of the Qt SIGNAL and SLOT macros is -provided by qt:qsignal and qt:qslot. - -
- -
Properties - -qt:object properties can be accessed with -qt:property (setf-able). -The name of the property can be either a string in C++ style or a symbol in Lisp style. - - - -(let ((object (make-instance 'qt:object))) - (setf (qt:property object 'object-name) "Foo") - (assert (string= "Foo" (qt:property object "objectName")))) - - - -
- - -
i18n - -You can use qt:tr to translate strings. - - -i18n Hello World - - - - - - - - - - - - - -<filename>hello-world_de.po</filename> - - - - - - - - - -Gettext is used to extract the i18n strings and compile the message catalog. -See CMakeLists.txt -and UseClQti18n.cmake -in the src directory of :qt.examples how to do this. - -
- -
Examples - -You can run the examples with: - -(mb:load :qt.examples) -(qt.examples:launcher) - - - - -Repl - -Use a qt:string-list-model with a qt:list-view -to show evaluated lisp expressions. - - - - - - - - - - - - - - -Class Browser -Qt Classes browser using :qt.webkit to display the -API doc and a custom qt:list-model -for the qt:list-view of the available classes. - - - - - - - - - - - - - -
- -
diff -rN -u old-doc/qt.xml new-doc/qt.xml --- old-doc/qt.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/qt.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,248 @@ + + + +Qt + +Besides the :cl-smoke.qt.gui there are these modules: + + + :cl-smoke.qt.uitools + + QtUiTools + :cl-smoke.qt.test + + QtTest + :cl-smoke.qt.webkit + + QtWebKit + + :cl-smoke.qt.phonon + + Phonon + + :cl-smoke.qt.network + The network classes of Qt. + + :cl-smoke.qt.core + the nogui Qt core. + + +which provide bindings for their Qt module. The class names of this modules are in +the :qt package. (E.g. Phonon::VideoPlayer is 'qt:phonon.video-player +and QTest is 'qt:test) + + +Additionally there is the :cl-smoke.qt.tests system, containing +the unit tests and :cl-smoke.qt.examples for various examples. + + +
qt:application + +The qt:application object should created with: +qt:with-app. In its body the event loop can be +started with qt:exec. + + +Hello World + + + + + + + + + + + + +Subclasses of qt:paint-device (e.g. qt:widget) can only be used when +a qt:application instance exists. When there are, for example, qt:widget instances +at the end of qt:with-app, they are deleted by the qt:application destructor. + + +Custom cxx:paint-event methods can use qt:with-painter +to ensure that the qt:painter is deactivated at the end of the method. + + +
Interactive Development + +The :cl-smoke.repl allows you to start a qt:application event loop in the background for +interactive development in SLIME. +To start the event loop use cl-smoke.repl:start-event-loop-in-background (or +cl-smoke.repl:start-event-loop-in-repl). + + +Currently START-EVENT-LOOP-IN-BACKGROUND is recommended. + + +As long as you do not kill the thread or unwind over a foreign function, you should be fine. + +
+
+ +
Signal-Slot + +qt:connect connects a signal to a slot. +The signal is either a qt:qsignal created with +qt:make-signal or a C++ signal by using +qt:get-signal. +The slot can be a slot returned by qt:make-slot, a function +or a C++ slot a return from qt:get-slot. + +Quit + + + + + +When the argument types for a slot or signal are not specified they are determined when +the first connection is made. Note that when connecting a qt:qsignal +to a qt:qslot at least one must have its arguments types specified. Type specifier T +allows to pass a Lisp object as is from a Lisp signal to a Lisp slot. + + + +The functionality of the Qt SIGNAL and SLOT macros is +provided by qt:qsignal and qt:qslot. + +
+ +
Properties + +qt:object properties can be accessed with +qt:property (setf-able). +The name of the property can be either a string in C++ style or a symbol in Lisp style. +The predefined Qt properties can be accessed with symbols in the keyword package. + + + +(let ((object (make-instance 'qt:object))) + (setf (qt:property object :object-name) "Foo") + (assert (string= "Foo" (qt:property object "objectName")))) + + + +
+ +
Variant + +A qt:variant can be constructed with qt:make-variant +or to pass a Lisp object with qt:make-lisp-variant. +Its value is returned by qt:value. + +
+ +
i18n + +You can use qt:tr to translate strings. + + +i18n Hello World + + + + + + + + + + + + + +<filename>hello-world_de.po</filename> + + + + + + + + + +Gettext is used to extract the i18n strings and compile the message catalog. +See CMakeLists.txt +and UseClQti18n.cmake +in the src/ directory of :cl-smoke.qt.examples on how to do this. + +
+ +
Examples + +You can run the examples with: + +(asdf:oos 'asdf:load-op :cl-smoke.qt.examples) +(qt.examples:launcher) + + + + +Repl + +Use a qt:string-list-model with a qt:list-view +to show evaluated lisp expressions. + + + + + + + + + + + + + + +Class Browser +Qt Classes browser using :cl-smoke.qt.webkit to display the +API doc and a custom qt:list-model +for the qt:list-view of the available classes. + + + + + + + + + + + + + +
+ +
OpenGL + +For OpenGL a binding is needed (e.g.: +cl-opengl). + +Origami + +Origami +draws a pleated hyperbolic paraboloid using the method described in +(Non)existence of Pleated Folds: How Paper Folds Between Creases + + + + + + + + + +Axiom is needed to generate the lisp source to that +calculates the vertices. + + + + +
+ +
diff -rN -u old-doc/smoke.docbook new-doc/smoke.docbook --- old-doc/smoke.docbook 2014-10-30 08:30:27.000000000 +0100 +++ new-doc/smoke.docbook 1970-01-01 01:00:00.000000000 +0100 @@ -1,131 +0,0 @@ - - - -Usage - -
Symbols - -C++ names are converted to Lisp symbols by converting camelCase -to camel-case. Underscores #\_ are replaced with -#\- and a leading uppercase K or Q is removed. - - -E.g.: QHelloWorld_foo becomes hello-world-foo. - -
- -
Class - -C++ classes have a corresponding CLOS class. The can be used like any CLOS class; E.g: -to make a QObject instance: - - -(make-instance 'qt:object) - - -Suppy arguments as list to the :args keyword: - - -(let ((parent (make-instance 'qt:object))) - (make-instance 'qt:object :args (list parent))) - - - - -To extend a C++ class you have to use cxx:class as metaclass: - - -(defclass my-object (qt:object) - () - (:metaclass cxx:class)) - - - -
- -
Methods - -C++ methods are generic functions in the :cxx package. - - -The C++ method call: myInstance->frob(1); is in Lisp: - -(frob my-instance 1) - - - -You can extend the :cxx generic functions by -adding methods. :around, :before, :after -and (call-next-method) are supported. - - -(defclass the-object-does-nothing (qt:object) - () - (:metaclass cxx:class)) - -(defmethod cxx:timer-event ((object the-object-does-nothing) event) - (declare (ignore object event)) - (call-next-method)) - - - -:cxx generic functions can be overload by argument count. Lambda list -keywords (e.g.: &rest and &key) are not supported. - - -Make sure you have the right number of arguments when adding a method; otherwise it will -not be called. - -
- -
Static Methods - -The static C++ method QByteArray::number(int n, int base=10) -can be called by: - -(qt:byte-array.number 37) - -which is equivalent to the C++ code QByteArray::number(37);. -Or with: - -(cxx:number (find-class 'qt:byte-array) 37) - - - -
- -
Constants - - C++ Class enums available as constants. E.g.: - QColor::Rgb is qt:color.+rgb+. - See :cxx-support. - -
- -
Garbage Collection - -You should be able to use C++ Class instances like normal Lisp object. - - -C++ classes are automatically deleted when their lisp object gets garbage collected; -except when they (QObjects) have a parent and thus the parent is responsible for -their deletion. When a qt:object has a parent, a strong -reference is kept to prevent its garbage collection until the parent is deleted. - - - -An instance may depend on an other one. -It is a bad idea to do something like this: - -(defvar *meta* (cxx:meta-object (make-instance 'qt:object))) - -*meta* references a qt:meta-class -that can become invalid at any time, since the qt:object instance can -be garbage collected, and then the QMetaObject instance is deleted along -with the QObject. - - -
- -
diff -rN -u old-doc/smoke.xml new-doc/smoke.xml --- old-doc/smoke.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/smoke.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,294 @@ + + + +Usage + +
Symbols + +C++ names are converted to Lisp symbols by converting camelCase +to camel-case. Underscores #\_ are replaced with +#\- and a leading uppercase K or Q is removed. + + + +E.g.: QHelloWorld_foo becomes hello-world-foo. + + +
+ +
Class + +C++ classes have a corresponding CLOS class. The can be used like any CLOS class; E.g: +to make a QObject instance: + + +(make-instance 'qt:object) + + +Supply arguments as list to the :args keyword: + + +(let ((parent (make-instance 'qt:object))) + (make-instance 'qt:object :args (list parent))) + + +or use :arg0, :arg1 and :arg2. + + +(let ((parent (make-instance 'qt:object))) + (make-instance 'qt:object :arg0 parent)) + + + + +To extend a C++ class you have to use cxx:class as metaclass: + + +(defclass my-object (qt:object) + () + (:metaclass cxx:class)) + +(make-instance 'my-object) + + +The first superclass must be a Smoke class. When you define a class that has several Smoke superclasses, +they will be constructed with their default constructor. For the first Smoke superclass you can supply arguments +with the :args and :arg0 etc. keywords. + + +(defclass my-graphics-object (qt:object qt:graphics-item) + () + (:metaclass cxx:class)) + + + +
+ +
Methods + +C++ methods are generic functions in the :cxx package. + + +The C++ method call: myInstance->frob(1); is in Lisp: + +(frob my-instance 1) + + +
Overload Resolution + +C++ style overload resolution with conversion sequences is supported. For example this: + + +(cxx:set-pen (make-instance 'qt:painter) (make-instance 'qt:color :args '("green"))) + + +is equivalent to: + + +(cxx:set-pen (make-instance 'qt:painter) "green") + + +In the second case a temporary qt:color instance is implicitly created. + +
+ +
Setter Methods + +Instead of calling a setter method that takes no additional arguments, + + +(cxx:set-object-name (make-instance 'qt:object) "foo") + + +you can use its setfable getter. + + +(setf (cxx:object-name (make-instance 'qt:object)) "foo") + + + +
+ +
<code>defmethod</code> + +You can extend the :cxx generic functions by +adding methods. :around, :before, :after +and (call-next-method) are supported. + + +(defclass the-object-does-nothing (qt:object) + () + (:metaclass cxx:class)) + +(defmethod cxx:timer-event ((object the-object-does-nothing) event) + (declare (ignore object event)) + (call-next-method)) + + + +:cxx generic functions can be overload by argument count. Lambda list +keywords (e.g.: &rest and &key) are not supported. + + +Make sure you have the right number of arguments when adding a method; otherwise it will +not be called. + + +The arguments of the method might have dynamic extend; i.e.: they are only valid in the body of the method. + +
Condition + +Unwinding of the C++ stack is not supported. This means that you must not invoke a restart that skips any foreign function. +You will most likely encounter this problem when an error is signaled in a virtual method you have overwritten. + + +For example an event handler that is called from the C++ library. + +. For this case restarts are provide that allow to return a value for the failed method, +call the default C++ implementation instead (something like #'call-next-method) or retry. + +
+
+
Operators + +Instead of using the various cxx:operator methods you can use their Lisp equivalent +in the :cxx package. + +cxx:> +cxx:>= + + +cxx:= +cxx:/= + + +cxx:<= +cxx:< + + +cxx:+ +cxx:- +cxx:* +cxx:/ +cxx:1+ +cxx:1- + + +cxx:incf +cxx:decf + + +cxx:aref + + +
+
+ +
Static Methods + +The static C++ method QByteArray::number(int n, int base=10) +can be called by: + +(qt:byte-array.number 37) + +which is equivalent to the C++ code QByteArray::number(37);. +Or with: + +(cxx:number (find-class 'qt:byte-array) 37) + +or: + +(cxx:number (make-instance 'qt:byte-array) 37) + + +
+ +
Constants + + C++ Class enums available as constants. E.g.: + QColor::Rgb is qt:color.+rgb+. + See :cxx-support. + +
+ +
Member variables + +C++ member variables of an instance can be accessed by using slot-value; e.g.: + +(slot-value (make-instance 'qt:object) :static-meta-object) + +or + +(slot-value (find-class 'qt:object) :static-meta-object) + +Usually they can also be accessed using methods from the :cxx package. + +
+ +
Garbage Collection + +You should be able to use C++ Class instances like normal Lisp object. + + +C++ classes are automatically deleted when their Lisp object gets garbage collected; +except when they (QObjects) have a parent and thus the parent is responsible for +their deletion. When a qt:object has a parent, a strong +reference is kept to prevent the garbage collection removing it until the parent is deleted. + + + + Ownership transfer for non QObject instances is mostly unimplemented. + + +
+ +
Saving a Core Image + +For near instant startup you can save an image. Since saving C++ instances is not supported, +it is best to save the image immediately after loading the packages. + + + +Initializing the Smoke bindings when the image is loaded is implementation dependent. It is implemented +for SBCL and Clozure CL. + + +
SBCL +To save an image in SBCL you can use: +sb-ext:save-lisp-and-die + + +
Bundle + +To create a bundle containing an SBCL image and the required C wrappers libraries you can use +smoke:save-bundle. +The bundle is created using makeself. +See +make-bundle.sh in :qt.examples for an example. + +
+
+ +
Clozure CL + +To save an image in CCL + +ccl:save-application is usually used. + + + +To allow the image to find the C wrapper libraries, they have to be installed with: + + +sudo make install + + +run in the smoke/ and qt/ directory. + + +
+ +
+ +
diff -rN -u old-doc/video.xsl new-doc/video.xsl --- old-doc/video.xsl 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/video.xsl 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,27 @@ + + + + + + + + + diff -rN -u old-doc/xslthl-config.xml new-doc/xslthl-config.xml --- old-doc/xslthl-config.xml 1970-01-01 01:00:00.000000000 +0100 +++ new-doc/xslthl-config.xml 2014-10-30 08:30:27.000000000 +0100 @@ -0,0 +1,5 @@ + + + + +