|
NeoLight
From NeoWiki
Revision as of 06:20, 29 April 2005 (edit) Sardisson (Talk | contribs) m ((Using NeoLight to Index OpenOffice.org Documents) fix a typo and->if) ← Previous diff |
Current revision (17:10, 11 January 2009) (edit) (undo) Yakusha ( | contribs) (adding link to Dutch version) |
||
(59 intermediate revisions not shown.) | |||
Line 1: | Line 1: | ||
=NeoLight= | =NeoLight= | ||
+ | [[image:Neolight.gif|NeoLight]] | ||
+ | |||
Edward Peterlin | Edward Peterlin | ||
- | 4/29/05 | ||
- | + | Authored: 4/29/05 | |
- | + | Revised: 6/22/07 | |
- | + | ==What is NeoLight?== | |
- | + | NeoLight is an abbreviation I've come up with for "NeoOffice Spotlight Importer". This importer allows [http://www.apple.com/macosx/features/spotlight/ Spotlight] to index metadata and content within the files created by NeoOffice. Through Spotlight integration, searching across multiple NeoOffice documents can be done in a nice, Mac-like fashion. | |
- | + | ||
- | + | ||
- | + | ||
==Licensing== | ==Licensing== | ||
- | NeoLight is | + | NeoLight is released under the GNU General Public License. It is our opinion that GPL does not extend to the operating system as GPL contains exceptions for code utilizing standard operating system services. |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
==Downloading== | ==Downloading== | ||
- | The NeoLight plugin | + | The NeoLight plugin is included by default for all NeoOffice installers. NeoLight updates will be made available with the next NeoOffice patch following the release of a new version of NeoLight. |
- | + | The NeoLight plugin is no longer available as a download separate from the NeoOffice application. Using the standalone installer can conflict with updates distributed through the NeoOffice patching mechanism. The version of Spotlight in Mac OS X 10.4 is not designed well to handle multiple versions of the same Spotlight indexing plugin in mulitple locations, or multiple plugins that claim to handle the same file type. This may change in the future. | |
- | + | ||
- | + | ||
- | + | If you have downloaded NeoOffice 2.x, you already have the Spotlight indexing plugin. | |
- | + | * Latest Version : 1.1.6 | |
- | * | + | * Last updated 6/21/07 |
- | * | + | ** ''most recent update for Leopard support'' |
==Installing== | ==Installing== | ||
- | + | Throughout its system, Spotlight identifies files by [http://arstechnica.com/reviews/os/macosx-10.4.ars/11 UTI] types. Because Mac OS X does not have built-in types for OpenOffice.org formatted files, they must be defined by an installed application to avoid having Spotlight assign them dynamically-generated UTI types (which cannot reliably be mapped to a Spotlight importer). | |
- | + | NeoLight assumes the following UTI types correspond to the following file types: | |
- | + | * org.neooffice.writer - Writer "sxw" files and "stw" templates | |
+ | * org.neooffice.calc - Calc "sxc" files and "stc" templates | ||
+ | * org.neooffice.impress - Impress "sxi" files and "sti" templates | ||
+ | * org.neooffice.draw - Draw "sxd" files and "std" templates (hehe) | ||
+ | * org.oasis.opendocument.text - OpenDocument Text files "odt" and templates "ott" | ||
+ | * org.oasis.opendocument.graphics - OpenDocument Graphics files "odg" and templates "otg" | ||
+ | * org.oasis.opendocument.presentation - OpenDocument Presentation files "odp" and templates "otp" | ||
+ | * org.oasis.opendocument.spreadsheet - OpenDocument Spreadsheet files "ods" and templates "ots" | ||
+ | * org.oasis.opendocument.database - OpenDocument Databaes files "odb" | ||
- | + | The 1.1 plugin release will define these UTI mappings within the Info.plist of the importer plugin. | |
- | NeoLight | + | NeoLight is automatically installed with NeoOffice. |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
===Testing Your Installation=== | ===Testing Your Installation=== | ||
Line 162: | Line 52: | ||
If you have the Tiger Developer's Tools installed, you can verify proper loading of the plugin from a Terminal after installation using the following command: | If you have the Tiger Developer's Tools installed, you can verify proper loading of the plugin from a Terminal after installation using the following command: | ||
- | + | <pre>/usr/bin/mdimport -L</pre> | |
- | You should see | + | You should see '''/Library/Spotlight/neolight.mdimporter''' in the list if all has been installed well. |
- | To | + | To verify that installation was successful: |
- | # Launch NeoOffice | + | # Launch '''NeoOffice''' |
# Create a new empty Writer document. | # Create a new empty Writer document. | ||
- | # | + | # Under the '''File''' menu item, choose '''Properties.''' |
- | # Add | + | # Add a '''Title''' for the document with a relatively unused nonsense word (e.g. "interzone") |
- | # Notice that the title from the | + | # Notice that the title from the '''Properties''' dialog appears in the dialog's titlebar. |
- | # Save the | + | # Save the document to a known location with a filename that does not contain your nonsense word. |
# Start a new Spotlight search. | # Start a new Spotlight search. | ||
# Type the nonsense word you used above. | # Type the nonsense word you used above. | ||
- | If the | + | If the NeoLight plugin is installed properly, the document you just saved should show up in the search results. If it doesn't, open a Terminal and type the followng: |
- | + | <pre>/usr/bin/mdimport -d3 /path/to/test/doc.sxw</pre> | |
- | Check to make sure the | + | Check to make sure the document is of type "org.neooffice.writer". If it is, look in the keys for the "Title" key and you should see your nonsense word. If you do, then everything is installed correctly. |
- | If when you type the above the doc is of type "dyn.a3f42morehexgarbageinherefoo" | + | If when you type the above the doc is of type "dyn.a3f42morehexgarbageinherefoo", LaunchServices hasn't mapped the extension to the UTI type properly. Either the update to the '''Info.plist''' is misapplied or you may need to rebuild your LaunchServices database. |
+ | |||
+ | If you want to index several files or directories, you can use the "find"-command. This example let Spotlight index all *sxw-files in your $HOME-directory: | ||
+ | |||
+ | <pre>sudo find -s $HOME -name *sxw -exec /usr/bin/mdimport -d3 {} \;</pre> | ||
+ | |||
+ | If you'd like Spotlight to just re-index all of your NeoOffice documents automatically, just use the following command: | ||
+ | |||
+ | <pre>mdimport -r /Library/Spotlight/neolight.mdimporter</pre> | ||
==What does NeoLight Import?== | ==What does NeoLight Import?== | ||
Line 198: | Line 96: | ||
* textual display content of all cells of a Calc document for indexing | * textual display content of all cells of a Calc document for indexing | ||
* content of bullets, titles, and other text areas for indexing from Impress and Draw documents. | * content of bullets, titles, and other text areas for indexing from Impress and Draw documents. | ||
+ | * for database documents, any standard OOo metadata (optional for database files, apparently) allong with: | ||
+ | ** names of defined forms | ||
+ | ** names of defined tables | ||
+ | ** column names of all tables | ||
Once the NeoLight plugin is installed, it should be possible to search OOo formatted documents by these criteria within Spotlight enabled applications. | Once the NeoLight plugin is installed, it should be possible to search OOo formatted documents by these criteria within Spotlight enabled applications. | ||
+ | |||
+ | ==OpenDocument Compatibility== | ||
+ | |||
+ | Starting with version 1.0.3 (5/7/05), the neolight importer is compatible with both documents generated by NeoOffice/J 0.8.4, NeoOffice/J 1.1, OpenOffice.org 1.x, and OpenOffice.org 2.0 (OpenDocument). While OpenDocument compatibility has not been extensively tested, documents that conform to the approved OpenDocument specification should be compatible. | ||
+ | |||
+ | Version 1.1 (10/2/05) defines UTI types for the OpenDocument o{d,g}* extensions now that the extensions and MIME types have been finalized, so Info.plist editing should no longer be required to start indexing OpenDocument formatted files. | ||
+ | |||
+ | Version 1.1.5 (9/27/06) adds in UTI types and content extraction for OpenDocument database files. | ||
==Using NeoLight to Index OpenOffice.org Documents== | ==Using NeoLight to Index OpenOffice.org Documents== | ||
- | NeoLight is not specific to NeoOffice and can index any OpenOffice.org 1.x formatted document. | + | NeoLight is not specific to NeoOffice and can index any OpenOffice.org 1.x formatted document. Starting with version 1.0.3, no special actions are required to index OpenOffice.org documents besides installing the Neolight plugin. To force reindexing of OOo documents already existing on your computer, you may need to do a find with <tt>mdimport</tt> as noted above. |
==Known Issues== | ==Known Issues== | ||
- | + | * The UTI types are required to be defined before files are manually indexed using mdimport -d3. Files that get indexed prior to the initial installation of the neolight plugin will get the wrong UTI type in the Spotlight metadata database. Although the type tree gets updated to reflect the proper mapping to the org.neooffice types, the raw type remains fixed to the dynamically generated dyn UTI type and the file cannot be indexed. Workaround is to copy the file to a new file and re-index again. | |
- | * The UTI types are required to be defined before files are manually indexed using mdimport -d3. Files that get | + | * Content is being extracted in Unicode16 encoding, where possible. I am unsure if OOo 1.x files can go to different encodings that may cause the parsers to fail. |
- | + | * Having two copies of NeoLight on the same system is A Bad Thingâ„¢ (particularly if one of them is an older copy, e.g. the NeoLight in the NeoOffice 1.1 bundle). This is a limitation of Apple's Spotlight design. | |
- | * Content is being extracted in | + | * Installing any other Spotlight indexing plugin that claims the same UTI types as NeoLight may result in an unknown plugin being used. |
==Getting the Source Code== | ==Getting the Source Code== | ||
Line 224: | Line 134: | ||
cvs co neolight | cvs co neolight | ||
- | This will checkout the neolight module that has the source code for the plugin. Simply open the neolight. | + | This will checkout the neolight module that has the source code for the plugin. Simply open the neolight.xcodeproj project in Xcode 2.1 or later and away you go! |
==Source Code Structure== | ==Source Code Structure== | ||
Line 235: | Line 145: | ||
* impress - Contains functions for SXI file parsing (and SXD) | * impress - Contains functions for SXI file parsing (and SXD) | ||
* main - CFPlugin foundational code and dispatch of metadata extraction to appropriate handler based on UTI type | * main - CFPlugin foundational code and dispatch of metadata extraction to appropriate handler based on UTI type | ||
+ | * base - Contains functions for ODB file parsing. | ||
All of the functions are commented with [http://docpp.sourceforge.net/ Doc++]/JavaDoc style comments, so you should be able to run a documentation generator on the code to browse through it. | All of the functions are commented with [http://docpp.sourceforge.net/ Doc++]/JavaDoc style comments, so you should be able to run a documentation generator on the code to browse through it. | ||
Line 242: | Line 153: | ||
==Issues and Feedback== | ==Issues and Feedback== | ||
- | Please note any issues | + | Please note any issues in [http://bugzilla.neooffice.org/bug.php?op=add&project=2 Bugzilla] or in the [http://trinity.neooffice.org/modules.php?name=Forums&file=viewforum&f=15 NeoLight Development forum] on http://trinity.neooffice.org. |
+ | |||
+ | ==Binary Changelog== | ||
+ | |||
+ | 29.04.2005 ''change install location to /Library/Spotlight'' | ||
+ | |||
+ | 04.05.2005 ''change from UTF-8 to Unicode; change popen command to use double quotes instead of single'' | ||
+ | |||
+ | 07.05.2005 ''modify meta.xml parsing for OpenDocument compatibility; add UTI types to plugin's own Info.plist file'' | ||
+ | |||
+ | 15.05.2005 ''add Apple recommended lsregister command to postflight script of standalone installer'' | ||
+ | |||
+ | 14.06.2005 ''Fix [http://bugzilla.neooffice.org/bug.php?op=show&bugid=845 bug 845] to index header and footer content'' | ||
+ | |||
+ | 02.10.2005 ''Universal Binary support; add UTI types for OpenDocument'' | ||
+ | |||
+ | 27.09.2006 ''OpenDocument Database indexing'' | ||
+ | |||
+ | 21.06.2007 ''Update for compatibility with Leopard Beta'' | ||
+ | |||
+ | {{botlangbarEN|[[nl:NeoLight|Nederlands]]}} | ||
+ | [[Category:NeoLight]][[Category:NeoOffice]][[Category:RetroOffice]][[Category:OpenOffice.org]][[Category:Release Notes]] |
Current revision
NeoLight
Edward Peterlin
Authored: 4/29/05
Revised: 6/22/07
What is NeoLight?
NeoLight is an abbreviation I've come up with for "NeoOffice Spotlight Importer". This importer allows Spotlight to index metadata and content within the files created by NeoOffice. Through Spotlight integration, searching across multiple NeoOffice documents can be done in a nice, Mac-like fashion.
Licensing
NeoLight is released under the GNU General Public License. It is our opinion that GPL does not extend to the operating system as GPL contains exceptions for code utilizing standard operating system services.
Downloading
The NeoLight plugin is included by default for all NeoOffice installers. NeoLight updates will be made available with the next NeoOffice patch following the release of a new version of NeoLight.
The NeoLight plugin is no longer available as a download separate from the NeoOffice application. Using the standalone installer can conflict with updates distributed through the NeoOffice patching mechanism. The version of Spotlight in Mac OS X 10.4 is not designed well to handle multiple versions of the same Spotlight indexing plugin in mulitple locations, or multiple plugins that claim to handle the same file type. This may change in the future.
If you have downloaded NeoOffice 2.x, you already have the Spotlight indexing plugin.
- Latest Version : 1.1.6
- Last updated 6/21/07
- most recent update for Leopard support
Installing
Throughout its system, Spotlight identifies files by UTI types. Because Mac OS X does not have built-in types for OpenOffice.org formatted files, they must be defined by an installed application to avoid having Spotlight assign them dynamically-generated UTI types (which cannot reliably be mapped to a Spotlight importer).
NeoLight assumes the following UTI types correspond to the following file types:
- org.neooffice.writer - Writer "sxw" files and "stw" templates
- org.neooffice.calc - Calc "sxc" files and "stc" templates
- org.neooffice.impress - Impress "sxi" files and "sti" templates
- org.neooffice.draw - Draw "sxd" files and "std" templates (hehe)
- org.oasis.opendocument.text - OpenDocument Text files "odt" and templates "ott"
- org.oasis.opendocument.graphics - OpenDocument Graphics files "odg" and templates "otg"
- org.oasis.opendocument.presentation - OpenDocument Presentation files "odp" and templates "otp"
- org.oasis.opendocument.spreadsheet - OpenDocument Spreadsheet files "ods" and templates "ots"
- org.oasis.opendocument.database - OpenDocument Databaes files "odb"
The 1.1 plugin release will define these UTI mappings within the Info.plist of the importer plugin.
NeoLight is automatically installed with NeoOffice.
Testing Your Installation
If you have the Tiger Developer's Tools installed, you can verify proper loading of the plugin from a Terminal after installation using the following command:
/usr/bin/mdimport -L
You should see /Library/Spotlight/neolight.mdimporter in the list if all has been installed well.
To verify that installation was successful:
- Launch NeoOffice
- Create a new empty Writer document.
- Under the File menu item, choose Properties.
- Add a Title for the document with a relatively unused nonsense word (e.g. "interzone")
- Notice that the title from the Properties dialog appears in the dialog's titlebar.
- Save the document to a known location with a filename that does not contain your nonsense word.
- Start a new Spotlight search.
- Type the nonsense word you used above.
If the NeoLight plugin is installed properly, the document you just saved should show up in the search results. If it doesn't, open a Terminal and type the followng:
/usr/bin/mdimport -d3 /path/to/test/doc.sxw
Check to make sure the document is of type "org.neooffice.writer". If it is, look in the keys for the "Title" key and you should see your nonsense word. If you do, then everything is installed correctly.
If when you type the above the doc is of type "dyn.a3f42morehexgarbageinherefoo", LaunchServices hasn't mapped the extension to the UTI type properly. Either the update to the Info.plist is misapplied or you may need to rebuild your LaunchServices database.
If you want to index several files or directories, you can use the "find"-command. This example let Spotlight index all *sxw-files in your $HOME-directory:
sudo find -s $HOME -name *sxw -exec /usr/bin/mdimport -d3 {} \;
If you'd like Spotlight to just re-index all of your NeoOffice documents automatically, just use the following command:
mdimport -r /Library/Spotlight/neolight.mdimporter
What does NeoLight Import?
NeoLight currently handles all four types of major OOo/NeoOffice documents in a single plugin. It will extract the following:
- standard OOo metadata (generally accessible and editable through File > Properties)
- title
- author/last edited
- keywords
- description
- comments
- text content from Writer documents for indexing
- textual display content of all cells of a Calc document for indexing
- content of bullets, titles, and other text areas for indexing from Impress and Draw documents.
- for database documents, any standard OOo metadata (optional for database files, apparently) allong with:
- names of defined forms
- names of defined tables
- column names of all tables
Once the NeoLight plugin is installed, it should be possible to search OOo formatted documents by these criteria within Spotlight enabled applications.
OpenDocument Compatibility
Starting with version 1.0.3 (5/7/05), the neolight importer is compatible with both documents generated by NeoOffice/J 0.8.4, NeoOffice/J 1.1, OpenOffice.org 1.x, and OpenOffice.org 2.0 (OpenDocument). While OpenDocument compatibility has not been extensively tested, documents that conform to the approved OpenDocument specification should be compatible.
Version 1.1 (10/2/05) defines UTI types for the OpenDocument o{d,g}* extensions now that the extensions and MIME types have been finalized, so Info.plist editing should no longer be required to start indexing OpenDocument formatted files.
Version 1.1.5 (9/27/06) adds in UTI types and content extraction for OpenDocument database files.
Using NeoLight to Index OpenOffice.org Documents
NeoLight is not specific to NeoOffice and can index any OpenOffice.org 1.x formatted document. Starting with version 1.0.3, no special actions are required to index OpenOffice.org documents besides installing the Neolight plugin. To force reindexing of OOo documents already existing on your computer, you may need to do a find with mdimport as noted above.
Known Issues
- The UTI types are required to be defined before files are manually indexed using mdimport -d3. Files that get indexed prior to the initial installation of the neolight plugin will get the wrong UTI type in the Spotlight metadata database. Although the type tree gets updated to reflect the proper mapping to the org.neooffice types, the raw type remains fixed to the dynamically generated dyn UTI type and the file cannot be indexed. Workaround is to copy the file to a new file and re-index again.
- Content is being extracted in Unicode16 encoding, where possible. I am unsure if OOo 1.x files can go to different encodings that may cause the parsers to fail.
- Having two copies of NeoLight on the same system is A Bad Thingâ„¢ (particularly if one of them is an older copy, e.g. the NeoLight in the NeoOffice 1.1 bundle). This is a limitation of Apple's Spotlight design.
- Installing any other Spotlight indexing plugin that claims the same UTI types as NeoLight may result in an unknown plugin being used.
Getting the Source Code
The source code is in the NeoOffice CVS repository. To checkout the source code do the following:
csh setenv CVSROOT :pserver:anoncvs@anoncvs.neooffice.org:/cvs cvs login
use anoncvs as the cvs password
cvs co neolight
This will checkout the neolight module that has the source code for the plugin. Simply open the neolight.xcodeproj project in Xcode 2.1 or later and away you go!
Source Code Structure
In general, the source code is split up into the following files:
- common - These contain utility code used across all the file types and common metadata extraction (all the OpenOffice.org file types have the same meta.xml format)
- writer - Contains functions for SXW file parsing.
- calc - Contains functions for SXC file parsing.
- impress - Contains functions for SXI file parsing (and SXD)
- main - CFPlugin foundational code and dispatch of metadata extraction to appropriate handler based on UTI type
- base - Contains functions for ODB file parsing.
All of the functions are commented with Doc++/JavaDoc style comments, so you should be able to run a documentation generator on the code to browse through it.
While all of the files are technically Objective-C++, no Cocoa is used in the plugin. It is all CoreFoundation based and I'm essentially using the language as a "better C". Since plugins are supposed to be lightweight, it simply made more sense to re-use the CoreFoundation utilities then to make any grand scheme.
Issues and Feedback
Please note any issues in Bugzilla or in the NeoLight Development forum on http://trinity.neooffice.org.
Binary Changelog
29.04.2005 change install location to /Library/Spotlight
04.05.2005 change from UTF-8 to Unicode; change popen command to use double quotes instead of single
07.05.2005 modify meta.xml parsing for OpenDocument compatibility; add UTI types to plugin's own Info.plist file
15.05.2005 add Apple recommended lsregister command to postflight script of standalone installer
14.06.2005 Fix bug 845 to index header and footer content
02.10.2005 Universal Binary support; add UTI types for OpenDocument
27.09.2006 OpenDocument Database indexing
21.06.2007 Update for compatibility with Leopard Beta