diff options
-rw-r--r-- | office/Ted/README | 6 | ||||
-rw-r--r-- | office/Ted/Ted.SlackBuild | 66 | ||||
-rw-r--r-- | office/Ted/Ted.desktop | 17 | ||||
-rw-r--r-- | office/Ted/Ted.info | 12 | ||||
-rw-r--r-- | office/Ted/docSectProperties.c | 1105 |
5 files changed, 40 insertions, 1166 deletions
diff --git a/office/Ted/README b/office/Ted/README index 36d2faa814..a7bbcdbbc2 100644 --- a/office/Ted/README +++ b/office/Ted/README @@ -5,10 +5,4 @@ is easily compiled. Additional packages with spellcheckers for different languages exist and can be downloaded from the Ted homepage. -Ted can be compiled with different toolkits, which defaults to GTK. To -define another toolkit (Choices are GTK, MOTIF and QT), you can specify -this on the commandline: - -TOOLKIT=MOTIF ./Ted.SlackBuild - Note: This application doesn't work with Windowmaker diff --git a/office/Ted/Ted.SlackBuild b/office/Ted/Ted.SlackBuild index 18d6962745..4b5f511e03 100644 --- a/office/Ted/Ted.SlackBuild +++ b/office/Ted/Ted.SlackBuild @@ -1,10 +1,9 @@ #!/bin/sh # Slackware build script for Ted -# and edited by Hannes Worst <hannesworst@gmail.com>. -# Copyright by Hannes Worst -#-- -# Last edited: 01-05-2012 +# Originally written by Hannes Worst <hannesworst@gmail.com>. +# Copyright 2014 Willy Sudiarto Raharjo <willysr@slackbuilds.org> +# All right reserved # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: @@ -12,7 +11,7 @@ # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR IMPLIED +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, @@ -23,11 +22,8 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# Very heavily edited by the SlackBuilds.org project. --michiel -# DocSectProperies Bug-fix provided bij Mark de Does, developer of Ted - PRGNAM=Ted -VERSION=${VERSION:-2.22} +VERSION=${VERSION:-2.23} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -44,18 +40,20 @@ TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} -TOOLKIT=${TOOLKIT:-GTK} SRCNAM=$(echo $PRGNAM | tr T t) if [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" + MARCH=i386 elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" + MARCH=i386 elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" + MARCH=amd64 fi set -e @@ -65,18 +63,13 @@ mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-$VERSION tar xvf $CWD/$SRCNAM-$VERSION.src.tar.gz -cp $CWD/docSectProperties.c $PRGNAM-$VERSION/docBase/docSectProperties.c cd $PRGNAM-$VERSION chown -R root:root . find -L . \ - \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ - -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ - -exec chmod 644 {} \; - -# Let's edit Ted's Makefile, so this allows us to package Ted quite properly without -# actually having to need /usr/local/. -sed -i 's#./configure#./configure --prefix=/usr/share#g' $TMP/$PRGNAM-$VERSION/Makefile + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; # Set the right ARCH sed \ @@ -86,27 +79,36 @@ sed \ CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ -make -make package.shared DESTDIR=$PKG CONFIGURE_OPTIONS="--with-$TOOLKIT \ - --prefix=/usr/share/$PRGNAM --bindir=/usr/bin \ - --build=$ARCH-slackware-linux" - -mkdir -p $PKG/usr/ -tar -xvf $TMP/$PRGNAM-$VERSION/${SRCNAM}Package/$SRCNAM-$VERSION-linux-*$LIBDIRSUFFIX.tar.gz -C $PKG/usr/ -mv $PKG/usr/Ted $PKG/usr/share -mv $PKG/usr/share/$PRGNAM/{rtf2pdf,rtf2ps}.sh $PKG/usr/bin/ -cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop +make -j1 +make -j1 package find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true -mkdir -p $PKG/usr/man/man1 -mv $PKG/usr/share/$PRGNAM/{rtf2pdf,rtf2ps,$PRGNAM}.1 $PKG/usr/man/man1 +# Extract the created package by make package +tar -xvf $TMP/$PRGNAM-$VERSION/${SRCNAM}Package/$SRCNAM-$VERSION-linux-$MARCH.tar.gz -C $PKG/ + +mkdir -p $PKG/usr/man/man1/ +mv $PKG/usr/share/Ted/doc/*.1 $PKG/usr/man/man1/ +rm -rf $PKG/usr/share/Ted/doc/ + find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# This one is already in .gz format +mv $PKG/usr/share/man/man1/Ted.1.gz $PKG/usr/man/man1/ +rm -rf $PKG/usr/share/man/ + +# a couple of useful scripts to fix and convert documents +for F in `ls $PKG/usr/share/Ted/examples/` +do + mv $PKG/usr/share/Ted/examples/$F $PKG/usr/bin/$(basename -s .sh $F) +done +rm -rf $PKG/usr/share/Ted/examples mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION -cat $PKG/usr/share/$PRGNAM/config/$PRGNAM.ad.sample > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.ad.sample cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +mv $PKG/usr/share/Ted/config/ $PKG/usr/doc/$PRGNAM-$VERSION/ mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/office/Ted/Ted.desktop b/office/Ted/Ted.desktop deleted file mode 100644 index 2471ce9943..0000000000 --- a/office/Ted/Ted.desktop +++ /dev/null @@ -1,17 +0,0 @@ -# Desktop entry for Ted. -# System wide install as /usr/share/applications, or /usr/local/share/applications -# Private install as $HOME/.local/share/applications -# See http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html -# See http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html -[Desktop Entry] -Version=1.0 -Type=Application -Name=Ted rtf text processor -GenericName=rtf text processor -Comment=A lightweight rtf text processor -Icon=/usr/share/Ted/Ted.png -Exec=Ted %F -Terminal=false -MimeType=application/rtf;text/rtf; -Categories=Office;WordProcessor; -#StartupNotify=false diff --git a/office/Ted/Ted.info b/office/Ted/Ted.info index 2066d64f84..f135c6bac6 100644 --- a/office/Ted/Ted.info +++ b/office/Ted/Ted.info @@ -1,10 +1,10 @@ PRGNAM="Ted" -VERSION="2.22" +VERSION="2.23" HOMEPAGE="http://www.nllgg.nl/Ted/" -DOWNLOAD="ftp://ftp.nluug.nl/pub/editors/ted/ted-2.22.src.tar.gz" -MD5SUM="08162c9164dfdde1d46e41ae64df16be" +DOWNLOAD="http://ftp.nluug.nl/pub/editors/ted/ted-2.23.src.tar.gz" +MD5SUM="4199df0deb82a90450135ec3f2b7d915" DOWNLOAD_x86_64="" MD5SUM_x86_64="" -REQUIRES="" -MAINTAINER="Hannes Worst" -EMAIL="hannesworst@gmail.com" +REQUIRES="libpaper" +MAINTAINER="Willy Sudiarto Raharjo" +EMAIL="willysr@slackbuilds.org" diff --git a/office/Ted/docSectProperties.c b/office/Ted/docSectProperties.c deleted file mode 100644 index e85ae188e3..0000000000 --- a/office/Ted/docSectProperties.c +++ /dev/null @@ -1,1105 +0,0 @@ -/************************************************************************/ -/* */ -/* Manipulate iten properties in a document. */ -/* */ -/************************************************************************/ - -# include "docBaseConfig.h" - -# include <stdlib.h> - -# include <appDebugon.h> - -# include <utilPropMask.h> - -# include "docPropVal.h" -# include "docSectProperties.h" - -# define MIN_COL_WIDE ( 20* 36 ) -# define MIN_GAP_WIDE ( 20* 12 ) - -# define DEF_GAP_WIDE ( 20* 36 ) - -/************************************************************************/ -/* */ -/* Translate section property numbers to notes property numbers. */ -/* */ -/************************************************************************/ - -const int DOCsectNOTE_PROP_MAP[FEPprop_COUNT]= -{ - SPpropFOOTNOTE_STARTNR, - SPpropFOOTNOTE_JUSTIFICATION, - -1, /* No SPpropFOOTNOTE_PLACEMENT, */ - SPpropFOOTNOTE_RESTART, - SPpropFOOTNOTE_STYLE, - - SPpropENDNOTE_STARTNR, - -1, /* No SPpropENDNOTE_JUSTIFICATION, */ - -1, /* No SPpropENDNOTE_PLACEMENT, */ - SPpropENDNOTE_RESTART, - SPpropENDNOTE_STYLE, -}; - -const int * const DOCsectFOOTNOTE_PROP_MAP= DOCsectNOTE_PROP_MAP; -const int * const DOCsectENDNOTE_PROP_MAP= DOCsectNOTE_PROP_MAP+ NOTESprop_COUNT; - -static const int DocSectIntProps[]= - { - DGpropPAGE_WIDTH, - DGpropPAGE_HEIGHT, - DGpropLEFT_MARGIN, - DGpropRIGHT_MARGIN, - DGpropTOP_MARGIN, - DGpropBOTTOM_MARGIN, - DGpropHEADER_POSITION, - DGpropFOOTER_POSITION, - DGpropGUTTER, - DGpropMARGMIR, - SPpropSTYLE, - SPpropTITLEPG, - SPpropBREAK_KIND, - SPpropNUMBER_STYLE, - SPpropNUMBER_HYPHEN, - SPpropPAGE_RESTART, - SPpropSTART_PAGE, - SPpropCOLUMN_COUNT, - SPpropCOLUMN_SPACING, - SPpropLINEBETCOL, - SPpropFOOTNOTE_STARTNR, - SPpropFOOTNOTE_JUSTIFICATION, - /* No SPpropFOOTNOTE_PLACEMENT, */ - SPpropFOOTNOTE_RESTART, - SPpropFOOTNOTE_STYLE, - SPpropENDNOTE_STARTNR, - /* No SPpropENDNOTE_JUSTIFICATION, */ - /* No SPpropENDNOTE_PLACEMENT, */ - SPpropENDNOTE_RESTART, - SPpropENDNOTE_STYLE, - }; - -static const int DocSectIntPropCount= sizeof(DocSectIntProps)/sizeof(int); - -/************************************************************************/ -/* */ -/* Fill a mask with notes properties that are relevant for a section. */ -/* I.E: Set those section properties that are a note property. */ -/* */ -/************************************************************************/ - -void docFillSectNotesMask( PropertyMask * spMask ) - { - int i; - - for ( i= 0; i < FEPprop_COUNT; i++ ) - { - if ( DOCsectNOTE_PROP_MAP[i] >= 0 ) - { PROPmaskADD( spMask, DOCsectNOTE_PROP_MAP[i] ); } - } - } - -/************************************************************************/ -/* */ -/* Make sure all column width are zero, or that none of them is. */ -/* */ -/************************************************************************/ - -static void docSectCheckFixedColumnWidth( SectionProperties * sp ) - { - if ( sp->spColumnCount > 1 ) - { - int haveZero= 0; - int haveWidth= 0; - int col; - SectionColumn * sc; - - sc= sp->spColumns; - for ( col= 0; col < sp->spColumnCount; sc++, col++ ) - { - if ( sc->scColumnWidthTwips == 0 ) - { haveZero++; } - else{ haveWidth++; } - } - - if ( haveZero && haveWidth ) - { - sc= sp->spColumns; - for ( col= 0; col < sp->spColumnCount; sc++, col++ ) - { sc->scColumnWidthTwips= 0; } - } - } - - return; - } - -/************************************************************************/ -/* */ -/* Change section properties and tell what has been changed. */ -/* */ -/************************************************************************/ - -int docUpdSectProperties( PropertyMask * pSpDoneMask, - SectionProperties * spTo, - const PropertyMask * spSetMask, - const SectionProperties * spSet ) - { - PropertyMask doneMask; - int p; - - utilPropMaskClear( &doneMask ); - - for ( p= 0; p < DocSectIntPropCount; p++ ) - { - int prop= DocSectIntProps[p]; - int oval; - int nval; - - if ( ! PROPmaskISSET( spSetMask, prop ) ) - { continue; } - - oval= docGetSectionProperty( spTo, prop ); - nval= docGetSectionProperty( spSet, prop ); - - if ( oval == nval ) - { continue; } - - if ( docSetSectionProperty( spTo, prop, nval ) ) - { LLDEB(prop,nval); return -1; } - - PROPmaskADD( &doneMask, prop ); - } - - if ( PROPmaskISSET( spSetMask, SPpropCOLUMN_COUNT ) ) - { - if ( spTo->spColumnCount != spSet->spColumnCount ) - { - if ( docSectionPropertiesSetColumnCount( spTo, - spSet->spColumnCount ) ) - { LDEB(spSet->spColumnCount); return -1; } - - PROPmaskADD( &doneMask, SPpropCOLUMN_COUNT ); - } - } - - if ( PROPmaskISSET( spSetMask, SPpropCOLUMNS ) ) - { - int count; - - if ( spTo->spColumnCount < spSet->spColumnCount ) - { count= spTo->spColumnCount; } - else{ count= spSet->spColumnCount; } - - if ( count > 1 ) - { - const SectionColumn * scFrom= spSet->spColumns; - SectionColumn * scTo= spTo->spColumns; - int col; - - for ( col= 0; col < count- 1; scTo++, scFrom++, col++ ) - { - if ( scTo->scColumnWidthTwips != scFrom->scColumnWidthTwips ) - { - scTo->scColumnWidthTwips= scFrom->scColumnWidthTwips; - PROPmaskADD( &doneMask, SPpropCOLUMNS ); - } - if ( scTo->scSpaceToRightTwips != scFrom->scSpaceToRightTwips ) - { - scTo->scSpaceToRightTwips= scFrom->scSpaceToRightTwips; - PROPmaskADD( &doneMask, SPpropCOLUMNS ); - } - } - if ( scTo->scColumnWidthTwips != scFrom->scColumnWidthTwips ) - { - scTo->scColumnWidthTwips= scFrom->scColumnWidthTwips; - PROPmaskADD( &doneMask, SPpropCOLUMNS ); - } - } - } - - docSectCheckFixedColumnWidth( spTo ); - - if ( pSpDoneMask ) - { *pSpDoneMask= doneMask; } - - return 0; - } - -void docSectPropertyDifference( PropertyMask * pDiffMask, - const SectionProperties * sp1, - const PropertyMask * cmpMask, - const SectionProperties * sp2 ) - { - PropertyMask diffMask; - int p; - - utilPropMaskClear( &diffMask ); - - for ( p= 0; p < DocSectIntPropCount; p++ ) - { - int prop= DocSectIntProps[p]; - int oval; - int nval; - - if ( ! PROPmaskISSET( cmpMask, prop ) ) - { continue; } - - oval= docGetSectionProperty( sp1, prop ); - nval= docGetSectionProperty( sp2, prop ); - - if ( oval == nval ) - { continue; } - - PROPmaskADD( &diffMask, prop ); - } - - if ( PROPmaskISSET( cmpMask, SPpropCOLUMNS ) ) - { - int count; - - if ( sp1->spColumnCount < sp2->spColumnCount ) - { count= sp1->spColumnCount; } - else{ count= sp2->spColumnCount; } - - if ( count > 1 ) - { - const SectionColumn * sc1= sp1->spColumns; - const SectionColumn * sc2= sp2->spColumns; - int col; - - for ( col= 0; col < count- 1; sc1++, sc2++, col++ ) - { - if ( sc1->scColumnWidthTwips != sc2->scColumnWidthTwips ) - { PROPmaskADD( &diffMask, SPpropCOLUMNS ); } - if ( sc1->scSpaceToRightTwips != sc2->scSpaceToRightTwips ) - { PROPmaskADD( &diffMask, SPpropCOLUMNS ); } - } - if ( sc1->scColumnWidthTwips != sc2->scColumnWidthTwips ) - { PROPmaskADD( &diffMask, SPpropCOLUMNS ); } - } - } - - *pDiffMask= diffMask; - return; - } - -/************************************************************************/ -/* */ -/* Clean, Initialize section properties. */ -/* */ -/************************************************************************/ - -void docCleanSectionProperties( SectionProperties * sp ) - { - if ( sp->spColumns ) - { free( sp->spColumns ); } - - return; - } - -void docInitSectionProperties( SectionProperties * sp ) - { - utilInitDocumentGeometry( &(sp->spDocumentGeometry) ); - - sp->spStyle= 0; - - sp->spColumnSpacingTwips= DEF_GAP_WIDE; - sp->spLineBetweenColumns= 0; - - sp->spHasTitlePage= 0; - sp->spBreakKind= DOCibkPAGE; - sp->spPageNumberStyle= DOCpgnDEC; - sp->spPageNumberHyphen= DOCpgnhPGNHNSH; - sp->spRestartPageNumbers= 0; - - sp->spColumnCount= 1; - sp->spColumns= (SectionColumn *)0; - - sp->spStartPageNumber= 0; - - docInitFootEndNotesProperties( &(sp->spNotesProperties) ); - - return; - } - -int docSectionPropertiesSetColumnCount( SectionProperties * sp, - int n ) - { - if ( n > 1 && sp->spColumnCount < n ) - { - SectionColumn * sc= (SectionColumn *)realloc( sp->spColumns, - n* sizeof(SectionColumn) ); - if ( ! sc ) - { LXDEB(n,sc); return -1; } - - sp->spColumns= sc; - - if ( sp->spColumnCount == 1 ) - { - sc->scSpaceToRightTwips= 0; - sc->scColumnWidthTwips= 0; - } - - sc= sp->spColumns+ sp->spColumnCount; - while( sp->spColumnCount < n ) - { - sc->scSpaceToRightTwips= 0; - sc->scColumnWidthTwips= 0; - - sc++; sp->spColumnCount++; - } - } - - sp->spColumnCount= n; - return 0; - } - -/************************************************************************/ -/* */ -/* Copy SectionProperties. */ -/* */ -/* NOTE that the headers and footers are not copied. */ -/* */ -/************************************************************************/ - -int docCopySectionProperties( SectionProperties * to, - const SectionProperties * from ) - { - int i; - - if ( docSectionPropertiesSetColumnCount( to, from->spColumnCount ) ) - { LDEB(from->spColumnCount); return -1; } - - to->spDocumentGeometry= from->spDocumentGeometry; - - to->spStyle= from->spStyle; - - to->spColumnSpacingTwips= from->spColumnSpacingTwips; - to->spLineBetweenColumns= from->spLineBetweenColumns; - - to->spHasTitlePage= from->spHasTitlePage; - to->spBreakKind= from->spBreakKind; - to->spPageNumberStyle= from->spPageNumberStyle; - to->spPageNumberHyphen= from->spPageNumberHyphen; - to->spRestartPageNumbers= from->spRestartPageNumbers; - - to->spStartPageNumber= from->spStartPageNumber; - - /* docSectionPropertiesSetColumnCount() has allocated the memory */ - if ( from->spColumnCount > 1 ) - { - for ( i= 0; i < from->spColumnCount; i++ ) - { to->spColumns[i]= from->spColumns[i]; } - } - - to->spNotesProperties= from->spNotesProperties; - - docSectCheckFixedColumnWidth( to ); - - return 0; - } - -int docSectSetEqualColumnWidth( SectionProperties * sp ) - { - int col; - SectionColumn * sc; - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - int pageWide; - int colWide; - - pageWide= dg->dgPageWideTwips- - dg->dgLeftMarginTwips- dg->dgRightMarginTwips; - - if ( sp->spColumnCount < 2 ) - { return pageWide; } - - colWide= ( pageWide- ( sp->spColumnCount- 1 )* - sp->spColumnSpacingTwips )/ sp->spColumnCount; - - sc= sp->spColumns; - for ( col= 0; col < sp->spColumnCount; sc++, col++ ) - { - sc->scColumnWidthTwips= 0; - sc->scSpaceToRightTwips= 0; - } - - return colWide; - } - -int docSectSetExplicitColumnWidth( SectionProperties * sp ) - { - int col; - SectionColumn * sc; - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - int pageWide; - int colWide; - - pageWide= dg->dgPageWideTwips- - dg->dgLeftMarginTwips- dg->dgRightMarginTwips; - - if ( sp->spColumnCount < 2 ) - { LDEB(sp->spColumnCount); return -1; } - - colWide= ( pageWide- ( sp->spColumnCount- 1 )* - sp->spColumnSpacingTwips )/ sp->spColumnCount; - - if ( colWide < MIN_COL_WIDE ) - { LLDEB(colWide,MIN_COL_WIDE); return -1; } - - sc= sp->spColumns; - for ( col= 0; col < sp->spColumnCount; sc++, col++ ) - { - sc->scColumnWidthTwips= colWide; - sc->scSpaceToRightTwips= sp->spColumnSpacingTwips; - } - - return 0; - } - -/************************************************************************/ -/* */ -/* Determine the column margins. */ -/* */ -/* Because of gutters and/or mirrored margins, the page geometry is */ -/* not necessarily identical to that in the section properties. */ -/* */ -/************************************************************************/ - -void docSectGetColumnX( int * pXLine, - int * pX0, - int * pX1, - const SectionProperties * sp, - const DocumentGeometry * dgPage, - int column ) - { - int x0= dgPage->dgLeftMarginTwips; - int col; - - if ( sp->spColumnCount < 2 ) - { - *pX0= dgPage->dgLeftMarginTwips; - *pX1= dgPage->dgPageWideTwips- dgPage->dgRightMarginTwips; - return; - } - - for ( col= 0; col < column; col++ ) - { - if ( sp->spColumns[col].scColumnWidthTwips == 0 ) - { break; } - - x0 += sp->spColumns[col].scColumnWidthTwips; - x0 += sp->spColumns[col].scSpaceToRightTwips; - } - - if ( col < column || sp->spColumns[column].scColumnWidthTwips == 0 ) - { - int pageWide; - int colWide; - - pageWide= dgPage->dgPageWideTwips- - dgPage->dgLeftMarginTwips- dgPage->dgRightMarginTwips; - - colWide= ( pageWide- ( sp->spColumnCount- 1 )* - sp->spColumnSpacingTwips )/ sp->spColumnCount; - - x0= dgPage->dgLeftMarginTwips+ - column* ( colWide+ sp->spColumnSpacingTwips ); - - *pXLine= x0- sp->spColumnSpacingTwips/ 2; - *pX0= x0; - *pX1= x0+ colWide; - } - else{ - if ( column == 0 ) - { - *pXLine= x0- sp->spColumnSpacingTwips/ 2; - } - else{ - *pXLine= x0- sp->spColumns[column-1].scSpaceToRightTwips/ 2; - } - - *pX0= x0; - *pX1= x0+ sp->spColumns[column].scColumnWidthTwips; - } - - return; - } - -/************************************************************************/ -/* */ -/* Set a section property. */ -/* */ -/************************************************************************/ - -int docSetSectionProperty( SectionProperties * sp, - int prop, - int arg ) - { - DocumentGeometry * dg= &(sp->spDocumentGeometry); - - switch( prop ) - { - case DGpropPAGE_WIDTH: - dg->dgPageWideTwips= arg; - break; - case DGpropPAGE_HEIGHT: - dg->dgPageHighTwips= arg; - break; - - case DGpropLEFT_MARGIN: - dg->dgLeftMarginTwips= arg; - break; - case DGpropRIGHT_MARGIN: - dg->dgRightMarginTwips= arg; - break; - case DGpropTOP_MARGIN: - dg->dgTopMarginTwips= arg; - break; - case DGpropBOTTOM_MARGIN: - dg->dgBottomMarginTwips= arg; - break; - - case DGpropHEADER_POSITION: - if ( arg != 0 ) - { dg->dgHeaderPositionTwips= arg; } - break; - case DGpropFOOTER_POSITION: - if ( arg != 0 ) - { dg->dgFooterPositionTwips= arg; } - break; - - case DGpropGUTTER: - dg->dgGutterTwips= arg; - break; - case DGpropMARGMIR: - dg->dgMirrorMargins= arg != 0; - break; - - case SPpropSTYLE: - sp->spStyle= arg; - break; - - case SPpropTITLEPG: - sp->spHasTitlePage= ( arg != 0 ); - break; - - case SPpropBREAK_KIND: - sp->spBreakKind= arg; - break; - - case SPpropNUMBER_STYLE: - sp->spPageNumberStyle= arg; - break; - - case SPpropNUMBER_HYPHEN: - sp->spPageNumberHyphen= arg; - break; - - case SPpropPAGE_RESTART: - sp->spRestartPageNumbers= arg; - break; - - case SPpropSTART_PAGE: - sp->spStartPageNumber= arg; - break; - - case SPpropCOLUMN_COUNT: - if ( docSectionPropertiesSetColumnCount( sp, arg ) ) - { LDEB(arg); return -1; } - break; - - case SPpropCOLUMN_SPACING: - sp->spColumnSpacingTwips= arg; - break; - case SPpropLINEBETCOL: - sp->spLineBetweenColumns= ( arg != 0 ); - break; - - /* FOOTNOTE */ - case SPpropFOOTNOTE_STARTNR: - docSetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropSTARTNR, arg ); - return 0; - case SPpropFOOTNOTE_JUSTIFICATION: - docSetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropJUSTIFICATION, arg ); - return 0; - /* No - case SPpropFOOTNOTE_PLACEMENT: - docSetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropPLACEMENT, arg ); - return 0; - */ - case SPpropFOOTNOTE_RESTART: - docSetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropRESTART, arg ); - return 0; - case SPpropFOOTNOTE_STYLE: - docSetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropSTYLE, arg ); - return 0; - - /* ENDNOTE */ - case SPpropENDNOTE_STARTNR: - docSetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropSTARTNR, arg ); - return 0; - /* No - case SPpropENDNOTE_JUSTIFICATION: - docSetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropJUSTIFICATION, arg ); - return 0; - */ - /* No - case SPpropENDNOTE_PLACEMENT: - docSetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropPLACEMENT, arg ); - return 0; - */ - case SPpropENDNOTE_RESTART: - docSetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropRESTART, arg ); - return 0; - case SPpropENDNOTE_STYLE: - docSetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropSTYLE, arg ); - return 0; - - - default: - LLDEB(prop,arg); return -1; - } - - return 0; - } - -/************************************************************************/ -/* */ -/* Get a section property. */ -/* */ -/************************************************************************/ - -int docGetSectionProperty( const SectionProperties * sp, - int prop ) - { - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - - switch( prop ) - { - case DGpropPAGE_WIDTH: - return dg->dgPageWideTwips; - case DGpropPAGE_HEIGHT: - return dg->dgPageHighTwips; - - case DGpropLEFT_MARGIN: - return dg->dgLeftMarginTwips; - case DGpropRIGHT_MARGIN: - return dg->dgRightMarginTwips; - case DGpropTOP_MARGIN: - return dg->dgTopMarginTwips; - case DGpropBOTTOM_MARGIN: - return dg->dgBottomMarginTwips; - - case DGpropHEADER_POSITION: - return dg->dgHeaderPositionTwips; - case DGpropFOOTER_POSITION: - return dg->dgFooterPositionTwips; - - case DGpropGUTTER: - return dg->dgGutterTwips; - case DGpropMARGMIR: - return dg->dgMirrorMargins; - - case SPpropSTYLE: - return sp->spStyle; - - case SPpropTITLEPG: - return sp->spHasTitlePage; - - case SPpropBREAK_KIND: - return sp->spBreakKind; - - case SPpropNUMBER_STYLE: - return sp->spPageNumberStyle; - - case SPpropNUMBER_HYPHEN: - return sp->spPageNumberHyphen; - - case SPpropPAGE_RESTART: - return sp->spRestartPageNumbers; - - case SPpropSTART_PAGE: - return sp->spStartPageNumber; - - case SPpropCOLUMN_COUNT: - return sp->spColumnCount; - - case SPpropCOLUMN_SPACING: - return sp->spColumnSpacingTwips; - break; - case SPpropLINEBETCOL: - return sp->spLineBetweenColumns; - break; - - /* FOOTNOTE */ - case SPpropFOOTNOTE_STARTNR: - return docGetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropSTARTNR ); - return 0; - case SPpropFOOTNOTE_JUSTIFICATION: - return docGetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropJUSTIFICATION ); - return 0; - /* No - case SPpropFOOTNOTE_PLACEMENT: - return docGetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropPLACEMENT ); - return 0; - */ - case SPpropFOOTNOTE_RESTART: - return docGetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropRESTART ); - return 0; - case SPpropFOOTNOTE_STYLE: - return docGetNotesProperty( &(sp->spNotesProperties.fepFootnotesProps), - NOTESpropSTYLE ); - return 0; - - /* ENDNOTE */ - case SPpropENDNOTE_STARTNR: - return docGetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropSTARTNR ); - return 0; - /* No - case SPpropENDNOTE_JUSTIFICATION: - return docGetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropJUSTIFICATION ); - return 0; - */ - /* No - case SPpropENDNOTE_PLACEMENT: - return docGetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropPLACEMENT ); - return 0; - */ - case SPpropENDNOTE_RESTART: - return docGetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropRESTART ); - return 0; - case SPpropENDNOTE_STYLE: - return docGetNotesProperty( &(sp->spNotesProperties.fepEndnotesProps), - NOTESpropSTYLE ); - return 0; - - - default: - LDEB(prop); return -1; - } - - return 0; - } -/************************************************************************/ -/* */ -/* Return the sum of the other widths in a section with explicit */ -/* column layout. Additionally, assign a victim whose column width can */ -/* be narrowed to allocate extra space. */ -/* */ -/* The maximum value is the value that leaves MIN_COL_WIDE as the */ -/* column width of the victim. */ -/* */ -/************************************************************************/ - -static int docSectColsSumOthers( int * pVictim, - int * pMaxValue, - const SectionProperties * sp, - int col, - int colOther ) - { - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - int pageWide; - - int sumOthers= 0; - int i; - - int victim; - int left; - - pageWide= dg->dgPageWideTwips- - dg->dgLeftMarginTwips- dg->dgRightMarginTwips; - - for ( i= 0; i < sp->spColumnCount- 1; i++ ) - { - if ( i == col ) - { continue; } - - sumOthers += sp->spColumns[i].scColumnWidthTwips; - sumOthers += sp->spColumns[i].scSpaceToRightTwips; - } - - if ( i != col ) - { sumOthers += sp->spColumns[i].scColumnWidthTwips; } - - sumOthers += colOther; - - if ( col == sp->spColumnCount- 1 ) - { victim= sp->spColumnCount-2; } - else{ victim= sp->spColumnCount-1; } - - left= sp->spColumns[victim].scColumnWidthTwips- MIN_COL_WIDE; - - if ( pVictim ) - { *pVictim= victim; } - if ( pMaxValue ) - { *pMaxValue= pageWide- sumOthers+ left; } - - return sumOthers; - } - -/************************************************************************/ -/* */ -/* Claim extra space by subtracting it from the column width of the */ -/* victim. Applies for explicit column layout only. */ -/* */ -/************************************************************************/ - -static int docSectReserveWidth( SectionProperties * sp, - int victim, - int sumValues ) - { - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - int pageWide; - - pageWide= dg->dgPageWideTwips- - dg->dgLeftMarginTwips- dg->dgRightMarginTwips; - - if ( sumValues > pageWide ) - { - int narrowed; - - narrowed= pageWide- sumValues+ sp->spColumns[victim].scColumnWidthTwips; - if ( narrowed < MIN_COL_WIDE ) - { LDEB(narrowed); return -1; } - - sp->spColumns[victim].scColumnWidthTwips= narrowed; - } - - return 0; - } - -/************************************************************************/ - -static void docSectGetEqualWidths( - int * pColWide, - int * pGapWide, - int * pMaxColWide, - int * pMaxGapWide, - const SectionProperties * sp ) - { - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - int pageWide; - - int colWide; - int maxColWide; - int gapWide; - int maxGapWide; - - int ncol= sp->spColumnCount; - int ngap= sp->spColumnCount- 1; - - pageWide= dg->dgPageWideTwips- - dg->dgLeftMarginTwips- dg->dgRightMarginTwips; - - colWide= ( pageWide- ngap* sp->spColumnSpacingTwips )/ ncol; - maxColWide= ( pageWide- ngap* MIN_GAP_WIDE )/ ncol; - - gapWide= sp->spColumnSpacingTwips; - if ( ngap == 0 ) - { maxGapWide= 0; } - else{ maxGapWide= ( pageWide- ncol* MIN_COL_WIDE )/ ngap; } - - if ( pColWide ) - { *pColWide= colWide; } - if ( pGapWide ) - { *pGapWide= gapWide; } - if ( pMaxColWide ) - { *pMaxColWide= maxColWide; } - if ( pMaxGapWide ) - { *pMaxGapWide= maxGapWide; } - - return; - } - -/************************************************************************/ -/* */ -/* Get the spacing right of a column. */ -/* */ -/************************************************************************/ - -int docSectGetColumnSpacing( int * pMinValue, - int * pMaxValue, - const SectionProperties * sp, - int col ) - { - int value; - int maxValue; - - int haveFixedWidth; - - haveFixedWidth= docSectPropsFixedWidthColumns( sp ); - - if ( haveFixedWidth ) - { docSectGetEqualWidths( (int *)0, &value, (int *)0, &maxValue, sp ); } - else{ - docSectColsSumOthers( (int *)0, &maxValue, - sp, col, sp->spColumns[col].scColumnWidthTwips ); - - value= sp->spColumns[col].scSpaceToRightTwips; - } - - if ( pMaxValue ) - { *pMaxValue= maxValue; } - if ( pMinValue ) - { *pMinValue= MIN_GAP_WIDE; } - - return value; - } - -/************************************************************************/ -/* */ -/* Set the spacing right of a column. */ -/* */ -/************************************************************************/ - -int docSectSetColumnSpacing( SectionProperties * sp, - int col, - int newValue ) - { - int maxValue; - int haveFixedWidth; - - haveFixedWidth= docSectPropsFixedWidthColumns( sp ); - - if ( haveFixedWidth ) - { - if ( col > 0 ) - { LLLDEB(haveFixedWidth,col,newValue); return -1; } - - docSectGetEqualWidths( (int *)0, (int *)0, (int *)0, &maxValue, sp ); - if ( newValue < MIN_GAP_WIDE || newValue > maxValue ) - { LLDEB(newValue,maxValue); return -1; } - - sp->spColumnSpacingTwips= newValue; - } - else{ - int victim; - int sumOthers; - - sumOthers= docSectColsSumOthers( &victim, &maxValue, - sp, col, sp->spColumns[col].scColumnWidthTwips ); - - if ( newValue < MIN_GAP_WIDE || newValue > maxValue ) - { LLDEB(newValue,maxValue); return -1; } - if ( victim == col ) - { LLDEB(victim,col); return -1; } - - if ( docSectReserveWidth( sp, victim, sumOthers+ newValue ) ) - { LLDEB(sumOthers,newValue); return -1; } - - sp->spColumns[col].scSpaceToRightTwips= newValue; - } - - return 0; - } - -/************************************************************************/ -/* */ -/* Get the spacing right of a column. */ -/* */ -/************************************************************************/ - -int docSectGetColumnWidth( int * pMinValue, - int * pMaxValue, - const SectionProperties * sp, - int col ) - { - int value; - int maxValue; - - int haveFixedWidth; - - haveFixedWidth= docSectPropsFixedWidthColumns( sp ); - - if ( haveFixedWidth ) - { - docSectGetEqualWidths( &value, (int *)0, &maxValue, (int *)0, sp ); - } - else{ - docSectColsSumOthers( (int *)0, &maxValue, - sp, col, sp->spColumns[col].scSpaceToRightTwips ); - - value= sp->spColumns[col].scColumnWidthTwips; - } - - if ( pMinValue ) - { *pMinValue= MIN_COL_WIDE; } - if ( pMaxValue ) - { *pMaxValue= maxValue; } - - return value; - } - -/************************************************************************/ -/* */ -/* Set the spacing right of a column. */ -/* */ -/************************************************************************/ - -int docSectSetColumnWidth( SectionProperties * sp, - int col, - int newValue ) - { - int maxValue; - int haveFixedWidth; - - haveFixedWidth= docSectPropsFixedWidthColumns( sp ); - - if ( haveFixedWidth ) - { - const DocumentGeometry * dg= &(sp->spDocumentGeometry); - int pageWide; - int gapWide; - - docSectGetEqualWidths( (int *)0, &gapWide, &maxValue, (int *)0, sp ); - - if ( newValue < MIN_COL_WIDE || newValue > maxValue ) - { LLDEB(newValue,maxValue); return -1; } - - pageWide= dg->dgPageWideTwips- - dg->dgLeftMarginTwips- dg->dgRightMarginTwips; - - gapWide= ( pageWide- ( sp->spColumnCount* newValue ) )/ - ( sp->spColumnCount- 1 ); - if ( gapWide < MIN_GAP_WIDE ) - { LLDEB(gapWide,MIN_GAP_WIDE); gapWide= MIN_GAP_WIDE; } - - sp->spColumnSpacingTwips= gapWide; - } - else{ - int victim; - int sumOthers; - - sumOthers= docSectColsSumOthers( &victim, &maxValue, - sp, col, sp->spColumns[col].scSpaceToRightTwips ); - - if ( newValue < MIN_COL_WIDE || newValue > maxValue ) - { LLDEB(newValue,maxValue); return -1; } - if ( victim == col ) - { LLDEB(victim,col); return -1; } - - if ( docSectReserveWidth( sp, victim, sumOthers+ newValue ) ) - { LLDEB(sumOthers,newValue); return -1; } - - sp->spColumns[col].scColumnWidthTwips= newValue; - } - - return 0; - } |