CFLAGS_COMMON += -fPIC
CXXFLAGS_COMMON += -fno-exceptions -fno-rtti
CPPFLAGS_COMMON += -I/sw/include -I/usr/X11R6/include
- LDFLAGS_COMMON += -L/sw/lib -L/usr/lib -L/usr/X11R6/lib
+ LDFLAGS_COMMON += -L/sw/lib -L/usr/X11R6/lib
+ #LDFLAGS_COMMON += -L/sw/lib -L/usr/lib -L/usr/X11R6/lib
LDFLAGS_DLL += -dynamiclib -ldl
EXE ?= ppc
+ MACLIBDIR ?= /sw/lib
A = a
DLL = dylib
MWINDOWS =
contrib/ufoaiplug/ufoai_level.o \
contrib/ufoaiplug/ufoai.o \
-#$(INSTALLDIR)/plugins/bkgrnd2d.$(DLL): LIBS_EXTRA := $(LIBS_GLIB) $(LIBS_GTK)
-#$(INSTALLDIR)/plugins/bkgrnd2d.$(DLL): CPPFLAGS_EXTRA := $(CPPFLAGS_GLIB) $(CPPFLAGS_GTK) -Ilibs -Iinclude
-#$(INSTALLDIR)/plugins/bkgrnd2d.$(DLL): \
-# contrib/bkgrnd2d/bkgrnd2d.o \
-# contrib/bkgrnd2d/dialog.o \
-# contrib/bkgrnd2d/plugin.o \
+$(INSTALLDIR)/plugins/bkgrnd2d.$(DLL): LIBS_EXTRA := $(LIBS_GLIB) $(LIBS_GTK)
+$(INSTALLDIR)/plugins/bkgrnd2d.$(DLL): CPPFLAGS_EXTRA := $(CPPFLAGS_GLIB) $(CPPFLAGS_GTK) -Ilibs -Iinclude
+$(INSTALLDIR)/plugins/bkgrnd2d.$(DLL): \
+ contrib/bkgrnd2d/bkgrnd2d.o \
+ contrib/bkgrnd2d/dialog.o \
+ contrib/bkgrnd2d/plugin.o \
$(INSTALLDIR)/heretic2/h2data.$(EXE): LIBS_EXTRA := $(LIBS_XML)
$(INSTALLDIR)/heretic2/h2data.$(EXE): CPPFLAGS_EXTRA := $(CPPFLAGS_XML) -Itools/quake2/qdata_heretic2/common -Itools/quake2/qdata_heretic2/qcommon -Itools/quake2/qdata_heretic2 -Itools/quake2/common -Ilibs -Iinclude
else
ifeq ($(OS),Darwin)
install-dll: binaries
- CP="$(CP)" OTOOL="$(OTOOL)" INSTALLDIR="$(INSTALLDIR)" $(SH) install-dylibs.sh
+ EXE="$(EXE)" MACLIBDIR="$(MACLIBDIR)" CP="$(CP)" OTOOL="$(OTOOL)" INSTALLDIR="$(INSTALLDIR)" $(SH) install-dylibs.sh
else
install-dll: binaries
@$(ECHO) No DLL inclusion implemented for this target.
# empty Makefile.conf template
+
+## OS X:
+# BUILD=debug
+# RADIANT_ABOUTMSG=Custom build
+# EXE=ub
+#
+## MacPorts:
+# CPPFLAGS=-I/opt/local/include/ -I/usr/X11R6/include/
+# LDFLAGS=-L/opt/local/lib -L/usr/X11R6/lib
+# MACLIBDIR=/opt/local/lib
+
+## Fink
+## (-arch ppc can combined with -arch 386, I read somewhere. However does work fine like this on OSX 10.6)
+# LDFLAGS=-arch i386
+# CFLAGS=-arch i386
+# TARGET_ARCH=-arch i386
+# MACLIBDIR=/sw/lib
if(merge_info.pos2 < 0)
merge_info.pos2 += 3;
}
-
- int newHeight = p1->height + p2->height - 1;
+ //
+ /* The Patch will never be reaching max, previous comparissions make sure,
+ for 2 patches with 3x3 size. Results always in a patch of 3x5. (31 is max currently)
+ int newHeight = p1->height + p2->height - 1; anyway = 5
if(newHeight > MAX_PATCH_HEIGHT)
return NULL;
-
+ int newWidth = p1->width + p2->width - 1;
+ if(newWidth > MAX_PATCH_WIDTH)
+ return NULL;
+ */
DPatch* newPatch = new DPatch();
- newPatch->height = newHeight;
- newPatch->width = p1->width;
+ newPatch->height = 3;
+ newPatch->width = 5;
newPatch->SetTexture(p1->texture);
- int y = 0;
- int i;
- for(i = 0; i < p1->height; i++, y++)
- for(int x = 0; x < p1->width; x++)
- newPatch->points[x][y] = p1->points[x][i];
-
- for(i = 1; i < p2->height; i++, y++)
- for(int x = 0; x < p2->width; x++)
- newPatch->points[x][y] = p2->points[x][i];
-
+ for(int y = 0; y < 3; y++)
+ for(int x = 0; x < 3; x++)
+ newPatch->points[x][y] = p1->points[x][y];
+
+ for(int y = 1; y < 3; y++)
+ for(int x = 0; x < 3; x++)
+ newPatch->points[x][y+2] = p2->points[x][y];
+
// newPatch->Invert();
-
return newPatch;
}
Invert();
}
-std::list<DPatch> DPatch::Split(bool rows, bool cols)
+std::list<DPatch> DPatch::SplitRows()
{
std::list<DPatch> patchList;
int i;
int x, y;
- if(rows && height >= 5)
+ if(height >= 5)
{
for(i = 0; i < (height-1)/2; i++)
{
p.width = width;
p.height = 3;
p.SetTexture(texture);
+ for(x = 0; x < 3; x++)
+ {
+ for(y = 0; y < p.width; y++)
+ {
+ p.points[x][y] = points[(i*2)+x][y];
+ }
+ }
+ patchList.push_back(p);
+ }
+ } else {
+ //This returns exactly what comes in.. I don't know better :/
+ //If nothing is returned, the Patch in Radiant is just deleted - I suppose for evil follow up erros.
+ DPatch p;
+
+ p.height = height;
+ p.width = width;
+ p.SetTexture(texture);
+
+ for(x = 0; x < p.height; x++)
+ {
+ for(y = 0; y < p.width; y++)
+ {
+ p.points[x][y] = points[x][y];
+ }
+ }
+ patchList.push_back(p);
+ }
+ return patchList;
+}
- for(y = 0; y < 3; y++)
+std::list<DPatch> DPatch::SplitCols()
+{
+ std::list<DPatch> patchList;
+ int i;
+ int x, y;
+
+ if(width >= 5)
+ {
+ for(i = 0; i < (width-1)/2; i++)
+ {
+ DPatch p;
+
+ p.width = 3;
+ p.height = height;
+ p.SetTexture(texture);
+
+ for(x = 0; x < p.height; x++)
{
- for(x = 0; x < p.width; x++)
+ for(y = 0; y < 3; y++)
{
p.points[x][y] = points[x][(i*2)+y];
}
}
patchList.push_back(p);
}
-
- if(cols && width >= 5)
+ } else
+ {
+ //This returns exactly what comes in.. I don't know better :/
+ //If nothing is returned, the Patch in Radiant is just deleted - I suppose for evil follow up erros.
+ DPatch p;
+
+ p.height = height;
+ p.width = width;
+ p.SetTexture(texture);
+
+ for(x = 0; x < p.height; x++)
{
- std::list<DPatch> patchList2;
-
- for(std::list<DPatch>::iterator patches = patchList.begin(); patches != patchList.end(); patches++)
+ for(y = 0; y < p.width; y++)
{
- std::list<DPatch> patchList3 = (*patches).Split(false, true);
-
- for(std::list<DPatch>::iterator patches2 = patchList3.begin(); patches2 != patchList3.end(); patches2++)
- patchList2.push_front(*patches2);
+ p.points[x][y] = points[x][y];
}
-
- return patchList2;
}
+ patchList.push_back(p);
}
- else if(cols && width >= 5)
+ return patchList;
+}
+
+std::list<DPatch> DPatch::Split()
+{
+ std::list<DPatch> patchList;
+ int i;
+ int x, y;
+
+ if(width >= 5)
{
for(i = 0; i < (width-1)/2; i++)
{
DPatch p;
-
- p.height = height;
+
p.width = 3;
+ p.height = height;
+ p.SetTexture(texture);
+
+ for(x = 0; x < p.height; x++)
+ {
+ for(y = 0; y < 3; y++)
+ {
+ p.points[x][y] = points[x][(i*2)+y];
+ }
+ }
+ patchList.push_back(p);
+ }
+ std::list<DPatch> patchList2;
+ for(std::list<DPatch>::iterator patches = patchList.begin(); patches != patchList.end(); patches++)
+ {
+ std::list<DPatch> patchList3 = (*patches).SplitRows();
+ for(std::list<DPatch>::iterator patches2 = patchList3.begin(); patches2 != patchList3.end(); patches2++)
+ patchList2.push_front(*patches2);
+ }
+ return patchList2;
+
+ } else if(height >= 5)
+ {
+ for(i = 0; i < (height-1)/2; i++)
+ {
+ DPatch p;
+
+ p.width = width;
+ p.height = 3;
p.SetTexture(texture);
-
for(x = 0; x < 3; x++)
{
- for(y = 0; y < p.height; y++)
+ for(y = 0; y < p.width; y++)
{
p.points[x][y] = points[(i*2)+x][y];
}
- }
-
+ }
patchList.push_back(p);
+ }
+ std::list<DPatch> patchList2;
+ for(std::list<DPatch>::iterator patches = patchList.begin(); patches != patchList.end(); patches++)
+ {
+ std::list<DPatch> patchList3 = (*patches).SplitCols();
+ for(std::list<DPatch>::iterator patches2 = patchList3.begin(); patches2 != patchList3.end(); patches2++)
+ patchList2.push_front(*patches2);
}
+ return patchList2;
+
+ } else
+ {
+ //This returns exactly what comes in.. I don't know better :/
+ //If nothing is returned, the Patch in Radiant is just deleted - I suppose for evil follow up erros.
+ DPatch p;
+
+ p.height = height;
+ p.width = width;
+ p.SetTexture(texture);
+
+ for(x = 0; x < p.height; x++)
+ {
+ for(y = 0; y < p.width; y++)
+ {
+ p.points[x][y] = points[x][y];
+ }
+ }
+ patchList.push_back(p);
}
-
return patchList;
}
class Instance;
}
-#define MAX_PATCH_WIDTH 16
-#define MAX_PATCH_HEIGHT 16
+#define MAX_PATCH_WIDTH 32
+#define MAX_PATCH_HEIGHT 32
#define MIN_PATCH_WIDTH 3
#define MIN_PATCH_HEIGHT 3
class DPatch
{
public:
- std::list<DPatch> Split(bool rows, bool cols);
+ std::list<DPatch> SplitRows();
+ std::list<DPatch> SplitCols();
+ std::list<DPatch> Split();
void Transpose();
void Invert();
DPatch* MergePatches(patch_merge_t merge_info, DPatch* p1, DPatch* p2);
char* PLUGIN_NAME = "bobToolz";
// commands in the menu
-static char* PLUGIN_COMMANDS = "About...,-,Reset Textures...,PitOMatic,-,Vis Viewer,Brush Cleanup,Polygon Builder,Caulk Selection,-,Tree Planter,Drop Entity,Plot Splines,-,Merge Patches,Split patches,Turn edge";
+static char* PLUGIN_COMMANDS = "About...,-,Reset Textures...,PitOMatic,-,Vis Viewer,Brush Cleanup,Polygon Builder,Caulk Selection,-,Tree Planter,Drop Entity,Plot Splines,-,Merge Patches,Split patches,Split patches cols,Split patches rows,Turn edge";
// globals
GtkWidget *g_pRadiantWnd = NULL;
DoMergePatches();
} else if( string_equal_nocase( p, "split patches" ) ) {
DoSplitPatch();
+ } else if( string_equal_nocase( p, "split patches rows" ) ) {
+ DoSplitPatchRows();
+ } else if( string_equal_nocase( p, "split patches cols" ) ) {
+ DoSplitPatchCols();
} else if( string_equal_nocase( p, "turn edge" ) ) {
DoFlipTerrain();
} else if( string_equal_nocase(p, "reset textures...") ) {
patch.LoadFromPatch(instance);
- std::list<DPatch> patchList = patch.Split( true, true );
+ std::list<DPatch> patchList = patch.Split();
for(std::list<DPatch>::iterator patches = patchList.begin(); patches != patchList.end(); patches++) {
(*patches).BuildInRadiant();
}
Path_deleteTop(instance.path());
}
+void DoSplitPatchCols() {
+ UndoableCommand undo("bobToolz.splitPatchCols");
+
+ DPatch patch;
+
+ // ensure we have something selected
+ if( GlobalSelectionSystem().countSelected() != 1 )
+ {
+ DoMessageBox("Invalid number of patches selected, choose 1 only", "Error", eMB_OK);
+ return;
+ }
+
+ scene::Instance& instance = GlobalSelectionSystem().ultimateSelected();
+
+ if( !Node_isPatch(instance.path().top()) ) {
+ DoMessageBox("You must select ONLY patches", "Error", eMB_OK);
+ return;
+ }
+
+ patch.LoadFromPatch(instance);
+
+ std::list<DPatch> patchList = patch.SplitCols();
+ for(std::list<DPatch>::iterator patches = patchList.begin(); patches != patchList.end(); patches++) {
+ (*patches).BuildInRadiant();
+ }
+
+ Path_deleteTop(instance.path());
+}
+
+void DoSplitPatchRows() {
+ UndoableCommand undo("bobToolz.splitPatchRows");
+
+ DPatch patch;
+
+ // ensure we have something selected
+ if( GlobalSelectionSystem().countSelected() != 1 )
+ {
+ DoMessageBox("Invalid number of patches selected, choose 1 only", "Error", eMB_OK);
+ return;
+ }
+
+ scene::Instance& instance = GlobalSelectionSystem().ultimateSelected();
+
+ if( !Node_isPatch(instance.path().top()) ) {
+ DoMessageBox("You must select ONLY patches", "Error", eMB_OK);
+ return;
+ }
+
+ patch.LoadFromPatch(instance);
+
+ std::list<DPatch> patchList = patch.SplitRows();
+ for(std::list<DPatch>::iterator patches = patchList.begin(); patches != patchList.end(); patches++) {
+ (*patches).BuildInRadiant();
+ }
+
+ Path_deleteTop(instance.path());
+}
+
void DoVisAnalyse()
{
char filename[1024];
void DoCTFColourChanger();
void DoMergePatches();
void DoSplitPatch();
+void DoSplitPatchRows();
+void DoSplitPatchCols();
void DoVisAnalyse();
void DoTrainThing();
void DoTrainPathPlot();
: ${OTOOL:=otool}
: ${CP:=cp}
: ${INSTALLDIR:=.}
+: ${EXE:=ppc}
+: ${MACLIBDIR:=/sw/lib}
finkgetdeps()
{
- otool -L "$1" | grep /sw/lib | while read -r LIB STUFF; do
+ otool -L "$1" | grep "$MACLIBDIR" | while read -r LIB STUFF; do
[ -z "${LIB##*:}" ] && continue # first line
[ -f "$INSTALLDIR/${LIB##*/}" ] && continue
cp -vL "$LIB" "$INSTALLDIR"
done
}
-finkgetdeps "$INSTALLDIR/radiant.ppc"
+finkgetdeps "$INSTALLDIR/radiant.$EXE"
echo Warning: this only works if only ONE version of gtk-2.0 and pango is installed
-for LIB in /sw/lib/gtk-2.0/*/loaders/libpixbufloader-bmp.so; do
+for LIB in "$MACLIBDIR"/gtk-2.0/*/loaders/libpixbufloader-bmp.so; do
LAST=$LIB
done
cp -L "$LAST" "$INSTALLDIR"
finkgetdeps "$LAST"
-for LIB in /sw/lib/pango/*/modules/pango-basic-fc.so; do
+for LIB in "$MACLIBDIR"/pango/*/modules/pango-basic-fc.so; do
LAST=$LIB
done
cp -L "$LAST" "$INSTALLDIR"
finkgetdeps "$LAST"
-for LIB in /sw/lib/pango/*/modules/pango-basic-x.so; do
+for LIB in "$MACLIBDIR"/pango/*/modules/pango-basic-x.so; do
LAST=$LIB
done
cp -L "$LAST" "$INSTALLDIR"
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/fonts.conf file to configure system font access -->
+<fontconfig>
+
+<!--
+ DO NOT EDIT THIS FILE.
+ IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
+ LOCAL CHANGES BELONG IN 'local.conf'.
+
+ The intent of this standard configuration file is to be adequate for
+ most environments. If you have a reasonably normal environment and
+ have found problems with this configuration, they are probably
+ things that others will also want fixed. Please submit any
+ problems to the fontconfig bugzilla system located at fontconfig.org
+
+ Note that the normal 'make install' procedure for fontconfig is to
+ replace any existing fonts.conf file with the new version. Place
+ any local customizations in local.conf which this file references.
+
+ Keith Packard
+-->
+
+<!-- Font directory list -->
+
+ <dir>/usr/share/fonts</dir>
+ <dir>/usr/X11/lib/X11/fonts</dir> <dir>/Library/Fonts</dir> <dir>/Network/Library/Fonts</dir> <dir>/System/Library/Fonts</dir> <dir>/opt/local/share/fonts</dir>
+ <dir>~/.fonts</dir>
+
+<!--
+ Accept deprecated 'mono' alias, replacing it with 'monospace'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>mono</string>
+ </test>
+ <edit name="family" mode="assign">
+ <string>monospace</string>
+ </edit>
+ </match>
+
+<!--
+ Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>sans serif</string>
+ </test>
+ <edit name="family" mode="assign">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+
+<!--
+ Accept deprecated 'sans' alias, replacing it with 'sans-serif'
+-->
+ <match target="pattern">
+ <test qual="any" name="family">
+ <string>sans</string>
+ </test>
+ <edit name="family" mode="assign">
+ <string>sans-serif</string>
+ </edit>
+ </match>
+
+<!--
+ Load local system customization file
+-->
+ <include ignore_missing="yes">conf.d</include>
+
+<!-- Font cache directory list -->
+
+ <cachedir>~/.fontconfig</cachedir>
+
+ <config>
+<!--
+ These are the default Unicode chars that are expected to be blank
+ in fonts. All other blank chars are assumed to be broken and
+ won't appear in the resulting charsets
+ -->
+ <blank>
+ <int>0x0020</int> <!-- SPACE -->
+ <int>0x00A0</int> <!-- NO-BREAK SPACE -->
+ <int>0x00AD</int> <!-- SOFT HYPHEN -->
+ <int>0x034F</int> <!-- COMBINING GRAPHEME JOINER -->
+ <int>0x0600</int> <!-- ARABIC NUMBER SIGN -->
+ <int>0x0601</int> <!-- ARABIC SIGN SANAH -->
+ <int>0x0602</int> <!-- ARABIC FOOTNOTE MARKER -->
+ <int>0x0603</int> <!-- ARABIC SIGN SAFHA -->
+ <int>0x06DD</int> <!-- ARABIC END OF AYAH -->
+ <int>0x070F</int> <!-- SYRIAC ABBREVIATION MARK -->
+ <int>0x115F</int> <!-- HANGUL CHOSEONG FILLER -->
+ <int>0x1160</int> <!-- HANGUL JUNGSEONG FILLER -->
+ <int>0x1680</int> <!-- OGHAM SPACE MARK -->
+ <int>0x17B4</int> <!-- KHMER VOWEL INHERENT AQ -->
+ <int>0x17B5</int> <!-- KHMER VOWEL INHERENT AA -->
+ <int>0x180E</int> <!-- MONGOLIAN VOWEL SEPARATOR -->
+ <int>0x2000</int> <!-- EN QUAD -->
+ <int>0x2001</int> <!-- EM QUAD -->
+ <int>0x2002</int> <!-- EN SPACE -->
+ <int>0x2003</int> <!-- EM SPACE -->
+ <int>0x2004</int> <!-- THREE-PER-EM SPACE -->
+ <int>0x2005</int> <!-- FOUR-PER-EM SPACE -->
+ <int>0x2006</int> <!-- SIX-PER-EM SPACE -->
+ <int>0x2007</int> <!-- FIGURE SPACE -->
+ <int>0x2008</int> <!-- PUNCTUATION SPACE -->
+ <int>0x2009</int> <!-- THIN SPACE -->
+ <int>0x200A</int> <!-- HAIR SPACE -->
+ <int>0x200B</int> <!-- ZERO WIDTH SPACE -->
+ <int>0x200C</int> <!-- ZERO WIDTH NON-JOINER -->
+ <int>0x200D</int> <!-- ZERO WIDTH JOINER -->
+ <int>0x200E</int> <!-- LEFT-TO-RIGHT MARK -->
+ <int>0x200F</int> <!-- RIGHT-TO-LEFT MARK -->
+ <int>0x2028</int> <!-- LINE SEPARATOR -->
+ <int>0x2029</int> <!-- PARAGRAPH SEPARATOR -->
+ <int>0x202A</int> <!-- LEFT-TO-RIGHT EMBEDDING -->
+ <int>0x202B</int> <!-- RIGHT-TO-LEFT EMBEDDING -->
+ <int>0x202C</int> <!-- POP DIRECTIONAL FORMATTING -->
+ <int>0x202D</int> <!-- LEFT-TO-RIGHT OVERRIDE -->
+ <int>0x202E</int> <!-- RIGHT-TO-LEFT OVERRIDE -->
+ <int>0x202F</int> <!-- NARROW NO-BREAK SPACE -->
+ <int>0x205F</int> <!-- MEDIUM MATHEMATICAL SPACE -->
+ <int>0x2060</int> <!-- WORD JOINER -->
+ <int>0x2061</int> <!-- FUNCTION APPLICATION -->
+ <int>0x2062</int> <!-- INVISIBLE TIMES -->
+ <int>0x2063</int> <!-- INVISIBLE SEPARATOR -->
+ <int>0x206A</int> <!-- INHIBIT SYMMETRIC SWAPPING -->
+ <int>0x206B</int> <!-- ACTIVATE SYMMETRIC SWAPPING -->
+ <int>0x206C</int> <!-- INHIBIT ARABIC FORM SHAPING -->
+ <int>0x206D</int> <!-- ACTIVATE ARABIC FORM SHAPING -->
+ <int>0x206E</int> <!-- NATIONAL DIGIT SHAPES -->
+ <int>0x206F</int> <!-- NOMINAL DIGIT SHAPES -->
+ <int>0x2800</int> <!-- BRAILLE PATTERN BLANK -->
+ <int>0x3000</int> <!-- IDEOGRAPHIC SPACE -->
+ <int>0x3164</int> <!-- HANGUL FILLER -->
+ <int>0xFEFF</int> <!-- ZERO WIDTH NO-BREAK SPACE -->
+ <int>0xFFA0</int> <!-- HALFWIDTH HANGUL FILLER -->
+ <int>0xFFF9</int> <!-- INTERLINEAR ANNOTATION ANCHOR -->
+ <int>0xFFFA</int> <!-- INTERLINEAR ANNOTATION SEPARATOR -->
+ <int>0xFFFB</int> <!-- INTERLINEAR ANNOTATION TERMINATOR -->
+ </blank>
+<!--
+ Rescan configuration every 30 seconds when FcFontSetList is called
+ -->
+ <rescan>
+ <int>30</int>
+ </rescan>
+ </config>
+
+</fontconfig>
--- /dev/null
+<!-- This is the Document Type Definition for font configuration files -->
+<!ELEMENT fontconfig (dir |
+ cache |
+ cachedir |
+ include |
+ config |
+ selectfont |
+ match |
+ alias)* >
+
+<!--
+ Add a directory that provides fonts
+-->
+<!ELEMENT dir (#PCDATA)>
+<!ATTLIST dir xml:space (default|preserve) 'preserve'>
+
+<!--
+ Define the per-user file that holds cache font information.
+
+ If the filename begins with '~', it is replaced with the users
+ home directory path.
+-->
+<!ELEMENT cache (#PCDATA)>
+<!ATTLIST cache xml:space (default|preserve) 'preserve'>
+
+<!--
+ Add a directory that is searched for font cache files.
+ These hold per-directory cache data and are searched in
+ order for each directory. When writing cache files, the first
+ directory which allows the cache file to be created is used.
+
+ A leading '~' in a directory name is replaced with the users
+ home directory path.
+-->
+<!ELEMENT cachedir (#PCDATA)>
+<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>
+
+<!--
+ Reference another configuration file; note that this
+ is another complete font configuration file and not
+ just a file included by the XML parser.
+
+ Set 'ignore_missing' to 'yes' if errors are to be ignored.
+
+ If the filename begins with '~', it is replaced with the users
+ home directory path.
+-->
+<!ELEMENT include (#PCDATA)>
+<!ATTLIST include
+ ignore_missing (no|yes) "no"
+ xml:space (default|preserve) "preserve">
+
+<!--
+ Global library configuration data
+ -->
+<!ELEMENT config (blank|rescan)*>
+
+<!--
+ Specify the set of Unicode encoding values which
+ represent glyphs that are allowed to contain no
+ data. With this list, fontconfig can examine
+ fonts for broken glyphs and eliminate them from
+ the set of valid Unicode chars. This idea
+ was borrowed from Mozilla
+ -->
+<!ELEMENT blank (int)*>
+
+<!--
+ Aliases are just a special case for multiple match elements
+
+ They are syntactically equivalent to:
+
+ <match>
+ <test name="family">
+ <string value=[family]/>
+ </test>
+ <edit name="family" mode="prepend">
+ <string value=[prefer]/>
+ ...
+ </edit>
+ <edit name="family" mode="append">
+ <string value=[accept]/>
+ ...
+ </edit>
+ <edit name="family" mode="append_last">
+ <string value=[default]/>
+ ...
+ </edit>
+ </match>
+-->
+<!--
+ Periodically rescan the font configuration and
+ directories to synch internal state with filesystem
+ -->
+<!ELEMENT rescan (int)>
+
+<!--
+ Edit list of available fonts at startup/reload time
+ -->
+<!ELEMENT selectfont (rejectfont | acceptfont)* >
+
+<!ELEMENT rejectfont (glob | pattern)*>
+
+<!ELEMENT acceptfont (glob | pattern)*>
+
+<!ELEMENT glob (#PCDATA)>
+
+<!ELEMENT pattern (patelt)*>
+
+<!ENTITY % constant 'int|double|string|matrix|bool|charset|const'>
+
+<!ELEMENT patelt (%constant;)*>
+<!ATTLIST patelt
+ name CDATA #REQUIRED>
+
+<!ELEMENT alias (family*, prefer?, accept?, default?)>
+<!ATTLIST alias
+ binding (weak|strong|same) "weak">
+<!ELEMENT prefer (family)*>
+<!ELEMENT accept (family)*>
+<!ELEMENT default (family)*>
+<!ELEMENT family (#PCDATA)>
+<!ATTLIST family xml:space (default|preserve) 'preserve'>
+
+<!ENTITY % expr 'int|double|string|matrix|bool|charset
+ |name|const
+ |or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
+ |plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
+
+<!--
+ Match and edit patterns.
+
+ If 'target' is 'pattern', execute the match before selecting a font.
+ if 'target' is 'font', execute the match on the result of a font
+ selection.
+-->
+<!ELEMENT match (test*, edit*)>
+<!ATTLIST match
+ target (pattern|font|scan) "pattern">
+
+<!--
+ Match a field in a pattern
+
+ if 'qual' is 'any', then the match succeeds if any value in the field matches.
+ if 'qual' is 'all', then the match succeeds only if all values match.
+ if 'qual' is 'first', then the match succeeds only if the first value matches.
+ if 'qual' is 'not_first', then the match succeeds only if any value other than
+ the first matches.
+ For match elements with target=font, if test 'target' is 'pattern',
+ then the test is applied to the pattern used in matching rather than
+ to the resulting font.
+
+ Match elements with target=scan are applied as fonts are scanned.
+ They edit the pattern generated from the scanned font and affect
+ what the fontconfig database contains.
+-->
+<!ELEMENT test (%expr;)*>
+<!ATTLIST test
+ qual (any|all|first|not_first) "any"
+ name CDATA #REQUIRED
+ target (pattern|font|default) "default"
+ compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains) "eq">
+
+<!--
+ Edit a field in a pattern
+
+ The enclosed values are used together to edit the list of values
+ associated with 'name'.
+
+ If 'name' matches one of those used in a test element for this match element:
+ if 'mode' is 'assign', replace the matched value.
+ if 'mode' is 'assign_replace', replace all of the values
+ if 'mode' is 'prepend', insert before the matched value
+ if 'mode' is 'append', insert after the matched value
+ if 'mode' is 'prepend_first', insert before all of the values
+ if 'mode' is 'append_last', insert after all of the values
+ If 'name' doesn't match any of those used in a test element:
+ if 'mode' is 'assign' or 'assign_replace, replace all of the values
+ if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
+ if 'mode' is 'append' or 'append_last', insert after all of the values
+-->
+<!ELEMENT edit (%expr;)*>
+<!ATTLIST edit
+ name CDATA #REQUIRED
+ mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
+ binding (weak|strong|same) "weak">
+
+<!--
+ Elements of expressions follow
+-->
+<!ELEMENT int (#PCDATA)>
+<!ATTLIST int xml:space (default|preserve) 'preserve'>
+<!ELEMENT double (#PCDATA)>
+<!ATTLIST double xml:space (default|preserve) 'preserve'>
+<!ELEMENT string (#PCDATA)>
+<!ATTLIST string xml:space (default|preserve) 'preserve'>
+<!ELEMENT matrix (double,double,double,double)>
+<!ELEMENT bool (#PCDATA)>
+<!ELEMENT charset (#PCDATA)>
+<!ATTLIST charset xml:space (default|preserve) 'preserve'>
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name xml:space (default|preserve) 'preserve'>
+<!ELEMENT const (#PCDATA)>
+<!ATTLIST const xml:space (default|preserve) 'preserve'>
+<!ELEMENT or (%expr;)*>
+<!ELEMENT and (%expr;)*>
+<!ELEMENT eq ((%expr;), (%expr;))>
+<!ELEMENT not_eq ((%expr;), (%expr;))>
+<!ELEMENT less ((%expr;), (%expr;))>
+<!ELEMENT less_eq ((%expr;), (%expr;))>
+<!ELEMENT more ((%expr;), (%expr;))>
+<!ELEMENT more_eq ((%expr;), (%expr;))>
+<!ELEMENT contains ((%expr;), (%expr;))>
+<!ELEMENT not_contains ((%expr;), (%expr;))>
+<!ELEMENT plus (%expr;)*>
+<!ELEMENT minus (%expr;)*>
+<!ELEMENT times (%expr;)*>
+<!ELEMENT divide (%expr;)*>
+<!ELEMENT not (%expr;)>
+<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
+<!ELEMENT floor (%expr;)>
+<!ELEMENT ceil (%expr;)>
+<!ELEMENT round (%expr;)>
+<!ELEMENT trunc (%expr;)>
export DYLD_LIBRARY_PATH="$MY_DIRECTORY/Contents/MacOS/install"
export PANGO_RC_FILE="$MY_DIRECTORY/Contents/MacOS/install/pangorc"
export GDK_PIXBUF_MODULE_FILE="$MY_DIRECTORY/Contents/MacOS/install/gdk-pixbuf.loaders"
+export FONTCONFIG_FILE="$MY_DIRECTORY/Contents/MacOS/install/fonts.conf"
cd "$MY_DIRECTORY/Contents/MacOS/install"
if [ -x /usr/bin/open-x11 ]; then
- /usr/bin/open-x11 ./radiant.ppc "$@" &
+ /usr/bin/open-x11 ./radiant.%EXE% "$@" &
else
- ./radiant.ppc "$@" &
+ ./radiant.%EXE% "$@" &
fi