Wiki Server Developer
- 0. 1. Introduction
- 0. 2. Information
- 0. 3. Building
- 0. 3. 1. Windows
- 0. 5. Directory Layout
- 0. 6. See also
Introduction
As one might guess, despite being a relatively "simple" application Wiki Server has a ton of functionality, and thus it has some complex code. Originally by Eddie Edwards, version 1.0 was then modified by Michel Van De Wetering for a few features. Then Eddie Edwards made 1.1 beta. A while later Ryan Norton picked up the shovel from 1.0 using Wx Widgets?, a cross-platform library so that it would run on other platforms. He later merged in both Michel Van De Wetering and the 1.1 beta changes.
Information
Wiki Server is in C++, but in general uses only features of C++ from 1994 and earlier and rarely uses templates. Most of the code is relatively quite clean although is perhaps messed up a bit by Ryan Norton :). Actually he got rid of a few security holes, and for 1.6 made it threaded etc.
Building
Current 1.6 builds only build on windows at the moment.
Windows
- Open build/msw/wikiserver.sln with Visual Studio 2005 (Express version available at
should work also)
- Build it :) (All dependencies should be correct in the wikiserver's directory etc.)
Topics
- WikiConfig - This class, Wiki Config, deals with the configuration of wikiserver (the main wikiserver.ini file and the .wkc files)
- DefaultsH - This file contains the default data written out for essential configuration files like Config.wkc if they do not exist
- Array - Generic array class used in the source highlighter
- EmemoryH - Wrappers around memory functions
- ERegEx - Regular expression wrapper for the source highlighter
- Headers - Linked list of HTTP headers (actually used in INI files and other things as well)
- HTag - Class used in wiki parsing representing a wiki element
- HTTPRequest - Translates a HTTP request into a few Headers instances and more
- Page - Represents a wiki page
- PageSet - Radix of pages that are available
- RedBlackTree - Used in the source highlighter
- Server? - A generic server class - also HTTPServer and Wiki Server
- StreamMerger - Class used in Diff
- UtilityH? - Selection of a lot of utility functions
- String - generic string class
- WikiParser - Translates the wiki to HTML
- WikiUser? - represents a user of the wiki
- SourceHighlighter - used to highlight code blocks. Quite crufty.
- OSH - Platform-specific code (although currently also hosts WikiSession?
Directory Layout
".DS_Store"-type files are files left behind by Mac OSX and are in basically every directory.
- / - (Root)
- flip.exe - Utility (http://ccrma.stanford.edu/~craig/utility/flip/) used to convert the newlines of a file
- footer.html - footer when generating doxygen documentation
- header.html - header when generating doxygen documentation
- wikiserver.css - style sheet to use for doxygen documentation
- doxyfile - File used by doxygen for generating the docs. Note that wikiserver just uses its wiki for docs currently, and the paths in this file likely need to be updated.
- license.txt - License for countries that don't recognize public domain
- readme.txt - really short introduction that redirects to this page :)
- /build/bakefiles - Wiki Server uses bakefile (bakefile.sf.net) to generate its makefiles and visual c++ projects
- Bakefiles.bkgen - The master bakefile - points to other bakefiles and tells bakefile what files to generate
- wikiserverwin.bkl - Definitions for the Visual C++ 6 project file in build/msw (out of date)
- wikiserverunix.bkl - Definitions for the unix version (out of date)
- wikiservermac.bkl - Definitions for the DARWIN/Mac OS X port (out of date)
- wikiserverwinplugin.bkl - More of an unused code snippet - see WikiServerMetaPageIdea?
- /build/msw - Visual C++ project files for windows (only the 2005 .sln file is current)
- wikiserver.sln - Visual C++ 2005 project file
- wikiserver.dsw - Visual C++ 6 project file (out of date)
- /build/unix - gcc makefile for unix/linux (generated by bakefile as above)
- config.gcc - GCC configuration settings such as debug vs. release build etc.
- Makefile - GCC Makefile
- /build/mac - gcc makefile for OSX (generated by bakefile as above) and Code Warrior? 9 project file
- config.gcc - GCC configuration settings such as debug vs. release build etc.
- Makefile - GCC Makefile
- Wiki Server M9?.mcb - Code Warrior? 9 project file (out of date)
- carb.r - resource file used when making a mac bundle with GCC
- Info.plist - resource file used when making a mac bundle with GCC
- run - shell script for running bundled GCC mac application
- drun - shell script for running bundled GCC mac application with the GDB debugger
- /doxygen - directory for doxygen to output to (empty without it generating anything)
- /include - include files
- config.h - WikiConfig header
- defaults.h - see DefaultsH
- EArray.h - Array header
- ememory.h - see EmemoryH
- E Reg Ex.h - ERegEx header
- headers.h - Headers header
- htag.h - HTag header
- httprq.h - HTTPRequest header
- os.h - see OSH
- page.h - Page header
- pageset.h - PageSet header
- rbt.h - RedBlackTree header
- server.h - header for sockets and Server?
- sourcehighlighter.h - see SourceHighlighter (note that all sourcehighlighter source is smashed into this header)
- streammerger.h - StreamMerger header
- utility.h - see UtilityH?
- wikiparser.h - WikiParser header
- wikiserver.h - Header for main Wiki Server class, a Server? derivative
- wikistring.h - String header
- wikiuser.h - WikiUser? header
- /rfc - Various RFC's related to wikiserver. It is just from (http://www.faqs.org) and is of the format rfcXXXX.html where XXXX is the rfc number.
- /snippets - Various code snippets that may have been used at one time or ideas for future stuff
- /src - (Root src) common source files with no other library dependancy
- config.cpp - WikiConfig source
- headers.cpp - Headers source
- htag.cpp - HTag source
- httprq.cpp - HTTPRequest source
- page.cpp - Page source
- pageformatting.cpp - Implementation of
- PageSet::WriteAsHTML for writing non-meta wiki pages out as HTML
- PageSet::WriteIncludedPage for writing a page that is included in another page
- PageSet::OutputPageLink for outputting a wikilink to a page or a link to one to edit if it doesn't exist
- pagehtml.cpp - Implementation of basically all meta pages such as Recent Changes
- pageset.cpp - PageSet source
- streammerger.cpp - StreamMerger source
- utility.cpp - see UtilityH?, also contains the String source
- wikiparser.cpp - WikiParser source
- wikiserver.cpp - Source for main Wiki Server class, a Server? derivative
- wikiuser.cpp - WikiUser? source
- /src/mac - mac-specific source
- osmac.cpp - Scratchpad for Mac Classic/Carbon source. Should go off of zoolib (http://zoolib.sourceforge.net/) and GUSI (http://sourceforge.net/projects/gusi/) for pointers on how to do this. (There is basically nothing here and it will not build)
- /src/pcre - source for pcre (zip files, also contains C++ wrapper)
- /src/unx - unix-specific source
- Unix and Mac OSX/Darwin -specific stuff. (slightly out of date)
- /src/win - windows-specific source