From f7b4cc602b9a646fbc66f3f17d6bb9c20efc3ead Mon Sep 17 00:00:00 2001
From: jaseg Deprecated, Rounding, Clipper.Constructor, Clipper.Execute, Clipper.ZFillFunction, ClipperBase.AddPath, ClipperBase.AddPaths, ClipperOffset, ClipperOffset.Execute, PolyNode, PolyTree, Area, CleanPolygon, CleanPolygons, ClosedPathsFromPolyTree, MinkowskiDiff, MinkowskiSum, OffsetPaths, OpenPathsFromPolyTree, Orientation, PointInPolygon, PolyTreeToPaths, SimplifyPolygon, SimplifyPolygons, Defines, CInt, InitOptions, IntPoint, Path, Paths, PolyFillType, ZFillCallback The precompiler directive 'use_deprecated' allows users to update the Clipper library without being forced to make immediate changes to code that accesses the library. Depricated code will be removed in a future update. (Enabled by default.) Why does Clipper use integer coordinates, not floats? This has been done to preserve numerical robustness. Early versions of the library did use floating point coordinates, but it became apparent that floating point imprecision was always going to cause occasional errors. How do I use floating point coordinates with Clipper? It's a simple task to multiply your floating point coordinates by a scaling factor (that's typically a power of 10 depending on the desired precision). Then with the solution paths, divide the returned coordinates by this same scaling factor. Clipper accepts integer coordinates as large as ±4.6e18, so it can accommodate very large scaling. Does Clipper handle polygons with holes? 'Holes' are defined by the specified polygon filling rule. (See also Clipper.Execute) Some polygons in the solution share a common edge. Is this a bug? No, though this should happen rarely as of version 6. (See Clipper.Execute for more about this.) I have lots of polygons that I want to 'union'. Can I do this in one operation? Yes. Just add all the polygons as subject polygons to the Clipper object. (You don't have to assign both subject and clip polygons.) The polygons produced by ClipperOffset have tiny artefacts? Could this be a bug? Make sure the input polygons don't self-intersect. Tiny self-intersections can sometimes be produced by previous clipping operations. These can be cleaned up using the CleanPolygon and CleanPolygons functions. Also, make sure the supplied polygons don't overlap. If they do, offset these separately. Finally, the precision of the input coordinates may be a problem. Because the Clipper Library only operates on integer coordinates, you may need to scale your coordinates (eg by a factor of 10) to improve precision. Is there an easy way to reverse polygon orientations? Yes, see ReversePaths. My drawings contain lots of beziers, ellipses and arcs. How can I perform clipping operations on these? You'll have to convert them to 'flattened' paths. For an example of how this can be done (and even reconstructed back into beziers, arcs etc), see the CurvesDemo application included in this library. Clipper.Execute, ClipperOffset, CleanPolygon, CleanPolygons, ReversePaths, PolyFillType The Clipper Library (including Delphi, C++ & C# source code, other accompanying code, examples and documentation), hereafter called "the Software", has been released under the following license, terms and conditions: Boost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the Software covered by this license to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. By using an integer type for polygon coordinates, the Clipper Library has been able to avoid problems of numerical robustness that can cause havoc with geometric computations. Problems associated with integer rounding and their possible solutions are discussed below. Clipper.StrictlySimple, CleanPolygons The Clipper Library performs clipping, and offsetting of both lines and polygons.
+
+
+
+ Home
+
+ Overview
+
+
+
+ Changes
+
+
+
+
+
+
+ See Also
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+
+
+
+ Home
+
+ Overview
+
+
+
+ Deprecated
+
+
+
Deprecated types and functions:
All deprecated code has been removed from version 6.2.0.
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+
+
+
+ Home
+
+ Overview
+
+
+
+ Example
+
+
+
+
+ Delphi Code Sample:
+
+
+
+
+
+
+
+
+
+ uses
+ graphics32, clipper;
+
+ function GetEllipsePoints(bounds: TIntRect): TPath;
+ begin
+ //code to create an elliptical polygon here
+ end;
+
+ procedure DrawPolygons(polys: TPaths; color: TColor32);
+ begin
+ //code to display the polygons here
+ end;
+
+ var
+ sub, clp, sol: TPaths;
+ begin
+
+ //set up the subject and clip polygons ...
+ setlength(sub, 3);
+ sub[0] := GetEllipsePoints(IntRect(100,100,300,300));
+ sub[1] := GetEllipsePoints(IntRect(125,130,275,180));
+ sub[2] := GetEllipsePoints(IntRect(125,220,275,270));
+
+ setlength(clp, 1);
+ clp[0] := GetEllipsePoints(IntRect(140,70,220,320));
+
+ //display the subject and clip polygons ...
+ DrawPolygons(sub, 0x8033FFFF);
+ DrawPolygons(clp, 0x80FFFF33);
+
+ //get the intersection of the subject and clip polygons ...
+ with TClipper.Create do
+ try
+ AddPaths(sub, ptSubject, true);
+ AddPaths(clp, ptClip, true);
+ Execute(ctIntersection, sol, pftEvenOdd, pftEvenOdd);
+ finally
+ free;
+ end;
+
+ //finally draw the intersection polygons ...
+ DrawPolygons(sol, 0x40808080);
+
+
+
+
+ C++ Code Sample:
+
+
+
+
+
+
+
+
+
+ #include "clipper.hpp"
+
+ ...
+
+ //from clipper.hpp ...
+ //typedef long long cInt;
+ //struct IntPoint {cInt X; cInt Y;};
+ //typedef std::vector<IntPoint> Path;
+ //typedef std::vector<Polygon> Paths;
+
+ using namespace ClipperLib;
+
+ void GetEllipsePoints(IntRect& bounds, Path& p)
+ {/* ... */}
+
+ void DrawPolygons(Paths& p, unsigned color)
+ {/* ... */}
+
+ int main()
+ {
+ //set up the subject and clip polygons ...
+ Paths sub(3);
+ GetEllipsePoints(IntRect(100,100,300,300), sub[0]);
+ GetEllipsePoints(IntRect(125,130,275,180), sub[1]);
+ GetEllipsePoints(IntRect(125,220,275,270), sub[2]);
+
+ Paths clp(1);
+ GetEllipsePoints(IntRect(140,70,220,320), clp[0]);
+
+ //display the subject and clip polygons ...
+ DrawPolygons(sub, 0x8033FFFF);
+ DrawPolygons(clp, 0x80FFFF33);
+
+ //get the intersection of the subject and clip polygons ...
+ Clipper clpr;
+ clpr.AddPaths(sub, ptSubject, true);
+ clpr.AddPaths(clp, ptClip, true);
+ Paths solution;
+ clpr.Execute(ctIntersection, solution, pftEvenOdd, pftEvenOdd);
+
+ //finally draw the intersection polygons ...
+ DrawPolygons(solution, 0x40808080);
+ }
+
+
+
+
+
+
+ C# Code Sample:
+
+
+
+
+
+
+
+
+
+ ...
+ using ClipperLib;
+
+ ...
+ using Path = List<IntPoint>;
+ using Paths = List<List<IntPoint>>;
+
+ static Path GetEllipsePoints(IntRect bounds)
+ {/* ... */}
+
+ static void DrawPolygons(Path p, uint color)
+ {/* ... */}
+
+ static void Main(string[] args)
+ {
+ Paths subjs = new Paths(3);
+ subjs.Add(GetEllipsePoints(new IntRect(100,100,300,300)));
+ subjs.Add(GetEllipsePoints(new IntRect(125,130,275,180)));
+ subjs.Add(GetEllipsePoints(new IntRect(125,220,275,270)));
+
+ Paths clips = new Paths(1);
+ clips.Add(GetEllipsePoints(new IntRect(140,70,220,320)));
+
+ DrawPolygons(subjs, 0x8033FFFF);
+ DrawPolygons(clips, 0x80FFFF33);
+
+ Paths solution = new Paths();
+ Clipper c = new Clipper();
+ c.AddPaths(subjs, PolyType.ptSubject, true);
+ c.AddPaths(clips, PolyType.ptClip, true);
+ c.Execute(ClipType.ctIntersection, solution);
+
+ DrawPolygons(solution, 0x40808080);
+ }
+
+
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+
+
+
+ Home
+
+ Overview
+
+
+
+ FAQ
+
+
+
See Also
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+
+
+
+ Home
+
+ Overview
+
+
+
+ License
+
+
+
http://www.boost.org/LICENSE_1_0.txt
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+
+
+
+ Home
+
+ Overview
+
+
+
+ Rounding
+
+
+
It's important to stress at the outset that rounding causes vertices to move fractions of a unit away from their 'true' positions. Nevertheless, the resulting imprecision can be very effectively managed by appropriate scaling.
The Clipper Library supports scaling to very high degrees of precision by accepting integer coordinate values in the range ±0x3FFFFFFFFFFFFFFF (± 4.6e+18).
Another complication of using a discrete numbers (as opposed to real numbers) is that very occasionally tiny self-intersection artefacts arise. In the unscaled image on the left (where one unit equals one pixel), the area of intersection of two polygons has been highlighted in bright green.
A 30X 'close up' of the lower points of intersection of these same two polygons shows the presence of a tiny self-intersecting artefact. The three 'black dots' highlight the actual points of intersection (with their fractional coordinates displayed). The 'red dots' show where these points of intersection are located once rounding is applied. With a little care you can see that rounding reverses the orientation of these vertices and causes a tiny self-intersecting artefact.
Although these tiny self-intersections are uncommon, if it's deemed necessary, they are best removed with CleanPolygons. (Setting Clipper's StrictlySimple property to true would also address this self-intersection but the tiny (sub-unit) polygon 'artefact' with incorrect orientation would still appear in the solution.)
In this final example, the single polygon on the left also has a tiny self-intersection. However, the clipping algorithm sees this vertex (88,50) as simply 'touching' rather than intersecting the right edge of the polygon (though only by a fraction of a unit). Since this intersection won't normally be detected, the clipping solution (eg following a union operation) will still contain this tiny self-intersection. Setting Clipper's StrictlySimple property to true avoids this uncommon problem.
See Also
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+
+
+
+ Home
+
+
+
+ Overview
+
+
+
A number of features set Clipper apart from other clipping libraries:
+
+
+
Current Version: 6.2.1
Author & copyright:
Angus Johnson. Copyright © 2010-2014
License, terms and conditions: Boost Software License
Terminology:
+
Distribution package contents:
The ZIP package contains the Clipper library's source code, a Windows CHM help file, HTML help, and a number of compiled demo applications (with full source code). The library was initially written in Delphi Pascal (and compiles with Delphi version 7 or above) but now contains C++, C# and Python translations too. The library's source code in each language is about 5000 lines. The Delphi code contains reasonably extensive comments, but comments are fewer in the C++ and C# code. The included sample applications show how Clipper can be used with the different languages using a number of graphics display libraries including - AGG, Cairo, OpenGL, Graphics32, GDI+ and SVG.
Download Link:
SourceForge
References:
The Library is based on but significantly extends Bala Vatti's polygon clipping algorithm as described in "A generic solution to polygon clipping", Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63.
A section in "Computer graphics and geometric modeling: implementation and algorithms" by By Max K. Agoston (Springer, 2005) discussing Vatti Polygon Clipping was also helpful in creating the initial Clipper implementation.
The paper titled "Polygon Offsetting by Computing Winding Numbers" by Chen & McMains (Paper no. DETC2005-85513, ASME 2005. Pages 565-575) contains helpful discussion on the complexities of polygon offsetting together with some solutions.
Source, License, Clipper, ClipperOffset, ClipType, PolyFillType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» constructor TClipper.Create(InitOptions: TInitOptions = []);
+ +C++ » Clipper::Clipper(int initOptions = 0) : ClipperBase();
+ +C# » public Clipper(initOptions = 0): base() {};
+ + The Clipper constructor creates an instance of the Clipper class. One or more InitOptions may be passed as a parameter to set the corresponding properties. (These properties can still be set or reset after construction.)
Examples:
+
+
+ + //C++ constructor setting StrictlySimple and PreserveCollinear properties ... + Clipper clipper(ioStrictlySimple | ioPreserveCollinear); + + //C# constructor setting StrictlySimple and PreserveCollinear properties ... + Clipper clipper = new Clipper(Clipper.ioStrictlySimple | Clipper.ioPreserveCollinear); + + //Delphi constructor setting StrictlySimple and PreserveCollinear properties ... + clipper := TClipper.Create([ioStrictlySimple, ioPreserveCollinear]); ++ + |
+
PreserveCollinear, ReverseSolution, StrictlySimple, InitOptions
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.»
function Execute(clipType: TClipType;
out solution: TPaths;
subjFillType: TPolyFillType = pftEvenOdd;
clipFillType: TPolyFillType = pftEvenOdd): boolean; overload;
function Execute(clipType: TClipType;
out solution: TPolyTree;
subjFillType: TPolyFillType = pftEvenOdd;
clipFillType: TPolyFillType = pftEvenOdd): boolean; overload;
C++ »
bool Execute(ClipType clipType,
Paths &solution,
PolyFillType subjFillType = pftEvenOdd,
PolyFillType clipFillType = pftEvenOdd);
bool Execute(ClipType clipType,
PolyTree &solution,
PolyFillType subjFillType = pftEvenOdd,
PolyFillType clipFillType = pftEvenOdd);
C# »
public bool Execute(ClipType clipType,
Paths solution,
PolyFillType subjFillType,
PolyFillType clipFillType);
public bool Execute(ClipType clipType,
PolyTree solution,
PolyFillType subjFillType,
PolyFillType clipFillType);
Once subject and clip paths have been assigned (via AddPath and/or AddPaths), Execute can then perform the clipping operation (intersection, union, difference or XOR) specified by the clipType parameter.
The solution parameter can be either a Paths or PolyTree structure. The Paths structure is simpler than the PolyTree stucture. Because of this it is quicker to populate and hence clipping performance is a little better (it's roughly 10% faster). However, the PolyTree data structure provides more information about the returned paths which may be important to users. Firstly, the PolyTree structure preserves nested parent-child polygon relationships (ie outer polygons owning/containing holes and holes owning/containing other outer polygons etc). Also, only the PolyTree structure can differentiate between open and closed paths since each PolyNode has an IsOpen property. (The Path structure has no member indicating whether it's open or closed.) For this reason, when open paths are passed to a Clipper object, the user must use a PolyTree object as the solution parameter, otherwise an exception will be raised.
When a PolyTree object is used in a clipping operation on open paths, two ancilliary functions have been provided to quickly separate out open and closed paths from the solution - OpenPathsFromPolyTree and ClosedPathsFromPolyTree. PolyTreeToPaths is also available to convert path data to a Paths structure (irrespective of whether they're open or closed).
There are several things to note about the solution paths returned:
+
The subjFillType and clipFillType parameters define the polygon fill rule to be applied to the polygons (ie closed paths) in the subject and clip paths respectively. (It's usual though obviously not essential that both sets of polygons use the same fill rule.)
Execute can be called multiple times without reassigning subject and clip polygons (ie when different clipping operations are required on the same polygon sets).
Example, Rounding, ClipperBase.AddPath, ClipperBase.AddPaths, PolyNode.IsOpen, PolyTree, ClosedPathsFromPolyTree, OpenPathsFromPolyTree, PolyTreeToPaths, ClipType, Path, Paths, PolyFillType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» property PreserveCollinear: boolean; override;
+ +C++ » void PreserveCollinear(bool value);
+ +C# » public bool PreserveCollinear { get {} set {} };
+ + +
By default, when three or more vertices are collinear in input polygons (subject or clip), the Clipper object removes the 'inner' vertices before clipping. When enabled the PreserveCollinear property prevents this default behavior to allow these inner vertices to appear in the solution.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» property ReverseSolution: boolean; override;
+ +C++ » void ReverseSolution(bool value);
+ +C# » public bool ReverseSolution { get {} set {} };
+ + +When this property is set to true, polygons returned in the solution parameter of the Execute() method will have orientations opposite to their normal orientations.
+ + + + + +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» property StrictlySimple: boolean; override;
+ +C++ » void StrictlySimple(bool value);
+ +C# » public bool StrictlySimple { get {} set {} };
+ + +
Terminology:
+
Vertices 'touch' if they share the same coordinates (and are not adjacent). An edge touches another if one of its end vertices touches another edge excluding its adjacent edges, or if they are co-linear and overlapping (including adjacent edges).
Polygons returned by clipping operations (see Clipper.Execute()) should always be simple polygons. When the StrictlySimply property is enabled, polygons returned will be strictly simple, otherwise they may be weakly simple. It's computationally expensive ensuring polygons are strictly simple and so this property is disabled by default.
Note: There's currently no guarantee that polygons will be strictly simple since 'simplifying' is still a work in progress.
In the image above, the two examples show weakly simple polygons being broken into two strictly simple polygons. (The outlines with arrows are intended to aid visualizing vertex order.)
See also the article on Simple Polygons on Wikipedia.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +Clipper + | ++ | +
Del.» property ZFillFunction: TZFillCallback read FZFillCallback write FZFillCallback;
+ +C++ » void ZFillFunction(ZFillCallback zFillFunc);
+ +C# » public ZFillCallback ZFillFunction { get; set; };
+ This property is only exposed when the pre-processor directive use_xyz has been defined. If this is the case, a 'Z' member will be included in the IntPoint structure where users can store custom data. While most vertices in a clipping solution will correspond to input (subject and clip) vertices, there will also be new vertices wherever edges intersect. This property assigns a custom callback function to the Clipper object so that custom 'Z' values can be assigned to these intersection vertices. (Note that 'Z' values in the solution at non-intersecting vertices will simply be copied from matching input vertices along with the X and Y values.)
It is up to the library user to assign 'Z' values for new intersection vertices (otherwise these values will remain 0). The four vertices that define the intersecting line segments will be passed to the callback function (together with the new intersection vertex) to aid the user in determining appropriate Z values.
+
Defines, IntPoint, ZFillCallback
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
|
+ + The Clipper class encapsulates boolean operations on polygons (intersection, union, difference and XOR), which is also called polygon clipping.
Input polygons, both subject and clip sets, are passed to a Clipper object by its AddPath and AddPaths methods, and the clipping operation is performed by calling its Execute method. Multiple boolean operations can be performed on the same input polygon sets by repeat calls to Execute.
Fields + | Methods + | Properties + | +
---|---|---|
In Clipper: + | +||
+ | +Constructor + | +PreserveCollinear + | +
+ | +Execute + | +ReverseSolution + | +
+ | ++ | +StrictlySimple + | +
+ | ++ | +ZFillFunction + | +
In ClipperBase: + | +||
+ | +AddPath + | ++ | +
+ | +AddPaths + | ++ | +
+ | +Clear + | ++ | +
+ | +GetBounds + | ++ | +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» function AddPath(const path: TPath; polyType: TPolyType; Closed: Boolean): Boolean;
+ +C++ » bool AddPath(const Path &pg, PolyType polyType, bool closed);
+ +C# » public virtual bool AddPath(Path pg, PolyType polyType, bool closed);
+ Any number of subject and clip paths can be added to a clipping task, either individually via the AddPath() method, or as groups via the AddPaths() method, or even using both methods.
'Subject' paths may be either open (lines) or closed (polygons) or even a mixture of both, but 'clipping' paths must always be closed. Clipper allows polygons to clip both lines and other polygons, but doesn't allow lines to clip either lines or polygons.
With closed paths, orientation should conform with the filling rule that will be passed via Clippper's Execute method.
Path Coordinate range:
Path coordinates must be between ± 0x3FFFFFFFFFFFFFFF (± 4.6e+18), otherwise a range error will be thrown when attempting to add the path to the Clipper object. If coordinates can be kept between ± 0x3FFFFFFF (± 1.0e+9), a modest increase in performance (approx. 15-20%) over the larger range can be achieved by avoiding large integer math. If the preprocessor directive use_int32 is defined (allowing a further increase in performance of 20-30%), then the maximum range is restricted to ± 32,767.
Return Value:
The function will return false if the path is invalid for clipping. A path is invalid for clipping when:
+
Example, Clipper.Execute, AddPaths, Orientation, Defines, Path, PolyFillType, PolyType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» function AddPaths(const paths: TPaths; polyType: TPolyType; Closed: Boolean): boolean;
+ +C++ » bool AddPaths(const Paths &ppg, PolyType polyType, bool closed);
+ +C# » public virtual bool AddPaths(Paths ppg, PolyType polyType, bool closed);
+ Any number of subject and clip paths can be added to a clipping task, either individually via the AddPath() method, or as groups via the AddPaths() method, or even using both methods.
'Subject' paths may be either open (lines) or closed (polygons) or even a mixture of both, but 'clipping' paths must always be closed. Clipper allows polygons to clip both lines and other polygons, but doesn't allow lines to clip either lines or polygons.
With closed paths, orientation should conform with the filling rule that will be passed via Clippper's Execute method.
Path Coordinate range:
Path coordinates must be between ± 0x3FFFFFFFFFFFFFFF (± 4.6e+18), otherwise a range error will be thrown when attempting to add the path to the Clipper object. If coordinates can be kept between ± 0x3FFFFFFF (± 1.0e+9), a modest increase in performance (approx. 15-20%) over the larger range can be achieved by avoiding large integer math. If the preprocessor directive use_int32 is defined (allowing a further increase in performance of 20-30%), then the maximum range is restricted to ± 32,767.
Return Value:
The function will return false if the path is invalid for clipping. A path is invalid for clipping when:
+
Example, Clipper.Execute, AddPaths, Orientation, Defines, Paths, PolyFillType, PolyType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» procedure Clear;
+ +C++ » virtual void Clear();
+ +C# » public void Clear() {};
+ +The Clear method removes any existing subject and clip polygons allowing the Clipper object to be reused for clipping operations on different polygon sets.
+ + + + +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperBase + | ++ | +
Del.» function GetBounds: TIntRect;
+ +C++ » IntRect GetBounds();
+ +C# » public IntRect GetBounds() {...};
+This method returns the axis-aligned bounding rectangle of all polygons that have been added to the Clipper object.
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
ClipperBase is an abstract base class for Clipper. A ClipperBase object should not be instantiated directly.
+ + +Methods + | +
---|
In ClipperBase: + | +
AddPath + | +
AddPaths + | +
Clear + | +
GetBounds + | +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» procedure AddPath(const Path: TPath; JoinType: TJoinType; EndType: TEndType);
+ +C++ » void AddPath(const Path& path, JoinType jointype, EndType endtype);
+ +C# » public void AddPath(Path path, JoinType jointype, EndType endtype);
+ Adds a Path to a ClipperOffset object in preparation for offsetting.
Any number of paths can be added, and each has its own JoinType and EndType. All 'outer' Paths must have the same orientation, and any 'hole' paths must have reverse orientation. Closed paths must have at least 3 vertices. Open paths may have as few as one vertex. Open paths can only be offset with positive deltas.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» procedure AddPaths(const Paths: TPaths; JoinType: TJoinType; EndType: TEndType);
+ +C++ » void AddPaths(const Paths& paths, JoinType jointype, EndType endtype);
+ +C# » public void AddPaths(Paths paths, JoinType jointype, EndType endtype);
+ Adds Paths to a ClipperOffset object in preparation for offsetting.
Any number of paths can be added, and each path has its own JoinType and EndType. All 'outer' Paths must have the same orientation, and any 'hole' paths must have reverse orientation. Closed paths must have at least 3 vertices. Open paths may have as few as one vertex. Open paths can only be offset with positive deltas.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» procedure Clear;
+ +C++ » void Clear();
+ +C# » public void Clear();
+ This method clears all paths from the ClipperOffset object, allowing new paths to be assigned.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» constructor Create(MiterLimit: Double = 2; RoundPrecision: Double = 0.25);
+ +C++ » ClipperOffset( double miterLimit = 2.0, double roundPrecision = 0.25);
+ +C# » public ClipperOffset( double miterLimit = 2.0, double roundPrecision = 0.25);
+ The ClipperOffset constructor takes 2 optional parameters: MiterLimit and ArcTolerance. Thes two parameters corresponds to properties of the same name. MiterLimit is only relevant when JoinType is jtMiter, and ArcTolerance is only relevant when JoinType is jtRound or when EndType is etOpenRound.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» procedure Execute(out solution: TPaths; Delta: Double); overload;
+ +C++ » void Execute(Paths& solution, double delta);
+ +C# » public void Execute(ref Paths solution, double delta);
+Del.» procedure Execute(out PolyTree: TPolyTree; Delta: Double); overload;
+ +C++ » void Execute(PolyTree& polytree, double delta);
+ +C# » public void Execute(ref PolyTree polytree, double delta);
+ This method takes two parameters. The first is the structure that receives the result of the offset operation (either a PolyTree or a Paths structure). The second parameter is the amount to which the supplied paths will be offset. Negative delta values shrink polygons and positive delta expand them.
This method can be called multiple times, offsetting the same paths by different amounts (ie using different deltas).
+
+
+ +#include "clipper.hpp" +... +using namespace ClipperLib; + +int main() +{ + Path subj; + Paths solution; + subj << + IntPoint(348,257) << IntPoint(364,148) << IntPoint(362,148) << + IntPoint(326,241) << IntPoint(295,219) << IntPoint(258,88) << + IntPoint(440,129) << IntPoint(370,196) << IntPoint(372,275); + ClipperOffset co; + co.AddPath(subj, jtRound, etClosedPolygon); + co.Execute(solution, -7.0); + + //draw solution ... + DrawPolygons(solution, 0x4000FF00, 0xFF009900); +} ++ + + |
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» property ArcTolerance: double; //read and write
+ +C++ » double ArcTolerance;
+ +C# » public double ArcTolerance {get; set;}
+ Firstly, this field/property is only relevant when JoinType = jtRound and/or EndType = etRound.
Since flattened paths can never perfectly represent arcs, this field/property specifies a maximum acceptable imprecision ('tolerance') when arcs are approximated in an offsetting operation. Smaller values will increase 'smoothness' up to a point though at a cost of performance and in creating more vertices to construct the arc.
The default ArcTolerance is 0.25 units. This means that the maximum distance the flattened path will deviate from the 'true' arc will be no more than 0.25 units (before rounding).
Reducing tolerances below 0.25 will not improve smoothness since vertex coordinates will still be rounded to integer values. The only way to achieve sub-integer precision is through coordinate scaling before and after offsetting (see example below).
It's important to make ArcTolerance a sensible fraction of the offset delta (arc radius). Large tolerances relative to the offset delta will produce poor arc approximations but, just as importantly, very small tolerances will substantially slow offsetting performance while providing unnecessary degrees of precision. This is most likely to be an issue when offsetting polygons whose coordinates have been scaled to preserve floating point precision.
Example: Imagine a set of polygons (defined in floating point coordinates) that is to be offset by 10 units using round joins, and the solution is to retain floating point precision up to at least 6 decimal places.
To preserve this degree of floating point precision, and given that Clipper and ClipperOffset both operate on integer coordinates, the polygon coordinates will be scaled up by 108
+ (and rounded to integers) prior to offsetting. Both offset delta and ArcTolerance will also need to be scaled by this same factor. If ArcTolerance was left unscaled at the default 0.25 units, every arc in the solution would contain a fraction of 44 THOUSAND vertices while the final arc imprecision would be 0.25 × 10-8
+ units (ie once scaling was reversed). However, if 0.1 units was an acceptable imprecision in the final unscaled solution, then ArcTolerance should be set to 0.1 × scaling_factor (0.1 × 108
+ ). Now if scaling is applied equally to both ArcTolerance and to Delta Offset, then in this example the number of vertices (steps) defining each arc would be a fraction of 23.
The formula for the number of steps in a full circular arc is ... Pi / acos(1 - arc_tolerance / abs(delta))
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +ClipperOffset + | ++ | +
Del.» property MiterLimit: double; //read and write
+ +C++ » double MiterLimit;
+ +C# » public double MiterLimit {get; set;}
+ This property sets the maximum distance in multiples of delta that vertices can be offset from their original positions before squaring is applied. (Squaring truncates a miter by 'cutting it off' at 1 × delta distance from the original vertex.)
The default value for MiterLimit is 2 (ie twice delta). This is also the smallest MiterLimit that's allowed. If mitering was unrestricted (ie without any squaring), then offsets at very acute angles would generate unacceptably long 'spikes'.
An example of an offsetting 'spike' at a narrow angle that's a consequence of using a large MiterLimit (25) ...
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
The ClipperOffset class encapsulates the process of offsetting (inflating/deflating) both open and closed paths using a number of different join types and end types.
(This class replaces the now deprecated OffsetPaths function which was less flexible.)
Preconditions for offsetting:
1. The orientations of closed paths must be consistent such that outer polygons share the same orientation, and any holes have the opposite orientation (ie non-zero filling). Open paths must be oriented with closed outer polygons.
2. Polygons must not self-intersect.
Limitations:
When offsetting, small artefacts may appear where polygons overlap. To avoid these artefacts, offset overlapping polygons separately.
+
+
+ +#include "clipper.hpp" +... +using namespace ClipperLib; + +int main() +{ + Path subj; + Paths solution; + subj << + IntPoint(348,257) << IntPoint(364,148) << IntPoint(362,148) << + IntPoint(326,241) << IntPoint(295,219) << IntPoint(258,88) << + IntPoint(440,129) << IntPoint(370,196) << IntPoint(372,275); + ClipperOffset co; + co.AddPath(subj, jtRound, etClosedPolygon); + co.Execute(solution, -7.0); + + //draw solution ... + DrawPolygons(solution, 0x4000FF00, 0xFF009900); +} ++ + + |
+
Methods + | Properties + | +
---|---|
In ClipperOffset: + | +|
AddPath + | +ArcTolerance + | +
AddPaths + | +MiterLimit + | +
Clear + | ++ | +
Constructor + | ++ | +
Execute + | ++ | +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» function GetNext: TPolyNode;
+ +C++ » PolyNode* GetNext();
+ +C# » public PolyNode GetNext();
+ + + The returned Polynode will be the first child if any, otherwise the next sibling, otherwise the next sibling of the Parent etc.
A PolyTree can be traversed very easily by calling GetFirst() followed by GetNext() in a loop until the returned object is a null pointer ...
+
+
+ + PolyTree polytree; + //call to Clipper.Execute method here which fills 'polytree' + + PolyNode* polynode = polytree.GetFirst(); + while (polynode) + { + //do stuff with polynode here + + polynode = polynode->GetNext(); + } + ++ + |
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» property ChildCount: Integer; //read only
+ +C++ » ChildCount(); //read only
+ +C# » public int ChildCount; //read only
+ +Returns the number of PolyNode Childs directly owned by the PolyNode object.
+ + +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» property Childs[index: Integer]: TPolyNode; //read only
+ +C++ » std::vector < PolyNode* > Childs;//public field
+ +C# » public List < PolyNode > Childs; //read only property
+ + + A read-only list of PolyNode.
Outer PolyNode childs contain hole PolyNodes, and hole PolyNode childs contain nested outer PolyNodes.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» property Contour: TPath; //read only
+ +C++ » Path Contour; //public field
+ +C# » public Path Contour; //read only property
+ + + Returns a path list which contains any number of vertices.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» IsHole: Boolean; //read only
+ +C++ » bool IsHole; //field
+ +C# » public bool IsHole; //read only property
+ + + Returns true when the PolyNode's polygon (Contour) is a hole.
Children of outer polygons are always holes, and children of holes are always (nested) outer polygons.
The IsHole property of a PolyTree object is undefined but its children are always top-level outer polygons.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» IsOpen: Boolean; //read only
+ +C++ » bool IsOpen; //field
+ +C# » public bool IsOpen; //read only property
+ + + Returns true when the PolyNode's Contour results from a clipping operation on an open contour (path). Only top-level PolyNodes can contain open contours.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyNode + | ++ | +
Del.» Parent: TPolyNode; //read only
+ +C++ » PolyNode* Parent; //field
+ +C# » public PolyNode Parent; //read only property
+ + + Returns the parent PolyNode.
The PolyTree object (which is also a PolyNode) does not have a parent and will return a null pointer.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
PolyNodes are encapsulated within a PolyTree container, and together provide a data structure representing the parent-child relationships of polygon contours returned by Clipper's Execute method.
A PolyNode object represents a single polygon. Its IsHole property indicates whether it's an outer or a hole. PolyNodes may own any number of PolyNode children (Childs), where children of outer polygons are holes, and children of holes are (nested) outer polygons.
Fields + | Methods + | Properties + | +
---|---|---|
In PolyNode: + | +||
+ | +GetNext + | +ChildCount + | +
+ | ++ | +Childs + | +
+ | ++ | +Contour + | +
+ | ++ | +IsHole + | +
+ | ++ | +IsOpen + | +
+ | ++ | +Parent + | +
Overview, Clipper.Execute, PolyTree
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyTree + | ++ | +
Del.» procedure Clear;
+ +C++ » void Clear();
+ +C# » public void Clear();
+ This method clears any PolyNode children contained by PolyTree the object.
Clear does not need to be called explicitly. The Clipper.Execute method that accepts a PolyTree parameter will automatically clear the PolyTree object before propagating it with new PolyNodes. Likewise, PolyTree's destructor will also automatically clear any contained PolyNodes.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyTree + | ++ | +
Del.» function GetFirst: TPolyNode;
+ +C++ » PolyNode* GetFirst();
+ +C# » public PolyNode GetFirst();
+ + + This method returns the first outer polygon contour if any, otherwise a null pointer.
This function is almost equivalent to calling Childs[0] except that when a PolyTree object is empty (has no children), calling Childs[0] would raise an out of range exception.
PolyNode.GetNext, PolyNode.ChildCount, PolyNode.Childs
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | +PolyTree + | ++ | +
Del.» property Total: Integer; //read only
+ +C++ » Total(); //read only
+ +C# » public int Total; //read only
+ +Returns the total number of PolyNodes (polygons) contained within the PolyTree. This value is not to be confused with ChildCount which returns the number of immediate children only (Childs) contained by PolyTree.
+ + +PolyNode.ChildCount, PolyNode.Childs
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
|
+ + PolyTree is intended as a read-only data structure that should only be used to receive solutions from clipping and offsetting operations. It's an alternative to the Paths data structure which also receives these solutions. PolyTree's two major advantages over the Paths structure are: it properly represents the parent-child relationships of the returned polygons; it differentiates between open and closed paths. However, since PolyTree is a more complex structure than the Paths structure, and since it's more computationally expensive to process (the Execute method being roughly 5-10% slower), it should used only be when parent-child polygon relationships are needed, or when open paths are being 'clipped'.
An empty PolyTree object can be passed as the solution parameter in Clipper.Execute and in ClipperOffset.Execute. Once the clipping or offseting operation is completed, the method returns with the PolyTree structure filled with data representing the solution.
A PolyTree object is a container for any number of PolyNode children, with each contained PolyNode representing a single polygon contour (either an outer or hole polygon). PolyTree itself is a specialized PolyNode whose immediate children represent the top-level outer polygons of the solution. (Its own Contour property is always empty.) The contained top-level PolyNodes may contain their own PolyNode children representing hole polygons that may also contain children representing nested outer polygons etc. Children of outers will always be holes, and children of holes will always be outers.
PolyTrees can also contain open paths. Open paths will always be represented by top level PolyNodes. Two functions are provided to quickly separate out open and closed paths from a polytree - OpenPathsFromPolyTree and ClosedPathsFromPolyTree.
+ + + | + +
+
+ + + polytree: + Contour = () + ChildCount = 1 + Childs[0]: + Contour = ((10,10),(100,10),(100,100),(10,100)) + IsHole = False + ChildCount = 1 + Childs[0]: + Contour = ((20,20),(20,90),(90,90),(90,20)) + IsHole = True + ChildCount = 2 + Childs[0]: + Contour = ((30,30),(50,30),(50,50),(30,50)) + IsHole = False + ChildCount = 0 + Childs[1]: + Contour = ((60,60),(80,60),(80,80),(60,80)) + IsHole = False + ChildCount = 0 + ++ + |
+
+
Fields + | Methods + | Properties + | +
---|---|---|
In PolyTree: + | +||
+ | +Clear + | +Total + | +
+ | +GetFirst + | ++ | +
In PolyNode: + | +||
+ | +GetNext + | +ChildCount + | +
+ | ++ | +Childs + | +
+ | ++ | +Contour + | +
+ | ++ | +IsHole + | +
+ | ++ | +IsOpen + | +
+ | ++ | +Parent + | +
Overview, Clipper.Execute, ClipperOffset.Execute, PolyNode, ClosedPathsFromPolyTree, OpenPathsFromPolyTree, Paths
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function Area(const pts: TPath): double;
+ +C++ » double Area(const Path &poly);
+ +C# » public static double Area(Path poly);
+ + +This function returns the area of the supplied polygon. It's assumed that the path is closed and does not self-intersect. Depending on orientation, this value may be positive or negative. If Orientation is true, then the area will be positive and conversely, if Orientation is false, then the area will be negative.
+
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function CleanPolygon(const Poly: TPath; Distance: double = 1.415): TPath;
+ +C++ » void CleanPolygon(const Path &in_poly, Path &out_poly, double distance = 1.415);
+ +C++ » void CleanPolygon(Path &poly, double distance = 1.415);
+ +C# » public static Path CleanPolygon(Path poly, double distance = 1.415);
+Removes vertices: +
Vertices are semi-adjacent when they are separated by a single (out-lying) vertex.
The distance parameter's default value is approximately √2 so that a vertex will be removed when adjacent or semi-adjacent vertices having their corresponding X and Y coordinates differing by no more than 1 unit. (If the egdes are semi-adjacent the out-lying vertex will be removed too.)
C++ only: This function is overloaded. In the first definition, the in_poly and out_poly parameters can reference the same Path object though in that case the calling code might be clearer if the second definition (accepting a single Paths parameter) is used.
CleanPolygons, SimplifyPolygon, Path
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function CleanPolygons(const Polys: TPaths; Distance: double = 1.415): TPaths;
+ +C++ » void CleanPolygons(const Paths &in_polys, Paths &out_polys, double distance = 1.415);
+ +C++ » void CleanPolygons(Paths &polys, double distance = 1.415);
+ +C# » public static Paths CleanPolygons(Paths polys, double distance = 1.415);
+Removes vertices: +
Vertices are semi-adjacent when they are separated by a single (out-lying) vertex.
The distance parameter's default value is approximately √2 so that a vertex will be removed when adjacent or semi-adjacent vertices having their corresponding X and Y coordinates differing by no more than 1 unit. (If the egdes are semi-adjacent the out-lying vertex will be removed too.)
C++ only: This function is overloaded. In the first definition, the in_polys and out_polys parameters can reference the same Paths object though in that case the calling code might be clearer if the second definition (accepting a single Paths parameter) is used.
CleanPolygon, SimplifyPolygons
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function ClosedPathsFromPolyTree(PolyTree: TPolyTree): TPaths;
+ +C++ » void ClosedPathsFromPolyTree(PolyTree& polytree, Paths& paths);
+ +C# » public static void ClosedPathsFromPolyTree(PolyTree polytree, Paths paths);
+This function filters out open paths from the PolyTree structure and returns only closed paths in a Paths structure.
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function MinkowskiDiff(const Poly1: TPath; const Poly2: TPath): TPaths;
+ +C++ » void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution);
+ +C# » public static Paths MinkowskiDiff(Path poly1, Path poly2);
+ Minkowski Difference is performed by subtracting each point in a polygon from the set of points in an open or closed path. A key feature of Minkowski Difference is that when it's applied to two polygons, the resulting polygon will contain the coordinate space origin whenever the two polygons touch or overlap. (This function is often used to determine when polygons collide.)
In the image on the left the blue polygon is the 'minkowski difference' of the two red boxes. The black dot represents the coordinate space origin.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function MinkowskiSum(const Pattern: TPath; const Path: TPath; PathIsClosed: Boolean): TPaths; overload;
+ +Del.» function MinkowskiSum(const Pattern: TPath; const Paths: TPaths; PathFillType: TPolyFillType; PathIsClosed: Boolean): TPaths; overload;
+ +C++ » void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed);
+ +C++ » void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, PolyFillType pathFillType, bool pathIsClosed);
+ +C# » public static Paths MinkowskiSum(Path pattern, Path path, bool pathIsClosed);
+ +C# » public static Paths MinkowskiSum(Path pattern, Paths paths, PolyFillType pathFillType, bool pathIsClosed);
+Minkowski Addition is performed by adding each point in a polygon 'pattern' to the set of points in an open or closed path. The resulting polygon (or polygons) defines the region that the 'pattern' would pass over in moving from the beginning to the end of the 'path'.
+ + ++
+ Path path = new Path(); + Path pattern = new Path(); + Paths solution = new Paths(); + + //Greek capital sigma (sum sign) ... + Int64[] ints1 = new Int64[] { 300, 400, 100, 400, 200, 300, 100, 200, 300, 200 }; + path = IntsToPolygon(ints1); + + //diagonal brush pattern ... + Int64[] ints2 = new Int64[] { 4, -6, 6, -6, -4, 6, -6, 6 }; + pattern = IntsToPolygon(ints2); + + solution = Clipper.MinkowskiSum(pattern, path, false); + //move 'pattern' to the end of 'path' ... + pattern = TranslatePath(pattern, 300, 200); + + //Display solution ± pattern ... ++ + + +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function OffsetPaths(const polys: Paths; const delta: double; JoinType: TJoinType = jtSquare; EndType: TEndType = etClosed; Limit: double = 0.0): TPaths;
+ +C++ » void OffsetPaths(const Paths &in_polys, Paths &out_polys, double delta, JoinType jointype = jtSquare, EndType endtype = etClosed, double limit = 0.0);
+ +C# » public static Paths OffsetPaths(Paths polys, double delta, JoinType jointype = JoinType.jtSquare, EndType endtype = EndType.etClosed, double limit = 0.0);
+ Deprecated. (See ClipperOffset.)
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function OpenPathsFromPolyTree(PolyTree: TPolyTree): TPaths;
+ +C++ » void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths);
+ +C# » public static void OpenPathsFromPolyTree(PolyTree polytree, Paths paths);
+This function filters out closed paths from the PolyTree structure and returns only open paths in a Paths structure.
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function Orientation(const poly: TPath): boolean;
+ +C++ » bool Orientation(const Path &poly); // Function in the ClipperLib namespace.
+ +C# » public static bool Orientation(Path poly); // Static method of the Clipper class in the ClipperLib namespace.
+ + +Orientation is only important to closed paths. Given that vertices are declared in a specific order, orientation refers to the direction (clockwise or counter-clockwise) that these vertices progress around a closed path.
Orientation is also dependent on axis direction:
+
Notes:
+
Overview, Clipper.ReverseSolution, Path
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function PointInPolygon(const Pt: TIntPoint; const poly: TPath): Integer;
+ +C++ » int PointInPolygon(const IntPoint pt, const Path &poly); // Function in the ClipperLib namespace.
+ +C# » public static int PointInPolygon(IntPoint pt, Path poly); // Static method of the Clipper class.
+ + +Returns 0 when false, -1 when pt is on poly and +1 when pt is in poly.
It's assumed that 'poly' is closed and does not self-intersect.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function PolyTreeToPaths(PolyTree: TPolyTree): TPaths;
+ +C++ » void PolyTreeToPaths(PolyTree& polytree, Paths& paths);
+ +C# » public static Paths PolyTreeToPaths(PolyTree polytree);
+This function converts a PolyTree structure into a Paths structure.
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function ReversePath(const polys: TPath): TPath;
+ +C++ » void ReversePath(const Path &p);
+ +C# » //Call Path.Reverse().
+Reverses the vertex order (and hence orientation) in the specified path.
+ + +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function ReversePaths(const p: TPaths): TPaths;
+ +C++ » void ReversePaths(const Paths &p);
+ +C# » void ReversePaths( Paths p );
+Reverses the vertex order (and hence orientation) in each contained path.
+ + + +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function SimplifyPolygon(const Poly: TPath; FillType: TPolyFillType = pftEvenOdd): TPaths;
+ + C++ » void SimplifyPolygon(const Path &in_poly, Paths &out_polys,
PolyFillType fillType = pftEvenOdd);
C# » public static Paths SimplifyPolygon(Path poly,
PolyFillType fillType = PolyFillType.pftEvenOdd);
Removes self-intersections from the supplied polygon (by performing a boolean union operation using the nominated PolyFillType).
Polygons with non-contiguous duplicate vertices (ie 'touching') will be split into two polygons.
Note: There's currently no guarantee that polygons will be strictly simple since 'simplifying' is still a work in progress.
Clipper.StrictlySimple, CleanPolygon, Path, PolyFillType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» function SimplifyPolygons(const polys: TPaths;
FillType: TPolyFillType = pftEvenOdd): TPaths;
C++ » void SimplifyPolygons(const Paths &in_polys, Paths &out_polys,
PolyFillType fillType = pftEvenOdd);
C++ » void SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd);
+ +C# » public static Polygons SimplifyPolygons(Paths polys,
PolyFillType fillType = PolyFillType.pftEvenOdd);
Removes self-intersections from the supplied polygons (by performing a boolean union operation using the nominated PolyFillType).
Polygons with non-contiguous duplicate vertices (ie 'vertices are touching') will be split into two polygons.
C++ only: This function is overloaded. In the first definition, the in_polys and out_polys parameters can reference the same Paths object though in that case the calling code might be clearer if the second definition (accepting a single Paths parameter) is used.
Note: There's currently no guarantee that polygons will be strictly simple since 'simplifying' is still a work in progress.
Clipper.StrictlySimple, CleanPolygons, PolyFillType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.»
{$IFDEF use_int32}
cInt = Int32;
{$ELSE}
cInt = Int64;
{$ENDIF}
C++ »
#ifdef use_int32
typedef int cInt;
#else
typedef signed long long cInt;
#endif
C# »
#if use_int32
using cInt = Int32;
#else
using cInt = Int64;
#endif
cInt is the integer type used by the Clipper Library to represent vertex coordinate values. (See also IntPoint.)
The library uses integers instead of floating point values to preserve numerical robustness. (Very early versions of the library used floating point coordinates, but it became apparent that floating point imprecision was always going to cause occasional errors.)
By default cInt represents a signed 64bit integer and polygon coordinates can have any value in the range ± 9.2e+18. This accommodates the scaling of floating point coordinate values to very large integers so that very high degrees of precision can be retained during clipping. However, if coordinate values can be kept within the range ± 3.0e+9, then by avoiding large integer math, a modest ~10% improvement in clipping performance is achieved.
If the preprocessor directive use_int32 is defined, cInt will represent a signed 32bit integer. This improves clipping performance by 20-30% but the trade-off is that coordinate values are restricted to the much narrower range of ± 46340.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TClipType = (ctIntersection, ctUnion, ctDifference, ctXor);
+ +C++ » enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };
+ +C# » public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };
+ There are four boolean operations - AND, OR, NOT & XOR.
Given that subject and clip polygon brush 'filling' is defined both by their vertices and their respective filling rules, the four boolean operations can be applied to polygons to define new filling regions:
+
All polygon clipping is performed with a Clipper object with the specific boolean operation indicated by the ClipType parameter passed in its Execute method.
With regard to open paths (polylines), clipping rules generally match those of closed paths (polygons).
However, when there are both polyline and polygon subjects, the following clipping rules apply:
+
Example of clipping behaviour when mixing polyline and polygon subjects:
Overview, Clipper, Clipper.Execute, PolyFillType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TEndType = (etClosedPolygon, etClosedLine, etOpenSquare, etOpenRound, etOpenButt);
+ +C++ » enum EndType {etClosedPolygon, etClosedLine, etOpenSquare, etOpenRound, etOpenButt};
+ +C# » public enum EndType {etClosedPolygon, etClosedLine, etOpenSquare, etOpenRound, etOpenButt};
+The EndType enumerator has 5 values: +
Note: With etClosedPolygon and etClosedLine types, the path closure will be the same regardless of whether or not the first and last vertices in the path match.
ClipperOffset.AddPath, ClipperOffset.AddPaths
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TInitOption = (ioReverseSolution, ioStrictlySimple, ioPreserveCollinear);
+ +C++ » enum InitOptions {
ioReverseSolution = 1,
ioStrictlySimple = 2,
ioPreserveCollinear = 4};
C# » public const int ioReverseSolution = 1;
public const int ioStrictlySimple = 2;
public const int ioPreserveCollinear = 4;
+ + + + + +
Clipper.Constructor, Clipper.PreserveCollinear, Clipper.ReverseSolution, Clipper.StrictlySimple
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» TIntPoint = record X, Y: cInt; end;
+ +C++ » struct IntPoint { cInt X; cInt Y; ... };
+ +C# » public class IntPoint { public cInt X; { get; set; } public cInt Y; { get; set; } ... };
+ The IntPoint structure is used to represent all vertices in the Clipper Library. An integer storage type has been deliberately chosen to preserve numerical robustness. (Early versions of the library used floating point coordinates, but it became apparent that floating point imprecision would always cause occasional errors.)
A sequence of IntPoints are contained within a Path structure to represent a single contour.
As of version 6, IntPoint now has an optional third member 'Z'. This can be enabled by exposing (ie uncommenting) the PreProcessor define 'use_xyz'. When the Z member is used, its values will be copied to corresponding verticies in solutions to clipping operations. However, at points of intersection where there's no corresponding Z value, the value will be assigned zero unless a new value is provided by a user supplied callback function.
Users wishing to clip or offset polygons containing floating point coordinates need to use appropriate scaling when converting these values to and from IntPoints.
See also the notes on rounding.
Rounding, Clipper.ZFillFunction, Defines, CInt, Path, Paths
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.»
TIntRect = record left, top, right, bottom: cInt; end;
C++ »
struct IntRect { cInt left; cInt top; cInt right; cInt bottom; ... };
C# »
public class IntRect {
public cInt left; { get; set; }
public cInt top; { get; set; }
public cInt right; { get; set; }
public cInt bottom; { get; set; } ... };
Structure returned by Clipper's GetBounds method.
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TJoinType = (jtSquare, jtRound, jtMiter);
+ +C++ » enum JoinType {jtSquare, jtRound, jtMiter};
+ +C# » public enum JoinType {jtSquare, jtRound, jtMiter};
+ When adding paths to a ClipperOffset object via the AddPaths method, the joinType parameter may be one of three types - jtMiter, jtSquare or jtRound.
+
ClipperOffset, ClipperOffset.AddPaths, ClipperOffset.ArcTolerance, ClipperOffset.MiterLimit
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» TPath = array of TIntPoint;
+ +C++ » typedef std::vector<IntPoint> Path;
+ +C# » using Path = List<IntPoint>;
+ This structure contains a sequence of IntPoint vertices defining a single contour (see also terminology). Paths may be open and represent a series of line segments bounded by 2 or more vertices, or they may be closed and represent polygons. Whether or not a path is open depends on context. Closed paths may be 'outer' contours or 'hole' contours. Which they are depends on orientation.
Multiple paths can be grouped into a Paths structure.
Overview, Example, ClipperBase.AddPath, PolyTree, Orientation, IntPoint, Paths
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» TPaths = array of TPath;
+ +C++ » typedef std::vector< Path > Paths;
+ +C# » using Paths = List<List< IntPoint >>;
+ This structure is fundamental to the Clipper Library. It's a list or array of one or more Path structures. (The Path structure contains an ordered list of vertices that make a single contour.)
Paths may open (a series of line segments), or they may closed (polygons). Whether or not a path is open depends on context. Closed paths may be 'outer' contours or 'hole' contours. Which they are depends on orientation.
Clipper.Execute, ClipperBase.AddPath, ClipperBase.AddPaths, OffsetPaths, IntPoint, Path
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TPolyFillType = (pftEvenOdd, pftNonZero, pftPositive, pftNegative);
+ +C++ » enum PolyFillType {pftEvenOdd, pftNonZero, pftPositive, pftNegative};
+ +C# » public enum PolyFillType {pftEvenOdd, pftNonZero, pftPositive, pftNegative};
+ Filling indicates those regions that are inside a closed path (ie 'filled' with a brush color or pattern in a graphical display) and those regions that are outside. The Clipper Library supports 4 filling rules: Even-Odd, Non-Zero, Positive and Negative.
The simplest filling rule is Even-Odd filling (sometimes called alternate filling). Given a group of closed paths start from a point outside the paths and progress along an imaginary line through the paths. When the first path is crossed the encountered region is filled. When the next path is crossed the encountered region is not filled. Likewise, each time a path is crossed, filling starts if it had stopped and stops if it had started.
With the exception of Even-Odd filling, all other filling rules rely on edge direction and winding numbers to determine filling. Edge direction is determined by the order in which vertices are declared when constructing a path. Edge direction is used to determine the winding number of each polygon subregion.
The winding number for each polygon sub-region can be derived by:
Even-Odd (Alternate): Odd numbered sub-regions are filled, while even numbered sub-regions are not.
Non-Zero (Winding): All non-zero sub-regions are filled.
Positive: All sub-regions with winding counts > 0 are filled.
Negative: All sub-regions with winding counts < 0 are filled.
Paths are added to a Clipper object using the AddPath or AddPaths methods and the filling rules (for subject and clip polygons separately) are specified in the Execute method.
Polygon regions are defined by one or more closed paths which may or may not intersect. A single polygon region can be defined by a single non-intersecting path or by multiple non-intersecting paths where there's typically an 'outer' path and one or more inner 'hole' paths. Looking at the three shapes in the image above, the middle shape consists of two concentric rectangles sharing the same clockwise orientation. With even-odd filling, where orientation can be disregarded, the inner rectangle would create a hole in the outer rectangular polygon. There would be no hole with non-zero filling. In the concentric rectangles on the right, where the inner rectangle is orientated opposite to the outer, a hole will be rendered with either even-odd or non-zero filling. A single path can also define multiple subregions if it self-intersects as in the example of the 5 pointed star shape below.
By far the most widely used fill rules are Even-Odd (aka Alternate) and Non-Zero (aka Winding). Most graphics rendering libraries (AGG, Android Graphics, Cairo, GDI+, OpenGL, Quartz 2D etc) and vector graphics storage formats (SVG, Postscript, Photoshop etc) support both these rules. However some libraries (eg Java's Graphics2D) only support one fill rule. Android Graphics and OpenGL are the only libraries (that I'm aware of) that support multiple filling rules.
It's useful to note that edge direction has no affect on a winding number's odd-ness or even-ness. (This is why orientation is ignored when the Even-Odd rule is employed.)
The direction of the Y-axis does affect polygon orientation and edge direction. However, changing Y-axis orientation will only change the sign of winding numbers, not their magnitudes, and has no effect on either Even-Odd or Non-Zero filling.
Clipper.Execute, ClipperBase.AddPath, ClipperBase.AddPaths, Orientation
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TPolyType = (ptSubject, ptClip);
+ +C++ » enum PolyType { ptSubject, ptClip };
+ +C# » public enum PolyType { ptSubject, ptClip };
+ Boolean (clipping) operations are mostly applied to two sets of Polygons, represented in this library as subject and clip polygons. Whenever Polygons are added to the Clipper object, they must be assigned to either subject or clip polygons.
UNION operations can be performed on one set or both sets of polygons, but all other boolean operations require both sets of polygons to derive meaningful solutions.
ClipperBase.AddPath, ClipperBase.AddPaths, ClipType
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | +ClipperLib + | ++ | +
Del.» type TZFillCallback = procedure (const E1Bot, E1Top, E2Bot, E2Top: TIntPoint; var Pt: TIntPoint);
+ +C++ » typedef void (*ZFillCallback)(const IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt);
+ +C# » public delegate void ZFillCallback(IntPoint bot1, IntPoint top1, IntPoint bot2, IntPoint top2, ref IntPoint pt);
+ If the use_xyz pre-processor directive is enabled, then the IntPoint class will have an extra 'Z' member and the Clipper class's ZFillFunction property will be exposed so it can be assigned a custom callback function.
This custom callback procedure requires five IntPoint parameters: the first 2 parameters are the vertices that define one line segment involved in the intersection and the next two parameters the other line segment. (Since the Clipper library has been developed in an environment that uses an inverted Y axis display, e1bot and e2bot will always have Y values greater than or equal to their corresponding e1top and e2top Y values.) The last IntPoint parameter contain the actual coordinates at the intersection. This last parameter is passed by reference so that its Z member can be assigned with a custom value.
Clipper.ZFillFunction, Defines
+ +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Home + | ++ | +
Filenames: clipper.pas; clipper.hpp and clipper.cpp; clipper.cs
Namespace: ClipperLib
Types + | Classes + | Functions + | +
---|---|---|
CInt + | +Clipper + | +Area + | +
ClipType + | +ClipperBase + | +CleanPolygon + | +
EndType + | +ClipperOffset + | +CleanPolygons + | +
InitOptions + | +PolyNode + | +ClosedPathsFromPolyTree + | +
IntPoint + | +PolyTree + | +MinkowskiDiff + | +
IntRect + | ++ | +MinkowskiSum + | +
JoinType + | ++ | +OffsetPaths + | +
Path + | ++ | +OpenPathsFromPolyTree + | +
Paths + | ++ | +Orientation + | +
PolyFillType + | ++ | +PointInPolygon + | +
PolyType + | ++ | +PolyTreeToPaths + | +
ZFillCallback + | ++ | +ReversePath + | +
+ | ++ | +ReversePaths + | +
+ | ++ | +SimplifyPolygon + | +
+ | ++ | +SimplifyPolygons + | +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
Library Overview + | +Changes + | +Example + | +FAQ + | +Rounding + | +Deprecated + | +License + | +
+ | +
+ Classes (Hierarchy)+ + + + + + |
+
CInt + | +InitOptions + | +JoinType + | +PolyFillType + | +
ClipType + | +IntPoint + | +Path + | +PolyType + | +
EndType + | +IntRect + | +Paths + | +ZFillCallback + | +
Area + | +ClosedPathsFromPolyTree + | +OffsetPaths + | +PointInPolygon + | +ReversePaths + | +
CleanPolygon + | +MinkowskiDiff + | +OpenPathsFromPolyTree + | +PolyTreeToPaths + | +SimplifyPolygon + | +
CleanPolygons + | +MinkowskiSum + | +Orientation + | +ReversePath + | +SimplifyPolygons + | +
ClipperLib + | +
Copyright ©2010-2014 Angus Johnson - Clipper 6.2.1 - Help file built on 1-November-2014
+function helloSyntaxHighlighter() +{ + return "hi!"; +} ++ + diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js new file mode 100644 index 0000000..4e29bdd --- /dev/null +++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/scripts/shAutoloader.js @@ -0,0 +1,17 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d
\\\\w+)\\\\]$","U"),i=1,p=0;ptags. + */ +function processUrls(code) +{ + var gt = /(.*)((>|<).*)/; + + return code.replace(sh.regexLib.url, function(m) + { + var suffix = '', + match = null + ; + + // We include < and > in the URL for the common cases liketags to the document body + for (i = 0; i < elements.length; i++) + { + var url = brushes[elements[i].params.brush]; + + if (!url) + continue; + + scripts[url] = false; + loadScript(url); + } + + function loadScript(url) + { + var script = document.createElement('script'), + done = false + ; + + script.src = url; + script.type = 'text/javascript'; + script.language = 'javascript'; + script.onload = script.onreadystatechange = function() + { + if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) + { + done = true; + scripts[url] = true; + checkAll(); + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + script.parentNode.removeChild(script); + } + }; + + // sync way of adding script tags to the page + document.body.appendChild(script); + }; + + function checkAll() + { + for(var url in scripts) + if (scripts[url] == false) + return; + + if (allCalled) + SyntaxHighlighter.highlight(allParams); + }; +}; + +})(); diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/src/shCore.js b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/src/shCore.js new file mode 100644 index 0000000..4214763 --- /dev/null +++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/src/shCore.js @@ -0,0 +1,1721 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +var SyntaxHighlighter = function() { + +// CommonJS +if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined') +{ + XRegExp = require('XRegExp').XRegExp; +} + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... +var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : false, + + /** Lines to highlight. */ + 'highlight' : null, + + /** Title to be displayed above the code block. */ + 'title' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Enables quick code copy and paste from double click. */ + 'quick-code' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : true, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + 'html-script' : false + }, + + config : { + space : ' ', + + /** Enables use of tags. */ + useScriptTags : true, + + /** Blogger mode flag. */ + bloggerMode : false, + + stripBrs : false, + + /** Name of the tag that SyntaxHighlighter will automatically look for. */ + tagName : 'pre', + + strings : { + expandSource : 'expand source', + help : '?', + alert: 'SyntaxHighlighter\n\n', + noBrush : 'Can\'t find brush for: ', + brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ', + + // this is populated by the build script + aboutDialog : ' About SyntaxHighlighter ' + } + }, + + /** Internal 'global' variables. */ + vars : { + discoveredBrushes : null, + highlighters : {} + }, + + /** This object is populated by user included external brush files. */ + brushes : {}, + + /** Common regular expressions. */ + regexLib : { + multiLineCComments : /\/\*[\s\S]*?\*\//gm, + singleLineCComments : /\/\/.*$/gm, + singleLinePerlComments : /#.*$/gm, + doubleQuotedString : /"([^\\"\n]|\\.)*"/g, + singleQuotedString : /'([^\\'\n]|\\.)*'/g, + multiLineDoubleQuotedString : new XRegExp('"([^\\\\"]|\\\\.)*"', 'gs'), + multiLineSingleQuotedString : new XRegExp("'([^\\\\']|\\\\.)*'", 'gs'), + xmlComments : /(<|<)!--[\s\S]*?--(>|>)/gm, + url : /\w+:\/\/[\w-.\/?%&=:@;]*/g, + + /** = ?> tags. */ + phpScriptTags : { left: /(<|<)\?=?/g, right: /\?(>|>)/g }, + + /** <%= %> tags. */ + aspScriptTags : { left: /(<|<)%=?/g, right: /%(>|>)/g }, + + /** tags. */ + scriptScriptTags : { left: /(<|<)\s*script.*?(>|>)/gi, right: /(<|<)\/\s*script\s*(>|>)/gi } + }, + + toolbar: { + /** + * Generates HTML markup for the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @return {String} Returns HTML markup. + */ + getHtml: function(highlighter) + { + var html = ' '; + + return html; + }, + + /** + * Generates HTML markup for a regular button in the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @param {String} commandName Command name that would be executed. + * @param {String} label Label text to display. + * @return {String} Returns HTML markup. + */ + getButtonHtml: function(highlighter, commandName, label) + { + return '' + label + '' + ; + }, + + /** + * Event handler for a toolbar anchor. + */ + handler: function(e) + { + var target = e.target, + className = target.className || '' + ; + + function getValue(name) + { + var r = new RegExp(name + '_(\\w+)'), + match = r.exec(className) + ; + + return match ? match[1] : null; + }; + + var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id), + commandName = getValue('command') + ; + + // execute the toolbar command + if (highlighter && commandName) + sh.toolbar.items[commandName].execute(highlighter); + + // disable default A click behaviour + e.preventDefault(); + }, + + /** Collection of toolbar items. */ + items : { + // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent. + list: ['expandSource', 'help'], + + expandSource: { + getHtml: function(highlighter) + { + if (highlighter.getParam('collapse') != true) + return ''; + + var title = highlighter.getParam('title'); + return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource); + }, + + execute: function(highlighter) + { + var div = getHighlighterDivById(highlighter.id); + removeClass(div, 'collapsed'); + } + }, + + /** Command to display the about dialog window. */ + help: { + execute: function(highlighter) + { + var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'), + doc = wnd.document + ; + + doc.write(sh.config.strings.aboutDialog); + doc.close(); + wnd.focus(); + } + } + } + }, + + /** + * Finds all elements on the page which should be processes by SyntaxHighlighter. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are returned which qualify. + * + * @return {Array} Returns list ofSyntaxHighlighterversion 3.0.83 (July 02 2010)JavaScript code syntax highlighter.Copyright 2004-2010 Alex Gorbatchev.If you like this script, please donate to
keep development active!{ target: DOMElement, params: Object }
objects. + */ + findElements: function(globalParams, element) + { + var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)), + conf = sh.config, + result = [] + ; + + // support for feature + if (conf.useScriptTags) + elements = elements.concat(getSyntaxHighlighterScriptTags()); + + if (elements.length === 0) + return result; + + for (var i = 0; i < elements.length; i++) + { + var item = { + target: elements[i], + // local params take precedence over globals + params: merge(globalParams, parseParams(elements[i].className)) + }; + + if (item.params['brush'] == null) + continue; + + result.push(item); + } + + return result; + }, + + /** + * Shorthand to highlight all elements on the page that are marked as + * SyntaxHighlighter source code. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are highlighted. + */ + highlight: function(globalParams, element) + { + var elements = this.findElements(globalParams, element), + propertyName = 'innerHTML', + highlighter = null, + conf = sh.config + ; + + if (elements.length === 0) + return; + + for (var i = 0; i < elements.length; i++) + { + var element = elements[i], + target = element.target, + params = element.params, + brushName = params.brush, + code + ; + + if (brushName == null) + continue; + + // Instantiate a brush + if (params['html-script'] == 'true' || sh.defaults['html-script'] == true) + { + highlighter = new sh.HtmlScript(brushName); + brushName = 'htmlscript'; + } + else + { + var brush = findBrush(brushName); + + if (brush) + highlighter = new brush(); + else + continue; + } + + code = target[propertyName]; + + // remove CDATA from tags if it's present + if (conf.useScriptTags) + code = stripCData(code); + + // Inject title if the attribute is present + if ((target.title || '') != '') + params.title = target.title; + + params['brush'] = brushName; + highlighter.init(params); + element = highlighter.getDiv(code); + + // carry over ID + if ((target.id || '') != '') + element.id = target.id; + + target.parentNode.replaceChild(element, target); + } + }, + + /** + * Main entry point for the SyntaxHighlighter. + * @param {Object} params Optional params to apply to all highlighted elements. + */ + all: function(params) + { + attachEvent( + window, + 'load', + function() { sh.highlight(params); } + ); + } +}; // end of sh + +sh['all'] = sh.all; +sh['highlight'] = sh.highlight; + +/** + * Checks if target DOM elements has specified CSS class. + * @param {DOMElement} target Target DOM element to check. + * @param {String} className Name of the CSS class to check for. + * @return {Boolean} Returns true if class name is present, false otherwise. + */ +function hasClass(target, className) +{ + return target.className.indexOf(className) != -1; +}; + +/** + * Adds CSS class name to the target DOM element. + * @param {DOMElement} target Target DOM element. + * @param {String} className New CSS class to add. + */ +function addClass(target, className) +{ + if (!hasClass(target, className)) + target.className += ' ' + className; +}; + +/** + * Removes CSS class name from the target DOM element. + * @param {DOMElement} target Target DOM element. + * @param {String} className CSS class to remove. + */ +function removeClass(target, className) +{ + target.className = target.className.replace(className, ''); +}; + +/** + * Converts the source to array object. Mostly used for function arguments and + * lists returned by getElementsByTagName() which aren't Array objects. + * @param {List} source Source list. + * @return {Array} Returns array. + */ +function toArray(source) +{ + var result = []; + + for (var i = 0; i < source.length; i++) + result.push(source[i]); + + return result; +}; + +/** + * Splits block of text into lines. + * @param {String} block Block of text. + * @return {Array} Returns array of lines. + */ +function splitLines(block) +{ + return block.split('\n'); +} + +/** + * Generates HTML ID for the highlighter. + * @param {String} highlighterId Highlighter ID. + * @return {String} Returns HTML ID. + */ +function getHighlighterId(id) +{ + var prefix = 'highlighter_'; + return id.indexOf(prefix) == 0 ? id : prefix + id; +}; + +/** + * Finds Highlighter instance by ID. + * @param {String} highlighterId Highlighter ID. + * @return {Highlighter} Returns instance of the highlighter. + */ +function getHighlighterById(id) +{ + return sh.vars.highlighters[getHighlighterId(id)]; +}; + +/** + * Finds highlighter's DIV container. + * @param {String} highlighterId Highlighter ID. + * @return {Element} Returns highlighter's DIV element. + */ +function getHighlighterDivById(id) +{ + return document.getElementById(getHighlighterId(id)); +}; + +/** + * Stores highlighter so that getHighlighterById() can do its thing. Each + * highlighter must call this method to preserve itself. + * @param {Highilghter} highlighter Highlighter instance. + */ +function storeHighlighter(highlighter) +{ + sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter; +}; + +/** + * Looks for a child or parent node which has specified classname. + * Equivalent to jQuery's $(container).find(".className") + * @param {Element} target Target element. + * @param {String} search Class name or node name to look for. + * @param {Boolean} reverse If set to true, will go up the node tree instead of down. + * @return {Element} Returns found child or parent element on null. + */ +function findElement(target, search, reverse /* optional */) +{ + if (target == null) + return null; + + var nodes = reverse != true ? target.childNodes : [ target.parentNode ], + propertyToFind = { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName', + expectedValue, + found + ; + + expectedValue = propertyToFind != 'nodeName' + ? search.substr(1) + : search.toUpperCase() + ; + + // main return of the found node + if ((target[propertyToFind] || '').indexOf(expectedValue) != -1) + return target; + + for (var i = 0; nodes && i < nodes.length && found == null; i++) + found = findElement(nodes[i], search, reverse); + + return found; +}; + +/** + * Looks for a parent node which has specified classname. + * This is an alias tofindElement(container, className, true)
. + * @param {Element} target Target element. + * @param {String} className Class name to look for. + * @return {Element} Returns found parent element on null. + */ +function findParentElement(target, className) +{ + return findElement(target, className, true); +}; + +/** + * Finds an index of element in the array. + * @ignore + * @param {Object} searchElement + * @param {Number} fromIndex + * @return {Number} Returns index of element if found; -1 otherwise. + */ +function indexOf(array, searchElement, fromIndex) +{ + fromIndex = Math.max(fromIndex || 0, 0); + + for (var i = fromIndex; i < array.length; i++) + if(array[i] == searchElement) + return i; + + return -1; +}; + +/** + * Generates a unique element ID. + */ +function guid(prefix) +{ + return (prefix || '') + Math.round(Math.random() * 1000000).toString(); +}; + +/** + * Merges two objects. Values from obj2 override values in obj1. + * Function is NOT recursive and works only for one dimensional objects. + * @param {Object} obj1 First object. + * @param {Object} obj2 Second object. + * @return {Object} Returns combination of both objects. + */ +function merge(obj1, obj2) +{ + var result = {}, name; + + for (name in obj1) + result[name] = obj1[name]; + + for (name in obj2) + result[name] = obj2[name]; + + return result; +}; + +/** + * Attempts to convert string to boolean. + * @param {String} value Input string. + * @return {Boolean} Returns true if input was "true", false if input was "false" and value otherwise. + */ +function toBoolean(value) +{ + var result = { "true" : true, "false" : false }[value]; + return result == null ? value : result; +}; + +/** + * Opens up a centered popup window. + * @param {String} url URL to open in the window. + * @param {String} name Popup name. + * @param {int} width Popup width. + * @param {int} height Popup height. + * @param {String} options window.open() options. + * @return {Window} Returns window instance. + */ +function popup(url, name, width, height, options) +{ + var x = (screen.width - width) / 2, + y = (screen.height - height) / 2 + ; + + options += ', left=' + x + + ', top=' + y + + ', width=' + width + + ', height=' + height + ; + options = options.replace(/^,/, ''); + + var win = window.open(url, name, options); + win.focus(); + return win; +}; + +/** + * Adds event handler to the target object. + * @param {Object} obj Target object. + * @param {String} type Name of the event. + * @param {Function} func Handling function. + */ +function attachEvent(obj, type, func, scope) +{ + function handler(e) + { + e = e || window.event; + + if (!e.target) + { + e.target = e.srcElement; + e.preventDefault = function() + { + this.returnValue = false; + }; + } + + func.call(scope || window, e); + }; + + if (obj.attachEvent) + { + obj.attachEvent('on' + type, handler); + } + else + { + obj.addEventListener(type, handler, false); + } +}; + +/** + * Displays an alert. + * @param {String} str String to display. + */ +function alert(str) +{ + window.alert(sh.config.strings.alert + str); +}; + +/** + * Finds a brush by its alias. + * + * @param {String} alias Brush alias. + * @param {Boolean} showAlert Suppresses the alert if false. + * @return {Brush} Returns bursh constructor if found, null otherwise. + */ +function findBrush(alias, showAlert) +{ + var brushes = sh.vars.discoveredBrushes, + result = null + ; + + if (brushes == null) + { + brushes = {}; + + // Find all brushes + for (var brush in sh.brushes) + { + var info = sh.brushes[brush], + aliases = info.aliases + ; + + if (aliases == null) + continue; + + // keep the brush name + info.brushName = brush.toLowerCase(); + + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = brush; + } + + sh.vars.discoveredBrushes = brushes; + } + + result = sh.brushes[brushes[alias]]; + + if (result == null && showAlert != false) + alert(sh.config.strings.noBrush + alias); + + return result; +}; + +/** + * Executes a callback on each line and replaces each line with result from the callback. + * @param {Object} str Input string. + * @param {Object} callback Callback function taking one string argument and returning a string. + */ +function eachLine(str, callback) +{ + var lines = splitLines(str); + + for (var i = 0; i < lines.length; i++) + lines[i] = callback(lines[i], i); + + return lines.join('\n'); +}; + +/** + * This is a special trim which only removes first and last empty lines + * and doesn't affect valid leading space on the first line. + * + * @param {String} str Input string + * @return {String} Returns string without empty first and last lines. + */ +function trimFirstAndLastLines(str) +{ + return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, ''); +}; + +/** + * Parses key/value pairs into hash object. + * + * Understands the following formats: + * - name: word; + * - name: [word, word]; + * - name: "string"; + * - name: 'string'; + * + * For example: + * name1: value; name2: [value, value]; name3: 'value' + * + * @param {String} str Input string. + * @return {Object} Returns deserialized object. + */ +function parseParams(str) +{ + var match, + result = {}, + arrayRegex = new XRegExp("^\\[(?(.*?))\\]$"), + regex = new XRegExp( + "(? [\\w-]+)" + + "\\s*:\\s*" + + "(? " + + "[\\w-%#]+|" + // word + "\\[.*?\\]|" + // [] array + '".*?"|' + // "" string + "'.*?'" + // '' string + ")\\s*;?", + "g" + ) + ; + + while ((match = regex.exec(str)) != null) + { + var value = match.value + .replace(/^['"]|['"]$/g, '') // strip quotes from end of strings + ; + + // try to parse array value + if (value != null && arrayRegex.test(value)) + { + var m = arrayRegex.exec(value); + value = m.values.length > 0 ? m.values.split(/\s*,\s*/) : []; + } + + result[match.name] = value; + } + + return result; +}; + +/** + * Wraps each line of the string into tag with given style applied to it. + * + * @param {String} str Input string. + * @param {String} css Style name to apply to the string. + * @return {String} Returns input string with each line surrounded by tag. + */ +function wrapLinesWithCode(str, css) +{ + if (str == null || str.length == 0 || str == '\n') + return str; + + str = str.replace(/... to them so that + // leading spaces aren't included. + if (css != null) + str = eachLine(str, function(line) + { + if (line.length == 0) + return ''; + + var spaces = ''; + + line = line.replace(/^( | )+/, function(s) + { + spaces = s; + return ''; + }); + + if (line.length == 0) + return spaces; + + return spaces + '
' + line + '
'; + }); + + return str; +}; + +/** + * Pads number with zeros until it's length is the same as given length. + * + * @param {Number} number Number to pad. + * @param {Number} length Max string length with. + * @return {String} Returns a string padded with proper amount of '0'. + */ +function padNumber(number, length) +{ + var result = number.toString(); + + while (result.length < length) + result = '0' + result; + + return result; +}; + +/** + * Replaces tabs with spaces. + * + * @param {String} code Source code. + * @param {Number} tabSize Size of the tab. + * @return {String} Returns code with all tabs replaces by spaces. + */ +function processTabs(code, tabSize) +{ + var tab = ''; + + for (var i = 0; i < tabSize; i++) + tab += ' '; + + return code.replace(/\t/g, tab); +}; + +/** + * Replaces tabs with smart spaces. + * + * @param {String} code Code to fix the tabs in. + * @param {Number} tabSize Number of spaces in a column. + * @return {String} Returns code with all tabs replaces with roper amount of spaces. + */ +function processSmartTabs(code, tabSize) +{ + var lines = splitLines(code), + tab = '\t', + spaces = '' + ; + + // Create a string with 1000 spaces to copy spaces from... + // It's assumed that there would be no indentation longer than that. + for (var i = 0; i < 50; i++) + spaces += ' '; // 20 spaces * 50 + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function insertSpaces(line, pos, count) + { + return line.substr(0, pos) + + spaces.substr(0, count) + + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab + ; + }; + + // Go through all the lines and do the 'smart tabs' magic. + code = eachLine(code, function(line) + { + if (line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while ((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + line = insertSpaces(line, pos, spaces); + } + + return line; + }); + + return code; +}; + +/** + * Performs various string fixes based on configuration. + */ +function fixInputString(str) +{ + var br = /
|<br\s*\/?>/gi; + + if (sh.config.bloggerMode == true) + str = str.replace(br, '\n'); + + if (sh.config.stripBrs == true) + str = str.replace(br, ''); + + return str; +}; + +/** + * Removes all white space at the begining and end of a string. + * + * @param {String} str String to trim. + * @return {String} Returns string without leading and following white space characters. + */ +function trim(str) +{ + return str.replace(/^\s+|\s+$/g, ''); +}; + +/** + * Unindents a block of text by the lowest common indent amount. + * @param {String} str Text to unindent. + * @return {String} Returns unindented text block. + */ +function unindent(str) +{ + var lines = splitLines(fixInputString(str)), + indents = new Array(), + regex = /^\s*/, + min = 1000 + ; + + // go through every line and check for common number of indents + for (var i = 0; i < lines.length && min > 0; i++) + { + var line = lines[i]; + + if (trim(line).length == 0) + continue; + + var matches = regex.exec(line); + + // In the event that just one line doesn't have leading white space + // we can't unindent anything, so bail completely. + if (matches == null) + return str; + + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if (min > 0) + for (var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); +}; + +/** + * Callback method for Array.sort() which sorts matches by + * index position and then by length. + * + * @param {Match} m1 Left object. + * @param {Match} m2 Right object. + * @return {Number} Returns -1, 0 or -1 as a comparison result. + */ +function matchesSortCallback(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + + return 0; +}; + +/** + * Executes given regular expression on provided code and returns all + * matches that are found. + * + * @param {String} code Code to execute regular expression on. + * @param {Object} regex Regular expression item info fromregexList
collection. + * @return {Array} Returns a list of Match objects. + */ +function getMatches(code, regexInfo) +{ + function defaultAdd(match, regexInfo) + { + return match[0]; + }; + + var index = 0, + match = null, + matches = [], + func = regexInfo.func ? regexInfo.func : defaultAdd + ; + + while((match = regexInfo.regex.exec(code)) != null) + { + var resultMatch = func(match, regexInfo); + + if (typeof(resultMatch) == 'string') + resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)]; + + matches = matches.concat(resultMatch); + } + + return matches; +}; + +/** + * Turns all URLs in the code into tags. + * @param {String} code Input code. + * @return {String} Returns code with
' + spaces + '
' : '') + line
+ );
+ }
+
+ return html;
+ },
+
+ /**
+ * Returns HTML for the table title or empty string if title is null.
+ */
+ getTitleHtml: function(title)
+ {
+ return title ? '' + this.getLineNumbersHtml(code) + ' | ' : '') + + ''
+ + ' '
+ + html
+ + ' '
+ + ' | '
+ + '
.*?)" +
+ "(?" + regexGroup.right.source + ")",
+ "sgi"
+ )
+ };
+ }
+}; // end of Highlighter
+
+return sh;
+}(); // end of anonymous function
+
+// CommonJS
+typeof(exports) != 'undefined' ? exports['SyntaxHighlighter'] = SyntaxHighlighter : null;
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js
new file mode 100644
index 0000000..36951c9
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/src/shLegacy.js
@@ -0,0 +1,157 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+var dp = {
+ SyntaxHighlighter : {}
+};
+
+dp.SyntaxHighlighter = {
+ parseParams: function(
+ input,
+ showGutter,
+ showControls,
+ collapseAll,
+ firstLine,
+ showColumns
+ )
+ {
+ function getValue(list, name)
+ {
+ var regex = new XRegExp('^' + name + '\\[(?\\w+)\\]$', 'gi'),
+ match = null
+ ;
+
+ for (var i = 0; i < list.length; i++)
+ if ((match = regex.exec(list[i])) != null)
+ return match.value;
+
+ return null;
+ };
+
+ function defaultValue(value, def)
+ {
+ return value != null ? value : def;
+ };
+
+ function asString(value)
+ {
+ return value != null ? value.toString() : null;
+ };
+
+ var parts = input.split(':'),
+ brushName = parts[0],
+ options = {},
+ straight = { 'true' : true }
+ reverse = { 'true' : false },
+ result = null,
+ defaults = SyntaxHighlighter.defaults
+ ;
+
+ for (var i in parts)
+ options[parts[i]] = 'true';
+
+ showGutter = asString(defaultValue(showGutter, defaults.gutter));
+ showControls = asString(defaultValue(showControls, defaults.toolbar));
+ collapseAll = asString(defaultValue(collapseAll, defaults.collapse));
+ showColumns = asString(defaultValue(showColumns, defaults.ruler));
+ firstLine = asString(defaultValue(firstLine, defaults['first-line']));
+
+ return {
+ brush : brushName,
+ gutter : defaultValue(reverse[options.nogutter], showGutter),
+ toolbar : defaultValue(reverse[options.nocontrols], showControls),
+ collapse : defaultValue(straight[options.collapse], collapseAll),
+ // ruler : defaultValue(straight[options.showcolumns], showColumns),
+ 'first-line' : defaultValue(getValue(parts, 'firstline'), firstLine)
+ };
+ },
+
+ HighlightAll: function(
+ name,
+ showGutter /* optional */,
+ showControls /* optional */,
+ collapseAll /* optional */,
+ firstLine /* optional */,
+ showColumns /* optional */
+ )
+ {
+ function findValue()
+ {
+ var a = arguments;
+
+ for (var i = 0; i < a.length; i++)
+ {
+ if (a[i] === null)
+ continue;
+
+ if (typeof(a[i]) == 'string' && a[i] != '')
+ return a[i] + '';
+
+ if (typeof(a[i]) == 'object' && a[i].value != '')
+ return a[i].value + '';
+ }
+
+ return null;
+ };
+
+ function findTagsByName(list, name, tagName)
+ {
+ var tags = document.getElementsByTagName(tagName);
+
+ for (var i = 0; i < tags.length; i++)
+ if (tags[i].getAttribute('name') == name)
+ list.push(tags[i]);
+ }
+
+ var elements = [],
+ highlighter = null,
+ registered = {},
+ propertyName = 'innerHTML'
+ ;
+
+ // for some reason IE doesn't find by name, however it does see them just fine by tag name...
+ findTagsByName(elements, name, 'pre');
+ findTagsByName(elements, name, 'textarea');
+
+ if (elements.length === 0)
+ return;
+
+ for (var i = 0; i < elements.length; i++)
+ {
+ var element = elements[i],
+ params = findValue(
+ element.attributes['class'], element.className,
+ element.attributes['language'], element.language
+ ),
+ language = ''
+ ;
+
+ if (params === null)
+ continue;
+
+ params = dp.SyntaxHighlighter.parseParams(
+ params,
+ showGutter,
+ showControls,
+ collapseAll,
+ firstLine,
+ showColumns
+ );
+
+ SyntaxHighlighter.highlight(params, element);
+ }
+ }
+};
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css
new file mode 100644
index 0000000..34f6864
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCore.css
@@ -0,0 +1,226 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css
new file mode 100644
index 0000000..08f9e10
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDefault.css
@@ -0,0 +1,328 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #e0e0e0 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css
new file mode 100644
index 0000000..1db1f70
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreDjango.css
@@ -0,0 +1,331 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #233729 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #497958 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #41a83e !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #41a83e !important;
+ color: #0a2b1d !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #96dd3b !important;
+ background: black !important;
+ border: 1px solid #41a83e !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #41a83e !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #ffe862 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #336442 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #9df39f !important;
+}
+.syntaxhighlighter .keyword {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #96dd3b !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #eb939a !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #edef7d !important;
+}
+
+.syntaxhighlighter .comments {
+ font-style: italic !important;
+}
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css
new file mode 100644
index 0000000..a45de9f
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEclipse.css
@@ -0,0 +1,339 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #c3defe !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #787878 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #d4d0c8 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #d4d0c8 !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3f5fbf !important;
+ background: white !important;
+ border: 1px solid #d4d0c8 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #a0a0a0 !important;
+ background: #d4d0c8 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #a0a0a0 !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #2a00ff !important;
+}
+.syntaxhighlighter .keyword {
+ color: #7f0055 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #646464 !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #7f0055 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .xml .keyword {
+ color: #3f7f7f !important;
+ font-weight: normal !important;
+}
+.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a {
+ color: #7f007f !important;
+}
+.syntaxhighlighter .xml .string {
+ font-style: italic !important;
+ color: #2a00ff !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css
new file mode 100644
index 0000000..706c77a
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreEmacs.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2a3133 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #990000 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #990000 !important;
+ color: black !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #ebdb8d !important;
+ background: black !important;
+ border: 1px solid #990000 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #990000 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .keyword {
+ color: aqua !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #aec4de !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #81cef9 !important;
+}
+.syntaxhighlighter .constants {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: aqua !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #aec4de !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css
new file mode 100644
index 0000000..6101eba
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreFadeToGrey.css
@@ -0,0 +1,328 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2c2c29 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: white !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #3185b9 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #3185b9 !important;
+ color: #121212 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3185b9 !important;
+ background: black !important;
+ border: 1px solid #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #3185b9 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #96daff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: white !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #696854 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #e3e658 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #898989 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #aaaaaa !important;
+}
+.syntaxhighlighter .constants {
+ color: #96daff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #d01d33 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ffc074 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #4a8cdb !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #96daff !important;
+}
+
+.syntaxhighlighter .functions {
+ font-weight: bold !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css
new file mode 100644
index 0000000..2923ce7
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMDUltra.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: lime !important;
+}
+.syntaxhighlighter .gutter {
+ color: #38566f !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #222222 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: lime !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #aaaaff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: lime !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: lime !important;
+}
+.syntaxhighlighter .keyword {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: aqua !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff8000 !important;
+}
+.syntaxhighlighter .constants {
+ color: yellow !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #aaaaff !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: red !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: yellow !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css
new file mode 100644
index 0000000..e3733ee
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreMidnight.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #38566f !important;
+}
+.syntaxhighlighter table caption {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #0f192a !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #d1edff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #b43d3d !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #b43d3d !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #f8bb00 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css
new file mode 100644
index 0000000..d093683
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shCoreRDark.css
@@ -0,0 +1,324 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter a,
+.syntaxhighlighter div,
+.syntaxhighlighter code,
+.syntaxhighlighter table,
+.syntaxhighlighter table td,
+.syntaxhighlighter table tr,
+.syntaxhighlighter table tbody,
+.syntaxhighlighter table thead,
+.syntaxhighlighter table caption,
+.syntaxhighlighter textarea {
+ -moz-border-radius: 0 0 0 0 !important;
+ -webkit-border-radius: 0 0 0 0 !important;
+ background: none !important;
+ border: 0 !important;
+ bottom: auto !important;
+ float: none !important;
+ height: auto !important;
+ left: auto !important;
+ line-height: 1.1em !important;
+ margin: 0 !important;
+ outline: 0 !important;
+ overflow: visible !important;
+ padding: 0 !important;
+ position: static !important;
+ right: auto !important;
+ text-align: left !important;
+ top: auto !important;
+ vertical-align: baseline !important;
+ width: auto !important;
+ box-sizing: content-box !important;
+ font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
+ font-weight: normal !important;
+ font-style: normal !important;
+ font-size: 1em !important;
+ min-height: inherit !important;
+ min-height: auto !important;
+}
+
+.syntaxhighlighter {
+ width: 100% !important;
+ margin: 1em 0 1em 0 !important;
+ position: relative !important;
+ overflow: auto !important;
+ font-size: 1em !important;
+}
+.syntaxhighlighter.source {
+ overflow: hidden !important;
+}
+.syntaxhighlighter .bold {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .italic {
+ font-style: italic !important;
+}
+.syntaxhighlighter .line {
+ white-space: pre !important;
+}
+.syntaxhighlighter table {
+ width: 100% !important;
+}
+.syntaxhighlighter table caption {
+ text-align: left !important;
+ padding: .5em 0 0.5em 1em !important;
+}
+.syntaxhighlighter table td.code {
+ width: 100% !important;
+}
+.syntaxhighlighter table td.code .container {
+ position: relative !important;
+}
+.syntaxhighlighter table td.code .container textarea {
+ box-sizing: border-box !important;
+ position: absolute !important;
+ left: 0 !important;
+ top: 0 !important;
+ width: 100% !important;
+ height: 100% !important;
+ border: none !important;
+ background: white !important;
+ padding-left: 1em !important;
+ overflow: hidden !important;
+ white-space: pre !important;
+}
+.syntaxhighlighter table td.gutter .line {
+ text-align: right !important;
+ padding: 0 0.5em 0 1em !important;
+}
+.syntaxhighlighter table td.code .line {
+ padding: 0 1em !important;
+}
+.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
+ padding-left: 0em !important;
+}
+.syntaxhighlighter.show {
+ display: block !important;
+}
+.syntaxhighlighter.collapsed table {
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ padding: 0.1em 0.8em 0em 0.8em !important;
+ font-size: 1em !important;
+ position: static !important;
+ width: auto !important;
+ height: auto !important;
+}
+.syntaxhighlighter.collapsed .toolbar span {
+ display: inline !important;
+ margin-right: 1em !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a {
+ padding: 0 !important;
+ display: none !important;
+}
+.syntaxhighlighter.collapsed .toolbar span a.expandSource {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar {
+ position: absolute !important;
+ right: 1px !important;
+ top: 1px !important;
+ width: 11px !important;
+ height: 11px !important;
+ font-size: 10px !important;
+ z-index: 10 !important;
+}
+.syntaxhighlighter .toolbar span.title {
+ display: inline !important;
+}
+.syntaxhighlighter .toolbar a {
+ display: block !important;
+ text-align: center !important;
+ text-decoration: none !important;
+ padding-top: 1px !important;
+}
+.syntaxhighlighter .toolbar a.expandSource {
+ display: none !important;
+}
+.syntaxhighlighter.ie {
+ font-size: .9em !important;
+ padding: 1px 0 1px 0 !important;
+}
+.syntaxhighlighter.ie .toolbar {
+ line-height: 8px !important;
+}
+.syntaxhighlighter.ie .toolbar a {
+ padding-top: 0px !important;
+}
+.syntaxhighlighter.printing .line.alt1 .content,
+.syntaxhighlighter.printing .line.alt2 .content,
+.syntaxhighlighter.printing .line.highlighted .number,
+.syntaxhighlighter.printing .line.highlighted.alt1 .content,
+.syntaxhighlighter.printing .line.highlighted.alt2 .content {
+ background: none !important;
+}
+.syntaxhighlighter.printing .line .number {
+ color: #bbbbbb !important;
+}
+.syntaxhighlighter.printing .line .content {
+ color: black !important;
+}
+.syntaxhighlighter.printing .toolbar {
+ display: none !important;
+}
+.syntaxhighlighter.printing a {
+ text-decoration: none !important;
+}
+.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
+ color: black !important;
+}
+.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
+ color: blue !important;
+}
+.syntaxhighlighter.printing .keyword {
+ color: #006699 !important;
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter.printing .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter.printing .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter.printing .script {
+ font-weight: bold !important;
+}
+.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
+ color: red !important;
+}
+.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
+ color: black !important;
+}
+
+.syntaxhighlighter {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #323e41 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter table caption {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #1b2426 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #5ba1cf !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #878a85 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #5ba1cf !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css
new file mode 100644
index 0000000..6a121ad
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDefault.css
@@ -0,0 +1,119 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: black !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ background-color: #E7E5DC !important;
+ border-right: 3px solid #6ce26c !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #6ce26c !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: blue !important;
+ background: white !important;
+ border: 1px solid #6ce26c !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: blue !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ display : none;
+ background: #6ce26c !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: black !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #008200 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: blue !important;
+}
+.syntaxhighlighter .keyword {
+ color: #006699 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: gray !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #006699 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css
new file mode 100644
index 0000000..d8b4313
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeDjango.css
@@ -0,0 +1,120 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0a2b1d !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #233729 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #497958 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #41a83e !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #41a83e !important;
+ color: #0a2b1d !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #96dd3b !important;
+ background: black !important;
+ border: 1px solid #41a83e !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #41a83e !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #ffe862 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #f8f8f8 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #336442 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #9df39f !important;
+}
+.syntaxhighlighter .keyword {
+ color: #96dd3b !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #96dd3b !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #eb939a !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #91bb9e !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #edef7d !important;
+}
+
+.syntaxhighlighter .comments {
+ font-style: italic !important;
+}
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css
new file mode 100644
index 0000000..77377d9
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEclipse.css
@@ -0,0 +1,128 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: white !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #c3defe !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: black !important;
+}
+.syntaxhighlighter .gutter {
+ color: #787878 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #d4d0c8 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #d4d0c8 !important;
+ color: white !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3f5fbf !important;
+ background: white !important;
+ border: 1px solid #d4d0c8 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #a0a0a0 !important;
+ background: #d4d0c8 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #a0a0a0 !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: red !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: black !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #3f5fbf !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #2a00ff !important;
+}
+.syntaxhighlighter .keyword {
+ color: #7f0055 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #646464 !important;
+}
+.syntaxhighlighter .variable {
+ color: #aa7700 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .constants {
+ color: #0066cc !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #7f0055 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: gray !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff1493 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: red !important;
+}
+
+.syntaxhighlighter .keyword {
+ font-weight: bold !important;
+}
+.syntaxhighlighter .xml .keyword {
+ color: #3f7f7f !important;
+ font-weight: normal !important;
+}
+.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a {
+ color: #7f007f !important;
+}
+.syntaxhighlighter .xml .string {
+ font-style: italic !important;
+ color: #2a00ff !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css
new file mode 100644
index 0000000..dae5053
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeEmacs.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: black !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2a3133 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #990000 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #990000 !important;
+ color: black !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #ebdb8d !important;
+ background: black !important;
+ border: 1px solid #990000 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #990000 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d3d3d3 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .keyword {
+ color: aqua !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #aec4de !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #81cef9 !important;
+}
+.syntaxhighlighter .constants {
+ color: #ff9e7b !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: aqua !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ebdb8d !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #ff7d27 !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #aec4de !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css
new file mode 100644
index 0000000..8fbd871
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeFadeToGrey.css
@@ -0,0 +1,117 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #121212 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #2c2c29 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: white !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #3185b9 !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #3185b9 !important;
+ color: #121212 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #3185b9 !important;
+ background: black !important;
+ border: 1px solid #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #3185b9 !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #3185b9 !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #96daff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: white !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #696854 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #e3e658 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #d01d33 !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #898989 !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #aaaaaa !important;
+}
+.syntaxhighlighter .constants {
+ color: #96daff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #d01d33 !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #ffc074 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: #4a8cdb !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #96daff !important;
+}
+
+.syntaxhighlighter .functions {
+ font-weight: bold !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css
new file mode 100644
index 0000000..f4db39c
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMDUltra.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #222222 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: white !important;
+}
+.syntaxhighlighter table caption {
+ color: lime !important;
+}
+.syntaxhighlighter .gutter {
+ color: #38566f !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #222222 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: lime !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #aaaaff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #9ccff4 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: lime !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: lime !important;
+}
+.syntaxhighlighter .keyword {
+ color: #aaaaff !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: aqua !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ff8000 !important;
+}
+.syntaxhighlighter .constants {
+ color: yellow !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #aaaaff !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: red !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: yellow !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css
new file mode 100644
index 0000000..c49563c
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeMidnight.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #0f192a !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #253e5a !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #38566f !important;
+}
+.syntaxhighlighter table caption {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #0f192a !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #428bdd !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: #d1edff !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #d1edff !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #428bdd !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #1dc116 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #b43d3d !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #8aa6c1 !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #f7e741 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #b43d3d !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #f8bb00 !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css
new file mode 100644
index 0000000..6305a10
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/SyntaxHighlighter/styles/shThemeRDark.css
@@ -0,0 +1,113 @@
+/**
+ * SyntaxHighlighter
+ * http://alexgorbatchev.com/SyntaxHighlighter
+ *
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
+ *
+ * @version
+ * 3.0.83 (July 02 2010)
+ *
+ * @copyright
+ * Copyright (C) 2004-2010 Alex Gorbatchev.
+ *
+ * @license
+ * Dual licensed under the MIT and GPL licenses.
+ */
+.syntaxhighlighter {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt1 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.alt2 {
+ background-color: #1b2426 !important;
+}
+.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
+ background-color: #323e41 !important;
+}
+.syntaxhighlighter .line.highlighted.number {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter table caption {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .gutter {
+ color: #afafaf !important;
+}
+.syntaxhighlighter .gutter .line {
+ border-right: 3px solid #435a5f !important;
+}
+.syntaxhighlighter .gutter .line.highlighted {
+ background-color: #435a5f !important;
+ color: #1b2426 !important;
+}
+.syntaxhighlighter.printing .line .content {
+ border: none !important;
+}
+.syntaxhighlighter.collapsed {
+ overflow: visible !important;
+}
+.syntaxhighlighter.collapsed .toolbar {
+ color: #5ba1cf !important;
+ background: black !important;
+ border: 1px solid #435a5f !important;
+}
+.syntaxhighlighter.collapsed .toolbar a {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter.collapsed .toolbar a:hover {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .toolbar {
+ color: white !important;
+ background: #435a5f !important;
+ border: none !important;
+}
+.syntaxhighlighter .toolbar a {
+ color: white !important;
+}
+.syntaxhighlighter .toolbar a:hover {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
+ color: #b9bdb6 !important;
+}
+.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
+ color: #878a85 !important;
+}
+.syntaxhighlighter .string, .syntaxhighlighter .string a {
+ color: #5ce638 !important;
+}
+.syntaxhighlighter .keyword {
+ color: #5ba1cf !important;
+}
+.syntaxhighlighter .preprocessor {
+ color: #435a5f !important;
+}
+.syntaxhighlighter .variable {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .value {
+ color: #009900 !important;
+}
+.syntaxhighlighter .functions {
+ color: #ffaa3e !important;
+}
+.syntaxhighlighter .constants {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .script {
+ font-weight: bold !important;
+ color: #5ba1cf !important;
+ background-color: none !important;
+}
+.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
+ color: #e0e8ff !important;
+}
+.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
+ color: white !important;
+}
+.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
+ color: #ffaa3e !important;
+}
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/bootstrap.js b/upstream/clipper-6.4.2/Documentation/Scripts/bootstrap.js
new file mode 100644
index 0000000..de87089
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/bootstrap.js
@@ -0,0 +1,2 @@
+// This file may be used to bootstrap the DOM via JavaScript...
+SyntaxHighlighter.all();
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/expandable.js b/upstream/clipper-6.4.2/Documentation/Scripts/expandable.js
new file mode 100644
index 0000000..548fb57
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/expandable.js
@@ -0,0 +1,190 @@
+/*
+ * Expandable list implementation.
+ * by David Lindquist
+ * See:
+ * http://www.gazingus.org/html/DOM-Scripted_Lists_Revisited.html
+ * Modifies lists so that sublists can be hidden and shown by means of
+ * a switch. The switch is a node inserted into the DOM tree as the
+ * first child of the list item containing the sublist.
+ */
+
+// The script will only be applied to lists containing this class name,
+// e.g.: ";
+var p = 0;
+var j = 0;
+
+while (isDefined("td_" + ++j)) {
+ sH += "" : ">";
+ sH += eval("td_" + j) + " ";
+ if (isDefined("td_" + j + "_1"))
+ pT[p++] = "_" + j;
+}
+
+sH += " ";
+sH += "
";
+document.write(sH);
+
+for (var q = 0; typeof(pT[q]) != "undefined"; q++) {
+ sT = pT[q];
+ sH = "";
+ j = 0;
+ sH += "" : ">";
+ sH += eval("td" + sT + "_" + j) + " ";
+ if (isDefined("td" + sT + "_" + j + "_1"))
+ pT[p++] = sT + "_" + j;
+ }
+ sH += "
";
+ document.write(sH);
+}
+document.getElementById("mainmenu").style.visibility = "visible";
+
diff --git a/upstream/clipper-6.4.2/Documentation/Styles/default.css b/upstream/clipper-6.4.2/Documentation/Styles/default.css
new file mode 100644
index 0000000..12dbde6
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Styles/default.css
@@ -0,0 +1,304 @@
+p.Body {
+ margin-left: 1cm;
+ margin-right: 0.5cm;
+}
+
+p.Hierarchy {
+ margin-top: 0;
+ margin-left : 1cm;
+ margin-bottom : 0;
+ font-size : 90%;
+}
+
+.EmptyRef {
+ font-weight: bold;
+}
+
+.API {
+ color: #700070;
+ font-style: italic;
+}
+
+.Code {
+ margin-left: 1cm;
+ margin-right: 1cm;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+p.Decl {
+ font-family: "Courier New", Courier, monospace;
+ background-color: #E0E0E0;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+}
+
+p.Decl2 {
+ font-family: "Courier New", Courier, monospace;
+ background-color: #99FF99;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+ font-size : 100%;
+}
+
+p.Decl3 {
+ font-family: "Courier New", Courier, monospace;
+ background-color: #FFBBCC;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+ font-size : 100%;
+}
+
+p.Decl4 {
+ font-family: Verdana, Tahoma, serif;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+}
+
+p.Decl5 {
+ font-family: Verdana, Tahoma, serif;
+ background-color: #99FF99;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+ font-size : 100%;
+}
+
+body {
+ font-family: Verdana, Tahoma, serif;
+ font-size: 80%;
+ margin-left : 2px;
+ margin-top: 2px;
+ margin-right : 2px;
+ margin-top : 2px;
+}
+
+p {
+ margin-top: 5pt;
+ margin-bottom: 5pt;
+}
+
+h1 {
+ font-size: 150%;
+ margin-top: 5pt;
+ margin-bottom: 16pt;
+ margin-left : 0.25cm;
+}
+
+h2 {
+ font-size: 100%;
+ margin-bottom: 4pt;
+ margin-top: 16px;
+ margin-left: 0.25cm;
+ padding-left: 0px;
+}
+
+table {
+ border: none;
+ margin-left: 1cm;
+ border-color: #FFFFFF;
+ margin-right: 0.5cm;
+}
+
+th {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ background-color: #99FF99;
+ padding-right: 6pt;
+ padding-left: 6pt;
+}
+
+td {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ background-color: #F0F0F0;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+td.White {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ background-color: #FFFFFF;
+ padding-right: 4pt;
+ padding-left: 4pt;
+}
+
+table.Banner {
+ color: white;
+ font-size: 9pt;
+ background-color: #9595bd;
+ margin: 1px;
+ padding: 1px, 10px;
+ width: 100%;
+ cellpadding: 0;
+ cellspacing: 0;
+}
+
+td.Banner {
+ background-color: #6060A0;
+ font-size: 9pt;
+ margin: 1px;
+ padding: 1px 10px;
+}
+a:link { color: blue; text-decoration: none }
+a:visited { color: blue; text-decoration: none }
+a:hover { color: black; text-decoration: none; background-color: #d0d0ff }
+table.Home {
+ background-color: #FFFFFF;
+ border: #FFFFFF none;
+ margin: 1px;
+ padding: 0px;
+ border-color: #FFFFFF;
+ /*width: 100%;*/
+}
+table.menu { color: white; background-color: #6060a0; visibility: hidden; cursor: pointer; margin: 1px; padding: 1px 10px; position: static; border: 1px solid; border-color: #272758 #656596 #272758 #272758 }
+table.menudrop { color: white; background-color: #6060a0; visibility: hidden; cursor: pointer; margin: 10px; padding: 5px 10px; position: absolute; border-left: 1px solid #444475 }
+table.menu td { font-size: 8pt; background-color: #6060a0; white-space: nowrap; margin: 1px; padding: 1px 10px; border: #FFFFFF none; }
+table.menudrop td { font-size: 8pt; background-color: #6060a0; white-space: nowrap; margin: 1px; padding: 5px 10px; border: #FFFFFF none; }
+td.Home {
+ background-color: #FFFFFF;
+ padding: 1px 0px;
+ margin: 1px;
+}
+a:link.Banner {
+ text-decoration: none;
+ color: white;
+}
+
+a:visited.Banner {
+ text-decoration: none;
+ color : white;
+}
+
+a:hover.Banner {
+ background-color: #6060A0;
+ text-decoration: none;
+ color: white;
+}
+
+a.Bold {
+ font-weight: bold;
+}
+
+ul li {
+ list-style-position: inside;
+ list-style-type: square;
+ margin-top: 3pt;
+ margin-bottom: 3pt;
+}
+
+ol li {
+ list-style-position: outside;
+ list-style-type: decimal;
+ margin-top: 3pt;
+ margin-bottom: 3pt;
+ margin-left: 0.7cm;
+ padding-left: 2pt;
+}
+
+ul {
+ margin-left: 1cm;
+ margin-top: 8pt;
+ margin-bottom: 8pt;
+}
+
+ol {
+ margin-left: 1cm;
+ margin-top: 8pt;
+ margin-bottom: 8pt;
+}
+
+.Comment {
+ font-style: italic;
+ color: #206020;
+}
+
+.CPPNumeric {
+ color: blue;
+}
+
+.CSharp {
+ color: #2B91AF;
+}
+
+img {
+ margin-top: 0px;
+ margin-right: 0px;
+ margin-bottom: 0px;
+ margin-left: 0px;
+ border-top-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 0px;
+ border-left-width: 0px;
+ padding-top: 0px;
+ padding-right: 0px;
+ padding-bottom: 0px;
+ padding-left: 0px;
+}
+
+span.sub {
+ font-size: 80%;
+ vertical-align: sub;
+}
+
+.Tree {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ margin-left: 1cm;
+ padding-left: 5px;
+ padding-right: 5px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ background-color: #F0F0F0;
+}
+
+span.Menu {
+ font-weight: bold;
+ color: #402000
+}
+
+p.Copyright {font-size: 7pt; color: #808090; text-align: center; font-family: Tahoma, Arial, sans-serif}
+
+.pascalcode {
+ margin-left: 1cm;
+ font-family: "Courier New", Courier, mono;
+}
+#mainmenu { position: static }
+
+.maroon {color: #990000;}
+
+.gray { color: #C0C0C0;}
+
+sup {
+ vertical-align: top; font-size: 0.75em;
+}
\ No newline at end of file
diff --git a/upstream/clipper-6.4.2/Documentation/clipper.chm b/upstream/clipper-6.4.2/Documentation/clipper.chm
new file mode 100644
index 0000000..512fae6
Binary files /dev/null and b/upstream/clipper-6.4.2/Documentation/clipper.chm differ
diff --git a/upstream/clipper-6.4.2/Documentation/default.css b/upstream/clipper-6.4.2/Documentation/default.css
new file mode 100644
index 0000000..12dbde6
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/default.css
@@ -0,0 +1,304 @@
+p.Body {
+ margin-left: 1cm;
+ margin-right: 0.5cm;
+}
+
+p.Hierarchy {
+ margin-top: 0;
+ margin-left : 1cm;
+ margin-bottom : 0;
+ font-size : 90%;
+}
+
+.EmptyRef {
+ font-weight: bold;
+}
+
+.API {
+ color: #700070;
+ font-style: italic;
+}
+
+.Code {
+ margin-left: 1cm;
+ margin-right: 1cm;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+p.Decl {
+ font-family: "Courier New", Courier, monospace;
+ background-color: #E0E0E0;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+}
+
+p.Decl2 {
+ font-family: "Courier New", Courier, monospace;
+ background-color: #99FF99;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+ font-size : 100%;
+}
+
+p.Decl3 {
+ font-family: "Courier New", Courier, monospace;
+ background-color: #FFBBCC;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+ font-size : 100%;
+}
+
+p.Decl4 {
+ font-family: Verdana, Tahoma, serif;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+}
+
+p.Decl5 {
+ font-family: Verdana, Tahoma, serif;
+ background-color: #99FF99;
+ padding-top: 3pt;
+ padding-right: 4pt;
+ padding-left: 6pt;
+ padding-bottom: 3pt;
+ margin-left: 1cm;
+ margin-top: 0px;
+ margin-right: 0.5cm;
+ margin-bottom: 0px;
+ font-size : 100%;
+}
+
+body {
+ font-family: Verdana, Tahoma, serif;
+ font-size: 80%;
+ margin-left : 2px;
+ margin-top: 2px;
+ margin-right : 2px;
+ margin-top : 2px;
+}
+
+p {
+ margin-top: 5pt;
+ margin-bottom: 5pt;
+}
+
+h1 {
+ font-size: 150%;
+ margin-top: 5pt;
+ margin-bottom: 16pt;
+ margin-left : 0.25cm;
+}
+
+h2 {
+ font-size: 100%;
+ margin-bottom: 4pt;
+ margin-top: 16px;
+ margin-left: 0.25cm;
+ padding-left: 0px;
+}
+
+table {
+ border: none;
+ margin-left: 1cm;
+ border-color: #FFFFFF;
+ margin-right: 0.5cm;
+}
+
+th {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ background-color: #99FF99;
+ padding-right: 6pt;
+ padding-left: 6pt;
+}
+
+td {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ background-color: #F0F0F0;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+td.White {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ background-color: #FFFFFF;
+ padding-right: 4pt;
+ padding-left: 4pt;
+}
+
+table.Banner {
+ color: white;
+ font-size: 9pt;
+ background-color: #9595bd;
+ margin: 1px;
+ padding: 1px, 10px;
+ width: 100%;
+ cellpadding: 0;
+ cellspacing: 0;
+}
+
+td.Banner {
+ background-color: #6060A0;
+ font-size: 9pt;
+ margin: 1px;
+ padding: 1px 10px;
+}
+a:link { color: blue; text-decoration: none }
+a:visited { color: blue; text-decoration: none }
+a:hover { color: black; text-decoration: none; background-color: #d0d0ff }
+table.Home {
+ background-color: #FFFFFF;
+ border: #FFFFFF none;
+ margin: 1px;
+ padding: 0px;
+ border-color: #FFFFFF;
+ /*width: 100%;*/
+}
+table.menu { color: white; background-color: #6060a0; visibility: hidden; cursor: pointer; margin: 1px; padding: 1px 10px; position: static; border: 1px solid; border-color: #272758 #656596 #272758 #272758 }
+table.menudrop { color: white; background-color: #6060a0; visibility: hidden; cursor: pointer; margin: 10px; padding: 5px 10px; position: absolute; border-left: 1px solid #444475 }
+table.menu td { font-size: 8pt; background-color: #6060a0; white-space: nowrap; margin: 1px; padding: 1px 10px; border: #FFFFFF none; }
+table.menudrop td { font-size: 8pt; background-color: #6060a0; white-space: nowrap; margin: 1px; padding: 5px 10px; border: #FFFFFF none; }
+td.Home {
+ background-color: #FFFFFF;
+ padding: 1px 0px;
+ margin: 1px;
+}
+a:link.Banner {
+ text-decoration: none;
+ color: white;
+}
+
+a:visited.Banner {
+ text-decoration: none;
+ color : white;
+}
+
+a:hover.Banner {
+ background-color: #6060A0;
+ text-decoration: none;
+ color: white;
+}
+
+a.Bold {
+ font-weight: bold;
+}
+
+ul li {
+ list-style-position: inside;
+ list-style-type: square;
+ margin-top: 3pt;
+ margin-bottom: 3pt;
+}
+
+ol li {
+ list-style-position: outside;
+ list-style-type: decimal;
+ margin-top: 3pt;
+ margin-bottom: 3pt;
+ margin-left: 0.7cm;
+ padding-left: 2pt;
+}
+
+ul {
+ margin-left: 1cm;
+ margin-top: 8pt;
+ margin-bottom: 8pt;
+}
+
+ol {
+ margin-left: 1cm;
+ margin-top: 8pt;
+ margin-bottom: 8pt;
+}
+
+.Comment {
+ font-style: italic;
+ color: #206020;
+}
+
+.CPPNumeric {
+ color: blue;
+}
+
+.CSharp {
+ color: #2B91AF;
+}
+
+img {
+ margin-top: 0px;
+ margin-right: 0px;
+ margin-bottom: 0px;
+ margin-left: 0px;
+ border-top-width: 0px;
+ border-right-width: 0px;
+ border-bottom-width: 0px;
+ border-left-width: 0px;
+ padding-top: 0px;
+ padding-right: 0px;
+ padding-bottom: 0px;
+ padding-left: 0px;
+}
+
+span.sub {
+ font-size: 80%;
+ vertical-align: sub;
+}
+
+.Tree {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ margin-left: 1cm;
+ padding-left: 5px;
+ padding-right: 5px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ background-color: #F0F0F0;
+}
+
+span.Menu {
+ font-weight: bold;
+ color: #402000
+}
+
+p.Copyright {font-size: 7pt; color: #808090; text-align: center; font-family: Tahoma, Arial, sans-serif}
+
+.pascalcode {
+ margin-left: 1cm;
+ font-family: "Courier New", Courier, mono;
+}
+#mainmenu { position: static }
+
+.maroon {color: #990000;}
+
+.gray { color: #C0C0C0;}
+
+sup {
+ vertical-align: top; font-size: 0.75em;
+}
\ No newline at end of file
diff --git a/upstream/clipper-6.4.2/Documentation/index.htm b/upstream/clipper-6.4.2/Documentation/index.htm
new file mode 100644
index 0000000..06e4946
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/index.htm
@@ -0,0 +1,12 @@
+
+
+
+
+
+Redirect
+
+
+If the documentation doesn't open automatically, click here.
+
+
diff --git a/upstream/clipper-6.4.2/Documentation/offset_triginometry.svg b/upstream/clipper-6.4.2/Documentation/offset_triginometry.svg
new file mode 100644
index 0000000..67e8bd3
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/offset_triginometry.svg
@@ -0,0 +1,42 @@
+
diff --git a/upstream/clipper-6.4.2/Documentation/offset_triginometry2.svg b/upstream/clipper-6.4.2/Documentation/offset_triginometry2.svg
new file mode 100644
index 0000000..9a03cba
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/offset_triginometry2.svg
@@ -0,0 +1,28 @@
+
+
diff --git a/upstream/clipper-6.4.2/Documentation/offset_triginometry3.svg b/upstream/clipper-6.4.2/Documentation/offset_triginometry3.svg
new file mode 100644
index 0000000..52eff70
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/offset_triginometry3.svg
@@ -0,0 +1,391 @@
+
+
+
+
--
cgit
.
+var CLASS_NAME = "expandable";
+
+// This value is the assumed initial display style for a sublist when it cannot
+// be determined by other means. See below.
+var DEFAULT_DISPLAY = "none";
+
+// The namespace to use when using this script in an XML context.
+var XMLNS = "http://www.w3.org/1999/xhtml";
+
+// The beginning of the title text for the switch when the sublist is collapsed.
+var CLOSED_PREFIX = "Expand list: ";
+
+// The beginning of the title text for the switch when the sublist is expanded.
+var OPENED_PREFIX = "Collapse list: ";
+
+/******************************************************************************/
+
+// Returns a copy of a string with leading and trailing whitespace removed.
+String.prototype.trim = function() {
+ return this.replace(/^\s+/, "").replace(/\s+$/, "");
+}
+
+// Walks the DOM tree starting at a given root element. Returns an
+// array of nodes of the specified type and conforming to the criteria
+// of the given filter function. The filter should return a boolean.
+function getNodesByType(root, type, filter) {
+ var node = root;
+ var nodes = [];
+ var next;
+
+ while (node != null) {
+ if (node.hasChildNodes())
+ node = node.firstChild;
+ else if (node != root && null != (next = node.nextSibling))
+ node = next;
+ else {
+ next = null;
+ for ( ; node != root; node = node.parentNode) {
+ next = node.nextSibling;
+ if (next != null) break;
+ }
+ node = next;
+ }
+ if (node != null && node.nodeType == type && filter(node))
+ nodes.push(node);
+ }
+ return nodes;
+}
+
+// Simulates the innerText property of IE and other browsers.
+// Mozilla/Firefox need this.
+function getInnerText(node) {
+ if (node == null || node.nodeType != 1)
+ return;
+ var text = "";
+ var textnodes = getNodesByType(node, 3, function() { return true; });
+ for (var i = 0; i < textnodes.length; i++)
+ text += textnodes[i].data;
+ return text;
+}
+
+function initExpandableLists() {
+ if (!document.getElementsByTagName) return;
+
+ // Top-level function to accommodate browsers that do not register
+ // a click event when a link is activated by the keyboard.
+ switchNode = function(id) {
+ var node = document.getElementById(id);
+ if (node && /^switch /.test(node.className)) node.onclick();
+ }
+
+ // Top-level function to be assigned as the event handler for the
+ // switch. This could have been bound to the handler as a closure,
+ // but closures are associated with memory leak problems in IE.
+ actuate = function() {
+ var sublist = this.parentNode.getElementsByTagName("ul")[0] ||
+ this.parentNode.getElementsByTagName("ol")[0];
+ if (sublist.style.display == "block") {
+ sublist.style.display = "none";
+ this.firstChild.data = "+";
+ this.className = "switch off";
+ this.title = this.title.replace(OPENED_PREFIX, CLOSED_PREFIX);
+ } else {
+ sublist.style.display = "block";
+ this.firstChild.data = "-";
+ this.className = "switch on";
+ this.title = this.title.replace(CLOSED_PREFIX, OPENED_PREFIX);
+ }
+ return false;
+ }
+
+ // Create switch node from which the others will be cloned.
+ if (typeof document.createElementNS == "function")
+ var template = document.createElementNS(XMLNS, "a");
+ else
+ var template = document.createElement("a");
+ template.appendChild(document.createTextNode(" "));
+
+ var list, i = 0, j = 0;
+ var pattern = new RegExp("(^| )" + CLASS_NAME + "( |$)");
+
+ while ((list = document.getElementsByTagName("ul")[i++]) ||
+ (list = document.getElementsByTagName("ol")[j++]))
+ {
+ // Only lists with the given class name are processed.
+ if (pattern.test(list.className) == false) continue;
+
+ var item, k = 0;
+ while ((item = list.getElementsByTagName("li")[k++])) {
+ var sublist = item.getElementsByTagName("ul")[0] ||
+ item.getElementsByTagName("ol")[0];
+ // No sublist under this list item. Skip it.
+ if (sublist == null) continue;
+
+ // Attempt to determine initial display style of the
+ // sublist so the proper symbol is used.
+ var symbol;
+ switch (sublist.style.display) {
+ case "none" : symbol = "+"; break;
+ case "block": symbol = "-"; break;
+ default:
+ var display = DEFAULT_DISPLAY;
+ if (sublist.currentStyle) {
+ display = sublist.currentStyle.display;
+ } else if (document.defaultView &&
+ document.defaultView.getComputedStyle &&
+ document.defaultView.getComputedStyle(sublist, ""))
+ {
+ var view = document.defaultView;
+ var computed = view.getComputedStyle(sublist, "");
+ display = computed.getPropertyValue("display");
+ }
+ symbol = (display == "none") ? "+" : "-";
+ // Explicitly set the display style to make sure it is
+ // set for the next read. If it is somehow the empty
+ // string, use the default value from the (X)HTML DTD.
+ sublist.style.display = display || "block";
+ break;
+ }
+
+ // This bit attempts to extract some text from the first
+ // child node of the list item to append to the title
+ // attribute of the switch.
+ var child = item.firstChild;
+ var text = "";
+ while (child) {
+ if (child.nodeType == 3 && "" != child.data.trim()) {
+ text = child.data;
+ break;
+ } else if (child.nodeType == 1 &&
+ !/^[ou]l$/i.test(child.tagName))
+ {
+ text = child.innerText || getInnerText(child);
+ break;
+ }
+ child = child.nextSibling;
+ }
+
+ var actuator = template.cloneNode(true);
+ // a reasonably unique ID
+ var uid = "switch" + i + "-" + j + "-" + k;
+ actuator.id = uid;
+ actuator.href = "javascript:switchNode('" + uid + "')";
+ actuator.className = "switch " + ((symbol == "+") ? "off" : "on");
+ actuator.title = ((symbol == "+")
+ ? CLOSED_PREFIX : OPENED_PREFIX) + text.trim();
+ actuator.firstChild.data = symbol;
+ actuator.onclick = actuate;
+ item.insertBefore(actuator, item.firstChild);
+ }
+ }
+}
+
+// Props to Simon Willison:
+// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
+var oldhandler = window.onload;
+window.onload = (typeof oldhandler == "function")
+ ? function() { oldhandler(); initExpandableLists(); } : initExpandableLists;
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/menu_data.js b/upstream/clipper-6.4.2/Documentation/Scripts/menu_data.js
new file mode 100644
index 0000000..7d8f52f
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/menu_data.js
@@ -0,0 +1,21 @@
+td_1 = "Overview"
+td_1_1 = "Library Overview"
+url_1_1 = "Overview/_Body.htm"
+td_1_2 = "Changes"
+url_1_2 = "Overview/Changes.htm"
+td_1_3 = "Example"
+url_1_3 = "Overview/Example.htm"
+td_1_4 = "FAQ"
+url_1_4 = "Overview/FAQ.htm"
+td_1_5 = "Rounding"
+url_1_5 = "Overview/Rounding.htm"
+td_1_6 = "Deprecated"
+url_1_6 = "Overview/Deprecated.htm"
+td_1_7 = "License"
+url_1_7 = "Overview/License.htm"
+
+td_2 = "Internet"
+td_2_1 = "Clipper at SourceForge"
+url_2_1 = "%http://sourceforge.net/projects/polyclipping/"
+td_2_2 = "Clipper at angusj.com"
+url_2_2 = "%http://www.angusj.com/delphi/clipper.php"
diff --git a/upstream/clipper-6.4.2/Documentation/Scripts/menu_script.js b/upstream/clipper-6.4.2/Documentation/Scripts/menu_script.js
new file mode 100644
index 0000000..3185ebe
--- /dev/null
+++ b/upstream/clipper-6.4.2/Documentation/Scripts/menu_script.js
@@ -0,0 +1,130 @@
+
+////////////////////Please leave this notice////////////////////
+//
+// DropDown Menu 1.0
+// By Evgeny Novikov (java@aladin.ru)
+// http://java.skyteam.ru
+// It works only with IE5.0(++) and Netscape6.0(++)
+// Free to use!
+//
+////////////////////Last modified 2002-03-05////////////////////
+
+// Modify following four lines to customize your menu
+var tdColor = "#FFFFFF"; // menu item text color
+var tdBgColor = "#6060A0"; // menu item background color
+var hlColor = "#000000"; // highlight text color
+var hlBgColor = "#9595BD"; // highlight background color
+// After change, modify same values in your *.css file
+
+var md = 250;
+var ti = -1;
+var oTd = new Object;
+oTd = null;
+
+function doMenu(td) {
+ clearTimeout(ti);
+ td.style.backgroundColor = hlBgColor;
+ td.style.color = hlColor;
+ var i;
+ var sT = "";
+ var tda = new Array();
+ tda = td.id.split("_");
+ if (oTd != null) {
+ var tdo = new Array();
+ tdo = oTd.id.split("_");
+ for (i = 1; i < tdo.length; i++) {
+ sT += "_" + tdo[i];
+ if (tdo[i] != tda[i]) {
+ document.getElementById("td" + sT).style.backgroundColor = tdBgColor;
+ document.getElementById("td" + sT).style.color = tdColor;
+ if (document.getElementById("tbl" + sT) != null)
+ document.getElementById("tbl" + sT).style.visibility = "hidden";
+ }
+ }
+ }
+ oTd = td;
+ sT = "tbl";
+ for (i = 1; i < tda.length; i++)
+ sT += "_" + tda[i];
+ if (document.getElementById(sT) != null)
+ document.getElementById(sT).style.visibility = "visible";
+
+}
+
+function clearMenu() {
+ if (oTd != null) {
+ var tdo = new Array();
+ tdo = oTd.id.split("_");
+ var sT = "";
+ for (var i = 1; i < tdo.length; i++) {
+ sT += "_" + tdo[i];
+ document.getElementById("td" + sT).style.backgroundColor = tdBgColor;
+ document.getElementById("td" + sT).style.color = tdColor;
+ if (document.getElementById("tbl" + sT) != null)
+ document.getElementById("tbl" + sT).style.visibility = "hidden";
+ }
+ oTd = null;
+ }
+}
+
+function runMenu(strURL) {
+ if (strURL.charAt(0) == '%')
+ window.open(strURL.substr(1));
+ else
+ location.href = strURL;
+}
+
+var tt = "";
+var sT = "";
+var pT = new Array();
+var tA = new Array();
+
+function getCoord(st) {
+ tA = st.split("_");
+ if (tA.length > 2) {
+ tA = tA.slice(0,-1);
+ tt = tA.join("_");
+ return (document.getElementById("tbl" + tt).offsetTop + document.getElementById("td" + st).offsetTop - 1) + "px;left:" +
+ (document.getElementById("tbl" + tt).offsetLeft + document.getElementById("td" + st).offsetWidth - 2) + "px\">";
+ }
+ return (document.getElementById("mainmenu").offsetTop + document.getElementById("td" + st).offsetHeight - 10) + "px;left:" +
+ (document.getElementById("mainmenu").offsetLeft + document.getElementById("td" + st).offsetLeft + 5) + "px\">";
+}
+
+function isDefined(varname) {
+ return eval("typeof(" + varname + ") != \"undefined\"");
+}
+
+var sH = "