Compare commits
7 Commits
master
...
NIO_32_BRA
Author | SHA1 | Date | |
---|---|---|---|
|
8571f9e70c | ||
|
c1e2c16412 | ||
|
58a6793fdd | ||
|
fc34d3e1b1 | ||
|
19cfe88647 | ||
|
2a2ae2097f | ||
|
c49ceaba31 |
42
.ci/Jenkinsfile
vendored
42
.ci/Jenkinsfile
vendored
@ -1,42 +0,0 @@
|
|||||||
properties(
|
|
||||||
[
|
|
||||||
disableConcurrentBuilds()
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
node('linux && docker') {
|
|
||||||
try {
|
|
||||||
stage('Checkout') {
|
|
||||||
//branch name from Jenkins environment variables
|
|
||||||
echo "My branch is: ${env.BRANCH_NAME}"
|
|
||||||
|
|
||||||
// this doesn't grab tags pointing to this branch
|
|
||||||
//checkout scm
|
|
||||||
// this hack does... https://issues.jenkins.io/browse/JENKINS-45164
|
|
||||||
checkout([
|
|
||||||
$class: 'GitSCM',
|
|
||||||
branches: [[name: 'refs/heads/'+env.BRANCH_NAME]],
|
|
||||||
extensions: [[$class: 'CloneOption', noTags: false, shallow: false, depth: 0, reference: '']],
|
|
||||||
userRemoteConfigs: scm.userRemoteConfigs,
|
|
||||||
])
|
|
||||||
sh '''
|
|
||||||
set -euxo pipefail
|
|
||||||
git checkout "$BRANCH_NAME" --
|
|
||||||
git reset --hard "origin/$BRANCH_NAME"
|
|
||||||
'''
|
|
||||||
}
|
|
||||||
|
|
||||||
stage('Build + Deploy') {
|
|
||||||
sh 'curl --compressed -sL https://code.moparisthebest.com/moparisthebest/self-ci/raw/branch/master/build-ci.sh | bash'
|
|
||||||
}
|
|
||||||
|
|
||||||
currentBuild.result = 'SUCCESS'
|
|
||||||
} catch (Exception err) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
} finally {
|
|
||||||
stage('Email') {
|
|
||||||
step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: 'admin.jenkins@moparisthebest.com', sendToIndividuals: true])
|
|
||||||
}
|
|
||||||
deleteDir()
|
|
||||||
}
|
|
||||||
}
|
|
36
.ci/build.sh
36
.ci/build.sh
@ -1,36 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
# Java 14+ java.lang.Record is ambiguous with hssf.Record :'(
|
|
||||||
[ $JAVA_VERSION -lt 7 -o $JAVA_VERSION -gt 13 ] && echo "build does not support JAVA_VERSION: $JAVA_VERSION" && exit 0
|
|
||||||
|
|
||||||
echo "starting build for JAVA_VERSION: $JAVA_VERSION"
|
|
||||||
|
|
||||||
# grab all deps with java 8
|
|
||||||
[ $JAVA_VERSION -eq 7 ] && run-java 8 mvn dependency:go-offline
|
|
||||||
|
|
||||||
# install deps
|
|
||||||
mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
|
|
||||||
|
|
||||||
if [ $JAVA_VERSION -lt 12 ]
|
|
||||||
then
|
|
||||||
# clean and test
|
|
||||||
mvn clean test -B
|
|
||||||
else
|
|
||||||
# clean and test
|
|
||||||
mvn clean test -B -Djava.version=7 # java12+ minimum target is 7, not 6
|
|
||||||
fi
|
|
||||||
|
|
||||||
# publish only from java 6 and master branch
|
|
||||||
if [ "$BRANCH_NAME" == "master" -a $JAVA_VERSION -eq 7 ]
|
|
||||||
then
|
|
||||||
echo 'deploying to maven'
|
|
||||||
# java 7 cannot do modern SSL, use java 8 to deploy
|
|
||||||
run-java 8 mvn deploy -Dmaven.test.skip=true -B
|
|
||||||
|
|
||||||
mkdir -p release
|
|
||||||
find -type f -name '*.jar' -print0 | xargs -0n1 -I {} mv '{}' 'release/'
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo 'build success!'
|
|
||||||
exit 0
|
|
16
.cvsignore
Normal file
16
.cvsignore
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
dist
|
||||||
|
scripts
|
||||||
|
*.el
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
build.number
|
||||||
|
log*.*
|
||||||
|
*.log
|
||||||
|
build
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
workbook.xls
|
||||||
|
bak
|
||||||
|
classes
|
||||||
|
untitled1.jpx
|
22
.gitignore
vendored
22
.gitignore
vendored
@ -1,22 +0,0 @@
|
|||||||
classes
|
|
||||||
workbook.xls
|
|
||||||
bak
|
|
||||||
*.iws
|
|
||||||
build.number
|
|
||||||
*.el
|
|
||||||
TEST-org.apache.poi*.xml
|
|
||||||
build
|
|
||||||
.settings
|
|
||||||
scripts
|
|
||||||
*.ipr
|
|
||||||
untitled1.jpx
|
|
||||||
*.iml
|
|
||||||
log*.*
|
|
||||||
dist
|
|
||||||
*.log
|
|
||||||
bin
|
|
||||||
.ant-targets-build.xml
|
|
||||||
out
|
|
||||||
.idea
|
|
||||||
.gradle
|
|
||||||
target
|
|
444
KEYS
Normal file
444
KEYS
Normal file
@ -0,0 +1,444 @@
|
|||||||
|
This file contains the PGP keys of various developers.
|
||||||
|
|
||||||
|
Users: pgp < KEYS
|
||||||
|
gpg --import KEYS
|
||||||
|
Developers:
|
||||||
|
gpg --list-key <your email> and append it to this file.
|
||||||
|
gpg -a --export <your email> and append it to this file.
|
||||||
|
|
||||||
|
(gpg --list-key <your email>
|
||||||
|
&& gpg --armor --export <your email>) >> this file.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pub 1024D/12DAE9BE 2004-01-25 Glen Stampoultzis <glens@apache.org>
|
||||||
|
sig 3 12DAE9BE 2004-01-25 Glen Stampoultzis <glens@apache.org>
|
||||||
|
sub 1024g/2BBB28EA 2004-01-25
|
||||||
|
sig 12DAE9BE 2004-01-25 Glen Stampoultzis <glens@apache.org>
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.2.2 (Cygwin)
|
||||||
|
|
||||||
|
mQGiBEATU6gRBACo3iUkfku4/G2q8ldWFiiCekHK5oqx0U1N6fyO+Xgs+6V6btEZ
|
||||||
|
drF2DUCyto6ig4FJT81L34HUQ6l9bPnpa4nNsl2EMBknY42LjmC55x7Q5rsQbiRj
|
||||||
|
+2JkoQJk2Jc3hneuh4Wsv49stOCDQMOV5BtjZs31t7rr+wuKPMkIw/Nf1wCgngI9
|
||||||
|
ZWFyLxspoi9bL1/xBID18jsD/RxGBep4F8HwXEdHTeHnmjEuJSlYhmAKQ6Fd7bdb
|
||||||
|
ex16a54Gsg7fVD0rIIsytzVUACQMi7V6tmE4Wf/XaY7+ma5w4gCsxUCIeujU4Y7i
|
||||||
|
WUDwtlTkr2IudmoxSIDDpS12NPZqCP7PbU2RK+KwnnITjs80a+QlHYaO9te7HVcL
|
||||||
|
F6YIA/9YZkYp5TpoMO1ISnlv0gXMcIaznbNMoRgeXZHvYyEvy014jArHmG41LVBj
|
||||||
|
6TnBHFLQi4xA7Ql98oIgfszaRr/9GshvoL6Iu1x1SoV7dMrqFBC6e2JD9N/IgBtZ
|
||||||
|
EGg7US3nIJnlCjJSIkXKfPJL4FyYWwt6IEZcF6Mi/USsyLA6wrQkR2xlbiBTdGFt
|
||||||
|
cG91bHR6aXMgPGdsZW5zQGFwYWNoZS5vcmc+iFsEExECABsFAkATU6gGCwkIBwMC
|
||||||
|
AxUCAwMWAgECHgECF4AACgkQONrI4hLa6b48RgCaAqQg0wtiOQ8jqX6S7tZi1OMg
|
||||||
|
CQAAn2Ty1d/UdGLqlGkCPMkaB6otTMhZuQENBEATU6kQBADUbn5pT2D8vi64RU5E
|
||||||
|
SeTn/rNzLglJ4nzoOfeIcHm7p3hppjT0Q1YbHvdOSaigYApzxoiSf+0Mt8NSCfDf
|
||||||
|
B/wjfndHlrcdPkiJi4fBkQHihcuJtEgOkAwXfSJ+MUXG+fEgEuGdYm7tNV3n/eOY
|
||||||
|
gn9Vzs/LofrQ7nY3+WkNOUia/wADBwQAnqZ4wPm0VY/fjCWJ34wvSfPk6Qg8m502
|
||||||
|
MfHIGY/UZ+BY5DK3iQR8hrIu6FU0tn0qoF7PCNehOtd2cR9kA7I2gyfaVR8JY2Ek
|
||||||
|
F18jungrNRrNuNx3rJeUD6ViQjC44K4vf6y8CkxmkHTmB9ZC2+uGdMeOdDvbck/u
|
||||||
|
JA+XB2tykJWIRgQYEQIABgUCQBNTqQAKCRA42sjiEtrpvpy3AJ4trdVLGCzJwB2R
|
||||||
|
Z/zxD3xBnTdY5QCeNUdw2VcsrzAF541sawFRxOmL3eY=
|
||||||
|
=la1N
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
|
||||||
|
pub 1024D/4CEED75F 2004-03-24 [expires: 2009-03-23]
|
||||||
|
uid Nick Burch <nick@gagravarr.org>
|
||||||
|
uid Nick Burch <nick@apache.org>
|
||||||
|
sub 1024g/5E0E1748 2004-03-24 [expires: 2009-03-23]
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.4.7 (GNU/Linux)
|
||||||
|
|
||||||
|
mQGiBEBhnKkRBACOPYQoULwS4a37UsNiinwqJ+2XVMal5FQyMOc6hNneyvdau4cO
|
||||||
|
oSNgdEkNtAN9fecSh06wke9mFBR9iVD4QpCqiRk8s20lr4QAFw4urxbe6iOf/Ytr
|
||||||
|
q7I0t3/zpzx4MuzwvN7ffPaE5EzE6F3ryQDkSulMeLzDbdRSZIezocDyQwCgpKTA
|
||||||
|
UtpUwP38GH81VCtbEWfEJpMD/jraHQdr4KXnv7iIvGtOLbODrmgfGfZYPsGoJlHl
|
||||||
|
+IIFdTfRCbUNc1Mh9/vcP45bnX62Crsp2JuDxZo8Dq4buE77pZ/Yw1aaIzhHBGcP
|
||||||
|
YlIvLz/S2WCZxKyNrIE86WK/DlMAXoHAJigErD+X1UYLNVb0+u5MeHN+FF0yLMS4
|
||||||
|
9Cp4A/wJznIOc7sO+L6psNNUWSu1G9TAPo6QRu/6CTaYHMy8uMzovjrlYF9bjZFe
|
||||||
|
9TVJUkHYMv2tsthZ7eWG0jAyHabvn1XgCDRjJcs10FZ6obIU5BDaJLjaxMU+u91k
|
||||||
|
F/AiO1zStA9wuasITcurU3BF4f/ZywJXwVDFvpYUh0xV1pK0qrQfTmljayBCdXJj
|
||||||
|
aCA8bmlja0BnYWdyYXZhcnIub3JnPohoBBMRAgAgBQkJZgGABQsHCgMEAxUDAgMW
|
||||||
|
AgECF4AFAkQQQhkCGQEAEgdlR1BHAAEBCRD1wmAWTO7XX5UOAJsHKnihLRiVsvMt
|
||||||
|
6Iwss6k9ZkqAmwCeMz7aSaQp088fLrL6c/5cdEsM/haIRgQQEQIABgUCQGGc+wAK
|
||||||
|
CRDIh7WuwLlVejPLAKDoFiCmPsApgl99/Sgbi5+GD6pXXACeLQyS8rg+rz7zOagc
|
||||||
|
MJ+TXdY87wKIRgQQEQIABgUCQGGeNwAKCRB4Ma11Ja7RdocaAKDVs5beITXLa/9r
|
||||||
|
W5r8Qptyhzp1dwCfVxgAMgL00Muh6gSnk7MI23xUgpmJAJUDBRBAYf1wIBRZzICI
|
||||||
|
OAEBAcEcA/9fO1E2pj1QSOZiX53ngKxF+Vxo8XfuBxbplXQaN2/acUsOGZVp8r5o
|
||||||
|
o+3w0qzn7YLXpStlnFz40UAjAWJBPtYTnzGR3twpChZRDTRrmaGVAssG+DuJwHBd
|
||||||
|
sC4DW5QisDTRFg+lyZ5d7bI/H+ckbXma+7BRwPtG0rRXK67O1p3lo4hGBBARAgAG
|
||||||
|
BQJAYfNUAAoJEEPSiApOm1UCnSIAnjg0phq4MhuzTnBoHoHIbqO7Jj5+AKCQ9HC/
|
||||||
|
d/gOHitfw2bcjHMKSwgDeIhMBBARAgAMBQJEEDtmBYMFt2LDAAoJEGao+or0Qx8m
|
||||||
|
utAAnR8OikkgQDLxBxdaFtFHtsc09lR+AJ48A1Nkex+ZNl0VAEgWLqqoFVkWDIhz
|
||||||
|
BBARAgAzBQJEEEYpBYMB4TOAJhpodHRwOi8vd3d3LmNhY2VydC5vcmcvaW5kZXgu
|
||||||
|
cGhwP2lkPTEwAAoJENK7DQFl0P1YraQAn1AIwkEdunNsv4WHnTeLD6jUHI2fAJ9/
|
||||||
|
5QU0PWmJm9oXlfJvAqhDla7824hdBBMRAgAdBQJAYZypBQkJZgGABQsHCgMEAxUD
|
||||||
|
AgMWAgECF4AACgkQ9cJgFkzu118o3gCgl7/N/oQTezzKsfQLXtdxDfpgrDUAn0lo
|
||||||
|
9cFV5d7ygWYsx98kMww5esrhiEYEExECAAYFAkRLzQUACgkQYIWjhkOmiWp7XACf
|
||||||
|
UBgauZJKCObzIV4vSysem9x3RE4An11aj+N34i/rkO1bAci6VSw4xZRTiEwEEBEC
|
||||||
|
AAwFAkSjAlUFgwUkm9QACgkQlFBD9TXBAPB3dQCeLFS8k2lJO4TZsQjDtCpgCCAC
|
||||||
|
UOQAnRMousjRDrLkK5mfH77ZfAmKfhPziEwEEBECAAwFAkSjjdEFgwUkEFgACgkQ
|
||||||
|
LSGrZWVGG3lQcACdGAhg3AIUUnQ+4h26jjTeGSbBHqgAnArrOTHJNdq3VDbh9yDV
|
||||||
|
k5uTJl9HiEwEERECAAwFAkSjGxgFgwUkgxEACgkQVg0IYe59x074sACcCp/8Huio
|
||||||
|
c56pat7L8mJ+mf+hWbEAoN2nKaIOTOU15J3ihKJpd6vU45guiEwEERECAAwFAkSj
|
||||||
|
GygFgwUkgwEACgkQynKdYmA9T1R+yQCfTO5FXRBfJi25I6XvWMB4srZJ/xwAn2vW
|
||||||
|
BrXggeteRgdrphPDeRayBbksiEwEExECAAwFAkSjqWkFgwUj9MAACgkQ3bpkuiwx
|
||||||
|
LS/CmgCfdZr55yidbD/7VvFeWR/aZlVy8tEAoImZ0+7Pa7HQADu8GP4KnLU/aw6x
|
||||||
|
iEwEExECAAwFAkSjqXcFgwUj9LIACgkQUI6uxTAtpWiCwwCbB9Dpc2ht9aQ+nIhC
|
||||||
|
Xc88p/EepA0AoKmNFqeAs6lUVXmQ2nESo9dyd3zEiKIEEwECAAwFAkSjqWAFgwUj
|
||||||
|
9MkACgkQms08wKmfdd0c7QP+OmJUuTIFeb2nIBpWT6nASzAaIZKF4e4laWQFkM6s
|
||||||
|
wWMzUkolVvkBD9U3DE0Ka9rKtbGNARRcJHt4JPcKnzdeHlhtt0TD1IeSAvvAS0aw
|
||||||
|
rnNhu+1ta3vr3U/uF/Se47AI4czShhO1G/C0Q++HDJ+H+xJoysIHjR0dwRHcCHyl
|
||||||
|
AGaIRgQQEQIABgUCRKP0UwAKCRA39o/1AVr8iho4AKDZ1rVmNXD2KAHHJZshHvwG
|
||||||
|
pRz3VwCg5Z7hpclWyw3OkKaz/G4T08lIhxaITAQQEQIADAUCRKRJ+AWDBSNUMQAK
|
||||||
|
CRArfoLnQ+8hHytfAJ0busES2PyWxOkyRidcllRSX0rLsQCeKcKHsQjCn6fd/nV7
|
||||||
|
VN/9pwAJRfKIRgQQEQIABgUCRKfNKwAKCRDVM051sTE94iukAJ4h3TVd62OH3Gpf
|
||||||
|
bNku1tT3XJcvVgCgtSV/04an+u0VSRADSRq/5uBNDeGIRgQQEQIABgUCRKkt2wAK
|
||||||
|
CRAyyeTONkLLS6iUAJ97ELvsa6Wlmg5UCsa4AAephiEDFwCgn0YHqUwx2bVWL1el
|
||||||
|
R53bTWaqEqKITAQTEQIADAUCRKYBJgWDBSGdAwAKCRBMBCgYMRo95cNiAKC7fFzL
|
||||||
|
Cq2StE07S6rzg6qlF2tS8gCcCvoT7YvhqabHSuph+hbrF2KmabWInAQQAQIABgUC
|
||||||
|
RKkt6gAKCRA34/Rf7mXjIWs5A/9xV456Fiy+QelbGJ79sHIPl5Kn8VEKMuWvR+dk
|
||||||
|
nShRg88XdrGshMFrX+t2enDxr2upL3R8CA+eVDC/0yRj8SLbvn6nfEOJqS8eYKkg
|
||||||
|
gdDtWU5nbb4BZvBKAXlddAOsZSFD/h6qw6Rl3ZiDTHOJKjq9Tip/Y9uHMpdxkKBN
|
||||||
|
S1bqJ4hGBBARAgAGBQJEqq5DAAoJEDWLqjNQ+WEWbJkAnRqNOvXDpUb5GnyP0zBv
|
||||||
|
OI4pAhWuAJ4gPsyDQ3eYMUTjXgnbUjoCzlp3i4hGBBARAgAGBQJEqs9RAAoJEPs3
|
||||||
|
2kAzLmPNVr4Anjg0XF6F9dTJLkXCTHmDnxDOe/XMAJ9qtSnYo92k3S+7mmmo2wWz
|
||||||
|
cXUh84hGBBARAgAGBQJFD4IrAAoJELK+vEAVKSSvoWAAn1G8FQnham8jmxjnQ88J
|
||||||
|
BAOs5bQJAJsH0ejEx+zrNkUXRGbSHwhn043NnIhGBBARAgAGBQJGOOJsAAoJEBVF
|
||||||
|
s/7iIt5PRMQAnj3Q4CSSCGxZhzpSrLoyVkwv6qwOAJ9Lh6KwkVQM/PpCkGYCMeTa
|
||||||
|
mE7GWIhGBBARAgAGBQJGOOdXAAoJEGPQra6REgPkVLUAnj7TSoPI26zd7nmI0ra2
|
||||||
|
sIdxuZQyAJwJ0P7/TGv6r+cK/VzA6stSdB5kn4hGBBARAgAGBQJGPIt2AAoJEJhw
|
||||||
|
7/PxL2ByexcAnRFs0YOPRYqAByWMgOGhmgavhOqgAJ9RCWLjiGqQpHUzbYEnTlRA
|
||||||
|
/KjZPYhGBBMRAgAGBQJGPbD0AAoJEOHh8rCZDtSqBAQAn1iHGB4NgEzdkR366O+a
|
||||||
|
HN1FIxlPAJ9dPHHJ8BjwkpQcv4TA//+RTVDKQohGBBARAgAGBQJGPfRxAAoJEKBy
|
||||||
|
1NBDWMWEj3YAni++q7wlmWUueE0HQRHZlI1U0Ui0AKCMYd285cpVqW8HKF+3Bb11
|
||||||
|
h+x9DohGBBARAgAGBQJGPgPLAAoJEAKlpgULfmz6xEgAn2tcTgsO5i6IRfVE/Cz6
|
||||||
|
8Hy4gaFHAKCecGT1hIF+PAmKqtQILwlP7J6PwIhGBBARAgAGBQJGPhUkAAoJEFQi
|
||||||
|
DSzIdBVcI0IAn3/XpMV5+U4WYNSYfOgSOoox8akzAJ4zTY/2wDTLPP6jKjSDGl7f
|
||||||
|
lPuM1YhGBBMRAgAGBQJGPZ/gAAoJEC65RoKIgXQCzMkAoJyrU1OOVv+f6JxEML5n
|
||||||
|
pac4w95EAKC26L2+z2C9e9fdZTZIal0MD34ceIhGBBARAgAGBQJEow8CAAoJEMuu
|
||||||
|
vjmkbEyhuz4AoJP5fyaw7b51/Rxj2T3ErVFiL63EAJ4zUAt6oDiAYcGM8aIPpdTb
|
||||||
|
Hj4gZ4hGBBARAgAGBQJGOPRmAAoJEHPdjBYBUwI1Km0AoIa21wJevepbT/5TPll7
|
||||||
|
QJECGD7kAKCdCWkWAzDVYslcO5Ph4dzwScxDT4hGBBARAgAGBQJGPhU3AAoJED4q
|
||||||
|
b8JfKYgkKzcAn1JmwiS43yvergh4BaAskcMY/xdsAKC8MuZAVZVBOZUWXiB7dFpD
|
||||||
|
It02LohGBBARAgAGBQJGQPXcAAoJEA9FCiZiEL/A1PwAn3LhRkQs08VQQlFARFK3
|
||||||
|
4dt+R6l1AJ9rYqkIQ8HyRW4hNkoqBGrEBhf+SYhGBBARAgAGBQJGRhEFAAoJEKIR
|
||||||
|
WuFfa4tymwAAoNT4GmHKozQ6hH9VS+4LSLwYJTeIAKDgpVB3iBZ3YfLsP3dSUFXS
|
||||||
|
59A1zohGBBARAgAGBQJGTENCAAoJEB8hI8Nr2HKg3BsAoLG2CWQCFOdb7dp+CEm3
|
||||||
|
F1srkOUxAJ4wxo52iD70bLDz1Ic+zxWYNwwLoYhGBBARAgAGBQJGUm0/AAoJEDLB
|
||||||
|
1u8PFDvByzoAoLey7JpjuwxQEbJcsf30OR4+DUCQAJ96lZ1+sFa5/uS86DqtEzYZ
|
||||||
|
XfxqY4hGBBARAgAGBQJGXtTfAAoJEJqG18zRqupgTQ4AoJwJU8+Lp98v9KUlpVFg
|
||||||
|
vqTfGGKcAKCUBMvB3iajF19kwkAGOdw+Vfg/2ohGBBARAgAGBQJGpUoBAAoJEDm+
|
||||||
|
UaEITJETSy8An2klXCY06qmW0QIbLp3rlGtkadJ5AJ41D+v5IrgFa4L5r0u6cVct
|
||||||
|
eDgpm4hGBBARAgAGBQJGrcs7AAoJEDPNZzOvXsRSjfsAoMNE4KLtYw8fKY5F3xfU
|
||||||
|
jztZJGWvAJ4m1yCG647P2tmFB7kHKp3NK4JHL4hiBBMRAgAaBQsHCgMEAxUDAgMW
|
||||||
|
AgECF4ACGQEFAkdhbWoAEgdlR1BHAAEBCRD1wmAWTO7XX5ZQAJ4iF/DqMRcKRu4x
|
||||||
|
8ZJ0Kyh1o+dZiQCgnD4byMYh/dt3SNCD9Bb8CquVWM+IcQQQEQIAMQUCRkjFYSoc
|
||||||
|
SGVubmluZyBTY2htaWVkZWhhdXNlbiA8aHBzQGludGVybWV0YS5kZT4ACgkQMoZO
|
||||||
|
QZyFIiubqgCfY3UZmh8/ColBH9DdR4T3Qu39V/QAnRCOrI77IQqsgbEKfAGBdLL7
|
||||||
|
oCMliGIEExECABoFCwcKAwQDFQMCAxYCAQIXgAIZAQUCRoLMgQASB2VHUEcAAQEJ
|
||||||
|
EPXCYBZM7tdfgTEAn3WPCq7Wka4rbVMEo21b56ecf2mkAJ0asj/6Q3+uRYwCw2BT
|
||||||
|
64luMMTth4hGBBIRAgAGBQJH/Sw+AAoJEIuWKUP8JD88O7UAn3Q4yWU5j9GQM7DJ
|
||||||
|
kx0kBB4ortLUAJ4gKt7NW7IUD7R90z3yRiLsZK5oGohrBBMRAgArBQJH/SbJJBpo
|
||||||
|
dHRwczovL3d3dy5jYWNlcnQub3JnL2Nwcy5waHAjcDUuMgAKCRB/WE+eTdnRxFdx
|
||||||
|
AJ4p2m3i5bxid1rffLuIPJGigXJxsgCgtsGuLZ1GZpCF7aTaDmbqKNZ2nPuIRgQQ
|
||||||
|
EQIABgUCR/1FdgAKCRCQOE2aNcfpQmdoAKCvFJqRHDnLHcwCXWm5gmQeCKjgMgCg
|
||||||
|
1xVRK+s/zhOx/1gxMc44XS1s2rWIRgQQEQIABgUCR/3E3gAKCRAYOB/XSxvmmOHe
|
||||||
|
AKDLbPmgFiuy34AbE76qqj6IKwL9rACdH0pDwaBNRBVoh6x9enklWsKp312IRgQQ
|
||||||
|
EQIABgUCR/5OxwAKCRD9b4jGIdCnGxTvAKCixot7708Y+wcA6wMYsAHAiyKkLQCg
|
||||||
|
o7qPebiwNqa6qN5GubRqeH30IE6IRgQTEQIABgUCR/4LhAAKCRCBLyCFwtUL+/Y4
|
||||||
|
AKCEyDYZig2Z3hbEJelZWUx6TRAI2QCdHcACoW0AEbpS/pfeJ85IFtt7gCaInAQQ
|
||||||
|
AQIABgUCR/5NYQAKCRAxpj2W7BQLgTXFA/9+jVWgv5F4rtuCWSqu52VhJO6i2ttd
|
||||||
|
q0SEcScAGSSrWtKL+vHcjtQj4JvXvc4FWpRi3DediTwgOJHAOnTGqzD6pPcFgej2
|
||||||
|
+lHwDPeNEpPdgFP1tvZUcGlocjIdXwtbcBxC6lulaTcuZjZ4UeHV77b2jTJDI6t9
|
||||||
|
rEAghYnSwLU4B7QcTmljayBCdXJjaCA8bmlja0BhcGFjaGUub3JnPohkBBMRAgAk
|
||||||
|
BQJEDXF+AhsjBQkJZgGABgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEPXCYBZM7tdf
|
||||||
|
e9YAniX3VLEqLKdM+LUFpmTEAcx0TYt1AKCAKSb/vNAIQB9V53ir6lh0GepeXIhM
|
||||||
|
BBARAgAMBQJEEDtmBYMFt2LDAAoJEGao+or0Qx8mOvoAn0XC0aVCBylYR2653f4B
|
||||||
|
kbaxu263AJ4u9Uxr/a0rhoU1o8Xg1BaHFBAus4hzBBARAgAzBQJEEEYpBYMB4TOA
|
||||||
|
JhpodHRwOi8vd3d3LmNhY2VydC5vcmcvaW5kZXgucGhwP2lkPTEwAAoJENK7DQFl
|
||||||
|
0P1YsLgAoIdMkknxorqjMs1sbNoXaO6ZbH3PAJsFNpa0L7cQdw4BAJAPEm/JbI06
|
||||||
|
0IhGBBMRAgAGBQJES80NAAoJEGCFo4ZDpolq5z8AoKRPKboTFO7KeqqDKNQZ/rhK
|
||||||
|
9IJGAKCIz0GNdfWWWH8amU6suxf2lHsXuYhMBBARAgAMBQJEowJVBYMFJJvUAAoJ
|
||||||
|
EJRQQ/U1wQDw8dYAoNPG7vySXsfggj57vN/4nd6ViyH1AJ9XaF32kbKyN5OdC8Z3
|
||||||
|
136wd1aVKIhMBBARAgAMBQJEo43RBYMFJBBYAAoJEC0hq2VlRht5o08AoIGGU5dc
|
||||||
|
GnvR1cvWsrQRApdsEBbeAJ4sjZcQe5tsD7RCy5blPFyKbEY664hMBBERAgAMBQJE
|
||||||
|
oxsYBYMFJIMRAAoJEFYNCGHufcdOGuMAn1NGR6XRuXApUF2yQ2UVT1R+TCRKAJ9q
|
||||||
|
cf6nuhTqf9lJgjkgaILjtyuaXYhMBBERAgAMBQJEoxsYBYMFJIMRAAoJEFYNCGHu
|
||||||
|
fcdO+LAAnAqf/B7oqHOeqWrey/Jifpn/oVmxAKDdpymiDkzlNeSd4oSiaXer1OOY
|
||||||
|
LohMBBERAgAMBQJEoxsoBYMFJIMBAAoJEMpynWJgPU9UfskAn0zuRV0QXyYtuSOl
|
||||||
|
71jAeLK2Sf8cAJ9r1ga14IHrXkYHa6YTw3kWsgW5LIhMBBERAgAMBQJEoxsoBYMF
|
||||||
|
JIMBAAoJEMpynWJgPU9U3esAn03W3IkpabUX28vxkvlc0Y16lROhAKCzlVBVhpal
|
||||||
|
QP/Ixh9kkZWj2IxvX4hMBBMRAgAMBQJEo6lpBYMFI/TAAAoJEN26ZLosMS0vHMkA
|
||||||
|
oPvFJNCbYhJM+7zVfJHQUoLNbooTAJ9CpCarVbAd+k9sKJAfWubY3H39sIhMBBMR
|
||||||
|
AgAMBQJEo6l3BYMFI/SyAAoJEFCOrsUwLaVoaRwAn1GmqjMzw86G87EV6U4MUrbc
|
||||||
|
4gSxAKCbidEQSa6fwK5OHjDCdI6KA36hVIiiBBMBAgAMBQJEo6lgBYMFI/TJAAoJ
|
||||||
|
EJrNPMCpn3XddOID/iCFsYvw6tBdy2KEgmv7tNkvhacFV5Y2+SRBCf/qeUqP4RI3
|
||||||
|
aPBLDWYosFOMmV0Bu9Fh+uaaCPKznlC7lRqOi9U7uczYBmA8gVCLUzzibTO5opnT
|
||||||
|
yghlyFeNJ8u0VTXwWy5sCq/IQ/RnMiRCrgSLo0MLVXEgNQUQJFnGXYvVHr2oiEYE
|
||||||
|
EBECAAYFAkSj9FQACgkQN/aP9QFa/Ir+7wCg5vL2nwkI3uHJXyCvMzDPaePYl2YA
|
||||||
|
oLNMjcOP0ygYizorw/RGG4P9gHUWiEYEEBECAAYFAkSj9FMACgkQN/aP9QFa/Ioa
|
||||||
|
OACg2da1ZjVw9igBxyWbIR78BqUc91cAoOWe4aXJVssNzpCms/xuE9PJSIcWiEwE
|
||||||
|
EBECAAwFAkSkSfgFgwUjVDEACgkQK36C50PvIR/hwgCffY6i2pYzB/9K/sUMD0rR
|
||||||
|
nHRYtdMAn3BhYnw39f5DaHkRoa6i1doMSFYBiEYEEBECAAYFAkSnzTIACgkQ1TNO
|
||||||
|
dbExPeIEgQCgriwxtmPtUCHN5WmKZVsjB18obIwAoI7tvpaavcRr9TPm+T2HQIQx
|
||||||
|
ZtL8iEYEEBECAAYFAkSpLdsACgkQMsnkzjZCy0uolACfexC77GulpZoOVArGuAAH
|
||||||
|
qYYhAxcAoJ9GB6lMMdm1Vi9XpUed201mqhKiiEYEEBECAAYFAkSpLdwACgkQMsnk
|
||||||
|
zjZCy0vLtACglR5VE/WdQzaNGuHuCndHRdcPQ/0An3Q+KXzu0OzI/OVmJYv3fB4/
|
||||||
|
Hx3kiEwEExECAAwFAkSmASYFgwUhnQMACgkQTAQoGDEaPeXDYgCgu3xcywqtkrRN
|
||||||
|
O0uq84OqpRdrUvIAnAr6E+2L4ammx0rqYfoW6xdipmm1iEwEExECAAwFAkSmASYF
|
||||||
|
gwUhnQMACgkQTAQoGDEaPeXQ4wCgntQvT7oMiKJtTkqdYfDXsaLHWCkAn3a7zXUZ
|
||||||
|
0EADsFCspxthTU/rr5zXiGAEExECACAFCQlmAYAFCwcKAwQDFQMCAxYCAQIXgAUC
|
||||||
|
RBBCGQIZAQAKCRD1wmAWTO7XX5UOAJsHKnihLRiVsvMt6Iwss6k9ZkqAmwCeMz7a
|
||||||
|
SaQp088fLrL6c/5cdEsM/haInAQQAQIABgUCRKkt6gAKCRA34/Rf7mXjIWs5A/9x
|
||||||
|
V456Fiy+QelbGJ79sHIPl5Kn8VEKMuWvR+dknShRg88XdrGshMFrX+t2enDxr2up
|
||||||
|
L3R8CA+eVDC/0yRj8SLbvn6nfEOJqS8eYKkggdDtWU5nbb4BZvBKAXlddAOsZSFD
|
||||||
|
/h6qw6Rl3ZiDTHOJKjq9Tip/Y9uHMpdxkKBNS1bqJ4icBBABAgAGBQJEqS3qAAoJ
|
||||||
|
EDfj9F/uZeMh6kIEAKcJsC2NRiLhFHYYxXUjS4rRo5oUnEdlrVXHPQfMnKoh8Had
|
||||||
|
bJTNiaYiPMsD2ULxokpa2Y6cnWFJtmbjK35tH9x1ag3RlPzwaLinaJkLx9fEUpY/
|
||||||
|
yBhoflWsKPkWXQGME9VM9bhP1H6/6dIcIicPf5ttjcZM14U/2uX32B55VsubiEYE
|
||||||
|
EBECAAYFAkSqrkMACgkQNYuqM1D5YRZsmQCdGo069cOlRvkafI/TMG84jikCFa4A
|
||||||
|
niA+zINDd5gxRONeCdtSOgLOWneLiEYEEBECAAYFAkSqrkcACgkQNYuqM1D5YRbh
|
||||||
|
lQCfbRcx+z7P2izbiGQysmBLvOmRwzUAnj2f+oPN0O/7pn5bCxA5o8CVhlXOiEYE
|
||||||
|
EBECAAYFAkSqz1EACgkQ+zfaQDMuY81WvgCeODRcXoX11MkuRcJMeYOfEM579cwA
|
||||||
|
n2q1Kdij3aTdL7uaaajbBbNxdSHziEYEEBECAAYFAkSqz1UACgkQ+zfaQDMuY81R
|
||||||
|
twCfYo8Bal9PZ98tQ0QeaE2Giq526REAn1uj3q5Rwfqa/yzrFRVwQY2s1xVsiEYE
|
||||||
|
EBECAAYFAkUPgjEACgkQsr68QBUpJK+5zACgoAz0aq1OrUoq/dnzhr7Z3XUanvAA
|
||||||
|
oJrqRNBuE+n38oXZTi1oJ+k6qDbsiEYEEBECAAYFAkY44mwACgkQFUWz/uIi3k9E
|
||||||
|
xACePdDgJJIIbFmHOlKsujJWTC/qrA4An0uHorCRVAz8+kKQZgIx5NqYTsZYiEYE
|
||||||
|
EBECAAYFAkY44nIACgkQFUWz/uIi3k+VgwCfV+TKT3qn1PBzfALIPO3DMNpeMFkA
|
||||||
|
njsnB4L1Tgl/LCRcYEH/fGkDW6JRiEYEEBECAAYFAkY451cACgkQY9CtrpESA+RU
|
||||||
|
tQCePtNKg8jbrN3ueYjStrawh3G5lDIAnAnQ/v9Ma/qv5wr9XMDqy1J0HmSfiEYE
|
||||||
|
EBECAAYFAkY451wACgkQY9CtrpESA+SZ5wCZAdCisYSpjSXFMlrhHDUeW7/BhCgA
|
||||||
|
njehPdZrqLC3DvP5gDpqdBPT3pS0iEYEEBECAAYFAkY8i3YACgkQmHDv8/EvYHIW
|
||||||
|
UwCfQ5tkH//KCbkhEisER50pqj7V8csAnRITaNKUPZ1Csz1k5OOGTr13XMu7iEYE
|
||||||
|
ExECAAYFAkY9sPQACgkQ4eHysJkO1KoEBACfWIcYHg2ATN2RHfro75oc3UUjGU8A
|
||||||
|
n108ccnwGPCSlBy/hMD//5FNUMpCiEYEExECAAYFAkY9sPsACgkQ4eHysJkO1KoT
|
||||||
|
8QCfZ5l7wGb20Q4PdNWr25QUjqNY96QAn1YFtSvDMGBzA8uSrAGRsH7kXYnviEYE
|
||||||
|
EBECAAYFAkY99HEACgkQoHLU0ENYxYSPdgCeL76rvCWZZS54TQdBEdmUjVTRSLQA
|
||||||
|
oIxh3bzlylWpbwcoX7cFvXWH7H0OiEYEEBECAAYFAkY99HMACgkQoHLU0ENYxYT6
|
||||||
|
CACghCf2yw0z6J6USu8xXzq3s3MWMXoAnjRC/B5ppx6GnYsNU9GrAjjkILqsiEYE
|
||||||
|
EBECAAYFAkY+A8sACgkQAqWmBQt+bPoJsACgmPtMDY9JvABXqYjEMnlLazMBTogA
|
||||||
|
n1m88kXhduhHJqbNcm4Gaq8DM1SsiEYEEBECAAYFAkY+A8sACgkQAqWmBQt+bPrE
|
||||||
|
SACfa1xOCw7mLohF9UT8LPrwfLiBoUcAoJ5wZPWEgX48CYqq1AgvCU/sno/AiEUE
|
||||||
|
EBECAAYFAkY+FS0ACgkQVCINLMh0FVzbrgCY5+GeUqT4ufXIankof/aNqjT8TwCg
|
||||||
|
p1zaTGVncBJvd6/yaS3TsJOZvGGIRgQTEQIABgUCRj2f4AAKCRAuuUaCiIF0Am4f
|
||||||
|
AJ9k91H3CWjgQ9j8XjtYwdNq7GTu2ACgn8RzvD/W4IkNT4k2JCRu5r91XtSIRgQQ
|
||||||
|
EQIABgUCRKMPBQAKCRDLrr45pGxMoSQWAKDK8wZo2G3iFJxRrOH1q3nwEvCDHACf
|
||||||
|
aAzo5R+2IgmPCVatc+oz3MOJwwiIRgQQEQIABgUCRkD13AAKCRAPRQomYhC/wEGp
|
||||||
|
AJwJxgOHfWqBfVC3/117/gy+g9cfPACeOKfE/+PmuynV5kR0haCpTvn5TzuIRgQQ
|
||||||
|
EQIABgUCRkD13AAKCRAPRQomYhC/wNT8AJ9y4UZELNPFUEJRQERSt+HbfkepdQCf
|
||||||
|
a2KpCEPB8kVuITZKKgRqxAYX/kmIRgQQEQIABgUCRkYRDAAKCRCiEVrhX2uLctY9
|
||||||
|
AKDeANt7NagJgruqa1cz8YME0BMA1gCdGLvk1XwCuMne/gbeToi5dgnn0vqIRgQQ
|
||||||
|
EQIABgUCRkxDQgAKCRAfISPDa9hyoKRjAJ40lhJAFUlyxUPnUQ+oqbWnAgRDfQCg
|
||||||
|
r6BWteTYZq3i1xFxVVRdve2XC9iIRgQQEQIABgUCRkxDQgAKCRAfISPDa9hyoNwb
|
||||||
|
AKCxtglkAhTnW+3afghJtxdbK5DlMQCeMMaOdog+9Gyw89SHPs8VmDcMC6GIRgQQ
|
||||||
|
EQIABgUCRlJtPwAKCRAywdbvDxQ7wVXYAJwKaBMWHyudixhwzwVRZ1SAqjsbFQCg
|
||||||
|
ojmYNiBEyrW2jSTKvLOlSMblONWIRgQQEQIABgUCRl7U3wAKCRCahtfM0arqYAfY
|
||||||
|
AJ9qbwWQ/egB1m0TtS4JVVaCJqWA0wCffz57nkKN3wDRn4y+ist2IT3PdL2IRgQQ
|
||||||
|
EQIABgUCRl7U3wAKCRCahtfM0arqYE0OAKCcCVPPi6ffL/SlJaVRYL6k3xhinACg
|
||||||
|
lATLwd4moxdfZMJABjncPlX4P9qIRgQQEQIABgUCRqVKAwAKCRA5vlGhCEyREz3H
|
||||||
|
AJ9baGnJRj0mieC8sYmq4+unof7IpgCgu5MZnxfaYtmDzx1BfYewBWBOpR+IRgQQ
|
||||||
|
EQIABgUCRq3LPwAKCRAzzWczr17EUlxdAKDN/qNLWgjJULD1Ta1kd0NaAnUDWQCg
|
||||||
|
kg3MgRU6Jq1kI696lPDY8+XAa92IRgQTEQIABgUCRj2f4AAKCRAuuUaCiIF0AszJ
|
||||||
|
AKCcq1NTjlb/n+icRDC+Z6WnOMPeRACgtui9vs9gvXvX3WU2SGpdDA9+HHiIXgQT
|
||||||
|
EQIAHgIbIwYLCQgHAwIDFQIDAxYCAQIeAQIXgAUCR2FtbQAKCRD1wmAWTO7XX/OD
|
||||||
|
AKCH/zXsE7c+UtRVfyODyzhPVLveUQCfYiRTqqBqhZwpa5Y9AZzjrRMitAGIcQQQ
|
||||||
|
EQIAMQUCRkjFYSocSGVubmluZyBTY2htaWVkZWhhdXNlbiA8aHBzQGludGVybWV0
|
||||||
|
YS5kZT4ACgkQMoZOQZyFIiubqgCfY3UZmh8/ColBH9DdR4T3Qu39V/QAnRCOrI77
|
||||||
|
IQqsgbEKfAGBdLL7oCMliF4EExECAB4CGyMGCwkIBwMCAxUCAwMWAgECHgECF4AF
|
||||||
|
AkaCzIUACgkQ9cJgFkzu11+kQgCfb/FwMf0C2WOU/feUvPG8x1mqDJkAn2e/lNVA
|
||||||
|
cx0c+iyuo59vBJ2zAbtQiEYEEhECAAYFAkf9LEIACgkQi5YpQ/wkPzw7tgCfRGsC
|
||||||
|
mNMw+gCkaUDYrxqx6d1OANUAnR7E/Xsc2+JF62iywvYihPdEUOn2iGsEExECACsF
|
||||||
|
Akf9JsskGmh0dHBzOi8vd3d3LmNhY2VydC5vcmcvY3BzLnBocCNwNS4yAAoJEH9Y
|
||||||
|
T55N2dHEWK8Amwd13GPgzLTemHnRgKlii7WtXkKBAJsEjWTUo6FK0x4Bq26YrEeX
|
||||||
|
q4Ea9ohGBBARAgAGBQJH/UV2AAoJEJA4TZo1x+lCZ2gAoK8UmpEcOcsdzAJdabmC
|
||||||
|
ZB4IqOAyAKDXFVEr6z/OE7H/WDExzjhdLWzatYhGBBARAgAGBQJH/UV2AAoJEJA4
|
||||||
|
TZo1x+lC/FEAnjnRZGUb3TX2/8ftnw1QMDaI9a4aAJ47x2txRxG+Rrg1/6sHHnh/
|
||||||
|
S8/FE4hGBBARAgAGBQJH/b37AAoJEHPdjBYBUwI1CicAoIPlbJieOEJtiiIfWQQK
|
||||||
|
1pn5LANbAJ4lx6roLH97OfeC6KVfnig+/qrMY4hGBBARAgAGBQJH/cTjAAoJEBg4
|
||||||
|
H9dLG+aYFKIAoK36f3IFWexZxjPX+nEOA0GyoxNLAJ0RZjb9uoe9fimc2bPk0mCO
|
||||||
|
xrLCp4hGBBARAgAGBQJH/k7HAAoJEP1viMYh0KcbcoAAoKdfqW/cunax5mMilN80
|
||||||
|
G+bui3r1AKDqB1of3b6GWWs2jUjhpigScC6pw4hGBBMRAgAGBQJH/guHAAoJEIEv
|
||||||
|
IIXC1Qv72GUAnixR0lV2RzkGjnZC+XrWYyNFDYuDAJoCs3tNU3+akeUrUH6xnTtY
|
||||||
|
4BYy8YicBBABAgAGBQJH/k1hAAoJEDGmPZbsFAuBaXoD/0iv8Kaa8nk4iCwAsfaF
|
||||||
|
2guJ56t0693QhS/pia7od3ZQUlBHFy+4qWl1vG5b1F3zYsgfGFD/arB0ysQ0XbW/
|
||||||
|
AOqnS0HqnJ6pT0TUMzT843TsEZhiYW86orkto3hyGC3RCadNaK3j1Z2K8N36vLcr
|
||||||
|
Z58TdVYP5igOVLUQpRZtzQRSuQENBEBhnK4QBACOVpcl99g4W11KapibEcdIDECd
|
||||||
|
bES1PslA/55i+YhM4klUtmI0I/r+yadYG+ZR25ZWTI0PRiDj8vy1xAXtke06D5fP
|
||||||
|
204z/2iMGz0rsLkiLK3fzmFvPI7XiNkMxrf8gk7iexGrRpe4AhjDyDp/fK5iQbfF
|
||||||
|
HyRvVG1IHgcFnEEXgwADBQP/QYwddg+eubB2hEY/6osvKmpNyEBBbFzslMxWkUsL
|
||||||
|
07o0DG2S5iIsHkQTt4xx872VhYQQ4odM6o1hJNnB7f43e/n4/WhEtPTyB71R7a8X
|
||||||
|
cVB/Oz/itIO9aFAiuBfKkdEYaR3quFzIh/YuH4LNz1QJ2behCm1zMwZNc1GoAdrZ
|
||||||
|
huSITgQYEQIABgUCR2FtmQASB2VHUEcAAQEJEPXCYBZM7tdfP7oAn23vRtAJ0vDI
|
||||||
|
niIXqfsRPnpsO62YAKCEyvgx95NgRj2n1WMrKw2RPO2WMw==
|
||||||
|
=j3Fb
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
|
||||||
|
pub 1024D/84B5A42E 2003-01-02
|
||||||
|
uid Rainer Klute <rainer.klute@gmx.de>
|
||||||
|
uid Rainer Klute <rainer.klute@arcor.de>
|
||||||
|
uid Rainer Klute <klute@apache.org>
|
||||||
|
uid Rainer Klute <klute@rainer-klute.de>
|
||||||
|
sub 1024g/F1090E28 2003-01-02
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.4.2 (GNU/Linux)
|
||||||
|
|
||||||
|
mQGiBD4T++ERBADHIT28sBr2bmkqNoZBj2jOaTG4GKS/4cMxI0Jr6kkuO2PYuOQc
|
||||||
|
PoK0X7D6u48SMJX01d2oMVoEAeysmvuwkux3bw5rtcHZqQFfRtFV20n37RN/tkKY
|
||||||
|
SvkHYB6ifhGfghcAvRFYXaIxolexdblUhJlGQc2ZTDLKqtTaQsc5axRvdwCg9DPw
|
||||||
|
Sr06VUMVWXerGfLJUzE8i+ED+wWgT7/0ypt0rhZTf5wgMWjyXJ5QelaeROiWoVqR
|
||||||
|
6GWZiN65kFDG1e8y+pEfvp1JUxz0f+RVhREomdfw001CuI19cRaN1mHbY0nMLEzf
|
||||||
|
PMJgpJ3by8A3n0/fpsW72LVXRdGL94bYbY6XcHWYZDcT02zb4yap2GneEHry/Jgp
|
||||||
|
sZS9A/93qOeNZD87uQKOXZi/a32VETr4aNQclsRhRUtzkUIJNklPxjwNbYLY2CdS
|
||||||
|
N5gO3rR7e/dgdvq6ivd/xkQXyqqIe+i+OFIoV5Ur8b3+WQha5mednLryh6UbTIk5
|
||||||
|
1hQUQDiKRtWA31rRlyKHMJBMZLPjpQOLqxxMpZNut/fNKTo7+rQkUmFpbmVyIEts
|
||||||
|
dXRlIDxyYWluZXIua2x1dGVAYXJjb3IuZGU+iF4EExECAB4FAkR8IpMCGyMGCwkI
|
||||||
|
BwMCAxUCAwMWAgECHgECF4AACgkQU0NGFYS1pC44cQCfTjPeJm8+4pDss9jrP86F
|
||||||
|
A4iE8BkAoLuEAaDOfQvBeT3u2QpMpVRT50wliEYEExECAAYFAkUHCvkACgkQY/UP
|
||||||
|
uSC5JsIYjgCgj2Y4MTf6IjxyJIentadTAxGSTRMAoJ1BvGa3LSy+rliiktyn+94w
|
||||||
|
MOcKiEYEEBECAAYFAkURkHUACgkQlM+NQ5LdW0tnewCggA77IG1Ns1ISxlCaorGv
|
||||||
|
+bgslV8AoLq9HtGgsiuxxdc0r8+3LRYhrf0utB9SYWluZXIgS2x1dGUgPGtsdXRl
|
||||||
|
QGFwYWNoZS5vcmc+iF4EExECAB4FAkL4/hgCGyMGCwkIBwMCAxUCAwMWAgECHgEC
|
||||||
|
F4AACgkQU0NGFYS1pC4cYQCcDTDDS7uRbXnvez+uZhGrEZlXUJwAoNX/GgTq1vZW
|
||||||
|
gxMWf2vPEO6IDhhUiEYEExECAAYFAkL9kd4ACgkQyFGoreGTVbonBACfepLmeRA1
|
||||||
|
jslInl1sCByn8/cO51IAnjCnyfMFY0kTLZWK9bi2kVJJCogbiEYEExECAAYFAkUH
|
||||||
|
CvkACgkQY/UPuSC5JsKw9wCg3ahE1gb0Jxf3NMcYYi9ww6TKMcAAn2Js4AoO/Ss7
|
||||||
|
8XOV+09ZaYvO2km4iEYEEBECAAYFAkURkHsACgkQlM+NQ5LdW0sE9gCgoabl0JSe
|
||||||
|
X3aXkkO9Ud6UOHaDWaYAn0ZQqf7t/fb5GMVmlDMnT8omAsQVtCJSYWluZXIgS2x1
|
||||||
|
dGUgPHJhaW5lci5rbHV0ZUBnbXguZGU+iGEEExECACECGyMGCwkIBwMCAxUCAwMW
|
||||||
|
AgECHgECF4AFAkV3u4gCGQEACgkQU0NGFYS1pC5xrgCfQjByS4KWDDSpZ19ueCjg
|
||||||
|
dQr1uUEAoL8U+/gRJtG6Doh615dcO0QslINfiEYEExECAAYFAkL9keUACgkQyFGo
|
||||||
|
reGTVbodnACfdsIKmkq80XuOT3i1keFCaRIlXzcAoL13+rjtfhm92Q1IKB3m9cih
|
||||||
|
DHN+iEYEExECAAYFAkUHCvkACgkQY/UPuSC5JsI5ZgCeJTPavF1zdAfMGlmvkKcs
|
||||||
|
ePjlVpoAoMlRD6SeOF9O7m/xfeSxiI9OoreQiEYEEBECAAYFAkURkHsACgkQlM+N
|
||||||
|
Q5LdW0saYQCffjiXMP8G10ds7N2HNStVb++PTx4AniuSrYMcn+jA9pKlWaBBBAn7
|
||||||
|
9mL5tCRSYWluZXIgS2x1dGUgPGtsdXRlQHJhaW5lci1rbHV0ZS5kZT6IVwQTEQIA
|
||||||
|
FwUCPhP74QULBwoDBAMVAwIDFgIBAheAAAoJEFNDRhWEtaQuju4An36nIBKzMpzA
|
||||||
|
rH2FQvFp2oWnhV6gAKCyVnUiRGz0VwsLkrEVxxgpqg8o/YhGBBMRAgAGBQJC/ZHl
|
||||||
|
AAoJEMhRqK3hk1W6dLEAoJyrrxDfMBbVLqo/os4wz/WOHmNSAKDEa6hOmBnfKk2X
|
||||||
|
5rA0F7ArAa8ggYhGBBARAgAGBQJC+Q75AAoJEO+sVzojurMr87YAoIZp9qeer38f
|
||||||
|
47KVVYFMAwO1TLkSAJ94LbmF8B98/ih2Z1BJaGBQtmBqBohGBBMRAgAGBQJFBwr5
|
||||||
|
AAoJEGP1D7kguSbCXRcAoLaeuDGAbIkPf/PZJv0Uxf9CJxA+AJ0TbAOoaPwk4HKo
|
||||||
|
rOw6+mgH+ekRWYhGBBARAgAGBQJFEZB7AAoJEJTPjUOS3VtL3ZcAnjCFahSecBBS
|
||||||
|
kFnk6bhnkRCRHNrhAKCbMAJqK4O00zdRyaqbbI5XAFDHYrkBDQQ+E/vjEAQAhzT8
|
||||||
|
TzjRECMxye0XlxeRn96HLlr9omOp4iagwDieoKePhKHU0OGaTYo/k0HISy32nTdS
|
||||||
|
ZyFg6inlz4UB6odhLp1vj5GtMXbpH5MAz7WyIWcfm2uXujRpZzg7cb6NHSPYDamf
|
||||||
|
09QxybFXcc19UBLkawrJDPszwY5kgB5A70CVOZsAAwUD/R41zgJToLPexypUNz01
|
||||||
|
97/2Do1dQuySyuyUCmriv9O6sa2Vi3XIbwZImnHIqvIwu5Q/lEVBrZk4X6BRu+hq
|
||||||
|
Flm6R0z9n4WtMyFlSxUJan11xPy5rFHxu2Zpk8ciwSLrT5Dl1EqNwLvBFgZZ/L+r
|
||||||
|
/PLM0if+zVI5dbZQdmzsFpaxiEYEGBECAAYFAj4T++MACgkQU0NGFYS1pC5ExACe
|
||||||
|
PsnsMnIHlxboIe4iFG7JOxG7GwUAniGlU9WWfXiPl2deXWnB9kY35Bu5
|
||||||
|
=JOCc
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
pub 1024D/F5BB52CD 2007-06-18 [expires: 2012-06-16]
|
||||||
|
uid Yegor Kozlov <yegor.kozlov@gmail.com>
|
||||||
|
uid Yegor Kozlov <yegor@dinom.ru>
|
||||||
|
uid Yegor Kozlov <yegor@apache.org>
|
||||||
|
sub 4096g/7B45A98A 2007-06-18 [expires: 2012-06-16]
|
||||||
|
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.4.5 (Cygwin)
|
||||||
|
|
||||||
|
mQGiBEZ2p+oRBACNjPpUsJ6ZXK72LZCEnd+eWLBtsAbf9Gm7+NSxvxCZCdIcJZIR
|
||||||
|
OVji/IHKa9BfsI3F3nZ2381k0Ri2qK6ZDVRZFLCFxmUjwC/oVReDNiOFVHVNZkR8
|
||||||
|
GBhc0QLxIQ/Gq6UUOu7hj6IAcaGS+oFKP5fPuSZi7qvVd7I1UXaqqJP8ewCgokfw
|
||||||
|
xMgkbnchyx8qqfWQyQ8SSIMD/32VLN5n0juPyrQ9X1N1Vw6qka4avF/9HG3EN9pc
|
||||||
|
MQi4uA90RnQPJ4LJ1cg5a0nsUcctqi+kHsa58/Fd555ZTf8sWGVhsdHeBv2YcwpM
|
||||||
|
kqw96Wka2C1CUrsGNsAVYmTvCWyAgPJWv+Ytsn2idzIWLhyqgAVqr7bqEjiv+tr6
|
||||||
|
aTyKA/40RzPaZNmCfWrEZUMcN02P99sm5pP0M+1w59Uvj4HssjCfM4yffp7CNMhO
|
||||||
|
1UuXdoZMAvv2G1L8OcwPoxBqN1reo1VgjAf5LZalas8EzyOZpWWerkzpeCld9V62
|
||||||
|
WwpTEDgcVq14jjtYFYmrtlb/WJVCqoj/oq16BbeAleNBVL6hLLQdWWVnb3IgS296
|
||||||
|
bG92IDx5ZWdvckBkaW5vbS5ydT6IZgQTEQIAJgUCRqHo5gIbAwUJCWYBgAYLCQgH
|
||||||
|
AwIEFQIIAwQWAgMBAh4BAheAAAoJEGk0CgL1u1LNi0cAnjlwrBi04S1AsOCBvlt8
|
||||||
|
0y7WAHw4AJ9QCh+nf4ZFw8PsYwkgF9t3Mz7ukohGBBARAgAGBQJHO8fuAAoJEFuW
|
||||||
|
gBDgT5qJy/MAn0ua7QAu+Pby+haQvmFAXyySEHiYAKCGDHu4I8Rd4vs5iSXYZwuG
|
||||||
|
0n9tG4hGBBARAgAGBQJHPQeNAAoJEAC+ZrSHgCJukKwAn2FDXX6q7Ot5pKOf5SJa
|
||||||
|
4mcslIBBAKCE3lvgkNGpwdcDw2buDHx/gDkk64hGBBARAgAGBQJHPRXwAAoJECzW
|
||||||
|
qAMgRtD1u6cAnRmqNtY4hKCgaBGLqfV/B2sj6PcOAKCKRULmm3oScWnskoK4oOUw
|
||||||
|
oJYLA4hGBBARAgAGBQJHPSjoAAoJEBGI6Nw6uFmLCqkAoIKIdQoiE2cNeKRWP+Rh
|
||||||
|
ZIBsSXejAJwPSpgpyYuTFKNTksxBpVZEsq9KyIhGBBARAgAGBQJHP2FzAAoJEDk1
|
||||||
|
+i5v0F5J4RQAn3bZUYX8/dmeven6sAoquN/eunipAJ0eap0C8URE0C2hM46EL5Ve
|
||||||
|
Vj3C3ohGBBARAgAGBQJHQISmAAoJENbd8DHrUfu6v2kAn3fCbONV7WDjErIgzEm0
|
||||||
|
Rnno4WsBAJ48DC3YiIVd8/PP4hGINDT7SMG+MYhxBBARAgAxBQJHPNClKhxIZW5u
|
||||||
|
aW5nIFNjaG1pZWRlaGF1c2VuIDxocHNAaW50ZXJtZXRhLmRlPgAKCRAyhk5BnIUi
|
||||||
|
Kw1vAJ0Sxd4DbukKcs9NFmnKLYen3MADVwCfSZMv1Bf1SjammtoROsLDdd632wiJ
|
||||||
|
ARwEEAECAAYFAkc8ut8ACgkQGWWFUMMRBhH9dwgAoGzDlL8zFdC1q/S/HS+fkya1
|
||||||
|
s7pBs59btEJIktaYr0fcRNPnED3UmsGfRZEqGFxpu3y7Ns/ATT+EO7092bE6bp8h
|
||||||
|
J82PRkbvfOdEbLWOrDfFaKwMloYsibvSVHvcxHS+QxmwptrnQGo1dgLINIUdtdQp
|
||||||
|
AH/ZpMOOmDeCr0vj/6AFLHlOWztLvTa5yh6dFkxn57TIc4JdkzIRIoo2VlhjjjJ8
|
||||||
|
3chWj73tr7iAd6dJkJnUunhtTtpX/n1Z8ISNbZ2YtxTIa+k1de329a+8mvZHVjqS
|
||||||
|
+bP1I+xOe/nVI4saKwl+NUA4t9XDzCzRorMt3hqhSSkuMskjGEg1Omn6QtnDWrQf
|
||||||
|
WWVnb3IgS296bG92IDx5ZWdvckBhcGFjaGUub3JnPohlBBMRAgAmBQJGdqfqAhsD
|
||||||
|
BQkJZgGABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQaTQKAvW7Us2yGwCfaNfL
|
||||||
|
l1jKr0/JgaVAk6qCaaX+5AMAmNBD6VHDE7EiulCNZm2oZB71M4aIRQQQEQIABgUC
|
||||||
|
RzvH7gAKCRBbloAQ4E+aiX5BAJwORwD7KB4ifKRpsm3c482MsFNkowCVEtFSOLD5
|
||||||
|
+f4R9t0QXJbrdN9cHohGBBARAgAGBQJHPQeNAAoJEAC+ZrSHgCJuqMkAniwpCGlm
|
||||||
|
S60/zxC2oVZZGs2cNK98AKCnfV6THbOq3NjdOrrIo/6/bG4TCohGBBARAgAGBQJH
|
||||||
|
PRXwAAoJECzWqAMgRtD1ugIAoKRUaOV2MLBXRhb52AT7IKAv7byHAKCfTU7ner/o
|
||||||
|
yQJ+z2cK1hWBtbxUk4hGBBARAgAGBQJHPSjoAAoJEBGI6Nw6uFmL664AoKrDLjcq
|
||||||
|
kCfELiNTTIhsaek1M3yyAJ9xD5jRKW9zGpQIjIH4s9mid9GX74hGBBARAgAGBQJH
|
||||||
|
P2FzAAoJEDk1+i5v0F5JomAAn2xPtH7HdCE2axiUoAa1fdzYA6vtAJ9KaJwsSnCf
|
||||||
|
9/3Y2s3AABWqcdToOohGBBARAgAGBQJHQISmAAoJENbd8DHrUfu6cvwAoKUTeXxT
|
||||||
|
pWEdW926csuFX+jzNgULAJ0el3P9Z12xC3zbdXvS0R6J3BDkdYhxBBARAgAxBQJH
|
||||||
|
PNClKhxIZW5uaW5nIFNjaG1pZWRlaGF1c2VuIDxocHNAaW50ZXJtZXRhLmRlPgAK
|
||||||
|
CRAyhk5BnIUiKw1vAJ0Sxd4DbukKcs9NFmnKLYen3MADVwCfSZMv1Bf1SjammtoR
|
||||||
|
OsLDdd632wiJARwEEAECAAYFAkc8ut8ACgkQGWWFUMMRBhHktggAjtp76nlIMXpr
|
||||||
|
Jt04QpvMyI8J79ukY7hBN8er6UIZy2Q4i9y/AgUWF6qb3ssSoWPOABIZolhIupTC
|
||||||
|
1CXTMVtiHYfFxpOIr1dStUvhxMGf6/lp7cjjNheKkoc4QzUHfKIWs5vAvN7qUA3d
|
||||||
|
sq2L2JcFoasP8floWTXNpTReE2kEWkNhx0yyZWOG6YvmcIYDhB3eOO+ei0yPosTQ
|
||||||
|
0VObrHhAH58eo/ONpqNGrauOtN8HEFq06lvozJl/T5zHE79wGayVrL7Rv3bVwnpS
|
||||||
|
y5caTNHOAiD1VrayZzpuAMOz82E6MkbQ2YpVnX5lMTkaOXIuSc3U8cu3BHYDVpnP
|
||||||
|
3K6sNRAIM7QlWWVnb3IgS296bG92IDx5ZWdvci5rb3psb3ZAZ21haWwuY29tPohm
|
||||||
|
BBMRAgAmBQJHHOl/AhsDBQkJZgGABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ
|
||||||
|
aTQKAvW7Us0VFQCbBhpBk7/cGrFN79SkgpyqBg6ttcEAnRHxRQ7COT4c9m1GBWir
|
||||||
|
DuaMBPpBiEYEEBECAAYFAkc7x+kACgkQW5aAEOBPmok4+wCggbJpCeaTzQ8cORgx
|
||||||
|
3nvaF52hrmoAn2WJluH7qjuvJ68yt9kaLuPm/wa2iEYEEBECAAYFAkc81RkACgkQ
|
||||||
|
r9WcwWXV45qWYACeN1qluJ4cGMN+1vLRSMjmWCGzFKYAnRO/7iuMiM/3CJPQ85mE
|
||||||
|
dlNZJ6MiiEYEEBECAAYFAkc9B40ACgkQAL5mtIeAIm677gCgnFp8wUVuMss0cgb8
|
||||||
|
6rttjL5vbHMAn1kEGh+sANT9Kd+mofcGpryQPyFCiEYEEBECAAYFAkc9Cx8ACgkQ
|
||||||
|
wT0w2KecbhhHPgCgtQXQrZ7Tbq3wcDTQWnVIZSIluPkAnAvzwLC4JL7y/5QyhoUo
|
||||||
|
GCT31XYviEYEEBECAAYFAkc9FfAACgkQLNaoAyBG0PX0bwCfWGjRnBwSDVTaJzCj
|
||||||
|
BcVXA3KOKdgAnjeg2zn/QpGP8akqrIYYg727GBQUiEYEEBECAAYFAkc/YXMACgkQ
|
||||||
|
OTX6Lm/QXkmLoQCdHkNDnW3yQCSEm/7AZsq5KAKp5GwAniCHiB/ZXHDpWJw9dlKh
|
||||||
|
Uxoh0o1oiEYEEBECAAYFAkdAhJwACgkQ1t3wMetR+7qRCACcDpGP2wZcL2DPIDR5
|
||||||
|
LZbEpJZBTz0AnAjTjRjWOtXgsHtyeY7UP2m6ybGNiHEEEBECADEFAkc80KUqHEhl
|
||||||
|
bm5pbmcgU2NobWllZGVoYXVzZW4gPGhwc0BpbnRlcm1ldGEuZGU+AAoJEDKGTkGc
|
||||||
|
hSIrDW8AnRLF3gNu6Qpyz00Wacoth6fcwANXAJ9Jky/UF/VKNqaa2hE6wsN13rfb
|
||||||
|
CIkBHAQQAQIABgUCRzy63wAKCRAZZYVQwxEGEXrwCACrKhlffitTUkp+mk7XCdZP
|
||||||
|
MBeiGbhd/Xj0V5L/MdhErUE1XI2Pk9JAS8h/I6CjmfAzS71I2eLxUzb7yYb9vn+5
|
||||||
|
ZRTXreQoqYMmPxENbkgi+1C6L1WxPgCxI4uZHY3WmAZDyES5rKNaAYT+zAgiH0b/
|
||||||
|
5PUToybBZsKRUo5lADiS6pGOJBXNBaboQQot5uV3ZDq84A4/okRa/+wt4gxzhUR6
|
||||||
|
E0b5SiUzTkZyfBGV1N7QyLC0Ws35UyPo57D7JJYuhkwL3Wal/kUdLcOuul5Eq2EZ
|
||||||
|
6m4FwngOvtMaXvJ8A8FyI0T1ttW6n9D9vBRbLINsTI7RrD4Nv7Sdah51Vxxshljp
|
||||||
|
uQQNBEZ2qJYQEAColB8p5fyUwbsCLeaX6uSDxG2ShSXxtsKlb77PfNYz//9V0zyr
|
||||||
|
ybOLRfZ5DEiFcdyuFUAp8swXQm0+62bWws6dpcs1dYkOxYt9JIchxIyLuK3z5Qob
|
||||||
|
sm9F0eBdBoVch73bzmVHF5lGh0u/9YegTqakSor8jkr0Je65tqxBL/jTBGSTT7T+
|
||||||
|
7OSnMqoT9AP9XDiELqqBhuwK2W/BLxLIhmhmpD6E1qIwUNzogADMrvLi6N8ol+6M
|
||||||
|
/8OQYp5ZQpimlkl8i2tATD52bpy/37RR4hhTNKTpU4J/MeEEggsmmpQdfW1Gl/8u
|
||||||
|
0QoW3p6kpSEwDaPbwjwhMjVD8FOCSfc4GI9vFq307QosudNVmoElZ0OluKiv+oHf
|
||||||
|
YM7FdAKpwOA1K4By2nP8Sd49lzRtCyghN1nNErsxuMncZ7cDX+YT4qfhfd998GO+
|
||||||
|
teZQ98iM8tLpCozsh2JifA6HUSWCi2L6iiq6+Pz5z/D4l/eA+PES9cirUX3bpZ0r
|
||||||
|
McOxTdqYcizlYgjOYT9gUJowEXwrN79by2teQTqgkdmXFEyglm9KWX09JR7F6sEq
|
||||||
|
8UzbHpBJaxA3PUx+sP2qFu3ACsltcnvY/KSUImE/YLYxR0wFspftC6UeqqRgByTZ
|
||||||
|
UxHHS/uO/DV5Oxu8aaNtxUREbxuDJozgHbYd6B4dXCtOzUM1/onjDtFObwADBQ/7
|
||||||
|
BUDDXIh8RRFDguozqFR29VAlncXNp1fWW48jPa7baj/FJayKt4J3CkgjYoQ/ddo6
|
||||||
|
qccRzpTs/ws0vGPNDGFa5GQN5/0GqWmd46e9vJ/HJQLuc49HQ0ooMGkg0uKMu3BK
|
||||||
|
No4PJ4mUwKD8uQEh4pXicblJpEOYAeUPQhiNkrdFhHrwXMFiMiasmYVeIGZZ2NEN
|
||||||
|
fJ1sq8f/0DMryMHpjs5kav6UCC3I1lkMOxFdvWPe6UoAOZy0PESdyqXOn39j+BFR
|
||||||
|
reRDQhLWO7QECaDH6zj/0f4zy/yaCBPcdm5ynisi91JV8wNmxAMq9cj16h3YXRlD
|
||||||
|
MvWDBAqv0b7M1ev43aOmdSwfpxBolLEv+WxNigV768g/m/7RijVH9kjai5zI892M
|
||||||
|
3DcEngLbaVGGBOMTLFtQn3aJAjIie6fUVT+fILbzX6j7AquadatTZHHTzT3GnlU+
|
||||||
|
TYgxdTrvcHJQiB3sTxBVeJ21hzd2kqiBuUjkB59NYx30zbKx60wAK6ZLnKPSDrVa
|
||||||
|
844s+LXKj5elnEQOFj5BV1Y10Fg8bam2Lcx4EDyk2k3QzuuMqsFfNgJGIc5HiWww
|
||||||
|
5jHw4eiNtxOowWNY0D8ZxnH/uiI/7++rWqwb0RNGauvteHtB1LWcWU16QWKefX2f
|
||||||
|
t65pXzVXr2QGWeVHUUd8wEL+r9PuSL9rSjXlKBfuis2ITwQYEQIADwUCRnaolgIb
|
||||||
|
DAUJCWYBgAAKCRBpNAoC9btSzaQmAJ4gQB2coJag9C7EYwFCL8Z2/XMf8gCeK8Dx
|
||||||
|
R2ReFOW7MOpNd043+bcVn90=
|
||||||
|
=d7us
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
24
README.md
24
README.md
@ -1,24 +0,0 @@
|
|||||||
POI Fast Calc
|
|
||||||
======================
|
|
||||||
|
|
||||||
[![Build Status](https://ci.moparisthe.best/job/moparisthebest/job/poi/job/master/badge/icon%3Fstyle=plastic)](https://ci.moparisthe.best/job/moparisthebest/job/poi/job/master/)
|
|
||||||
|
|
||||||
A Java library to calculate Excel formulas quickly.
|
|
||||||
|
|
||||||
This is a fork of [Apache POI](https://poi.apache.org/) version [3.16](https://github.com/apache/poi/tree/REL_3_16_FINAL)
|
|
||||||
that serves simply to calculate formulas quickly, it supports XLSX (Excel 2007) row/column limits in the HSSF engine for
|
|
||||||
much faster evaluation than XML-backed XSSF is capable of, with the drawback that it can't read or write XLS/XLSX files
|
|
||||||
from or to disk. Read the [email thread](https://lists.apache.org/thread.html/0bc90a3ed386edddfcb9b93ce6c262ad145a6b0433d0fcfe70ef10a2@%3Cdev.poi.apache.org%3E)
|
|
||||||
with my original proposed patch to upstream poi for background.
|
|
||||||
|
|
||||||
To use, add this to your maven pom.xml:
|
|
||||||
```xml
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.moparisthebest.poi</groupId>
|
|
||||||
<artifactId>poi-fast-calc</artifactId>
|
|
||||||
<version>3.16-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
```
|
|
||||||
|
|
||||||
The `org.apache.poi` package has been renamed `com.moparisthebest.poi` and all dependencies removed,
|
|
||||||
so this can cleanly live aside modern/newer upstream poi forever, and shouldn't ever need to change.
|
|
143
changelog.xsl
Normal file
143
changelog.xsl
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<xsl:stylesheet
|
||||||
|
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
|
||||||
|
version='1.0'>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
-->
|
||||||
|
<xsl:param name="title"/>
|
||||||
|
<xsl:param name="module"/>
|
||||||
|
<xsl:param name="cvsweb"/>
|
||||||
|
|
||||||
|
<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
|
||||||
|
|
||||||
|
<!-- Copy standard document elements. Elements that
|
||||||
|
should be ignored must be filtered by apply-templates
|
||||||
|
tags. -->
|
||||||
|
<xsl:template match="*">
|
||||||
|
<xsl:copy>
|
||||||
|
<xsl:copy-of select="attribute::*[. != '']"/>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</xsl:copy>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="changelog">
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
<TITLE><xsl:value-of select="$title"/></TITLE>
|
||||||
|
</HEAD>
|
||||||
|
<BODY link="#000000" alink="#000000" vlink="#000000" text="#000000">
|
||||||
|
<style type="text/css">
|
||||||
|
body, p {
|
||||||
|
font-family: verdana,arial,helvetica;
|
||||||
|
font-size: 100%;
|
||||||
|
color:#000000;
|
||||||
|
}
|
||||||
|
.dateAndAuthor {
|
||||||
|
font-family: verdana,arial,helvetica;
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align:left;
|
||||||
|
background:#a6caf0;
|
||||||
|
}
|
||||||
|
tr, td{
|
||||||
|
font-family: verdana,arial,helvetica;
|
||||||
|
font-size: 120%;
|
||||||
|
background:#eeeee0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<h1>
|
||||||
|
<a name="top"><xsl:value-of select="$title"/></a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<hr size="2"/>
|
||||||
|
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1">
|
||||||
|
|
||||||
|
<xsl:apply-templates select=".//entry">
|
||||||
|
<xsl:sort select="date" data-type="text" order="descending"/>
|
||||||
|
<xsl:sort select="time" data-type="text" order="descending"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="entry">
|
||||||
|
<TR>
|
||||||
|
<TD colspan="2" class="dateAndAuthor">
|
||||||
|
<xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD width="20">
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
</TD>
|
||||||
|
<TD>
|
||||||
|
<pre>
|
||||||
|
<xsl:apply-templates select="msg"/></pre>
|
||||||
|
<ul>
|
||||||
|
<xsl:apply-templates select="file"/>
|
||||||
|
</ul>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="date">
|
||||||
|
<i><xsl:value-of select="."/></i>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="time">
|
||||||
|
<i><xsl:value-of select="."/></i>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="author">
|
||||||
|
<i>
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</a>
|
||||||
|
</i>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="file">
|
||||||
|
<li>
|
||||||
|
<a>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="string-length(prevrevision) = 0 ">
|
||||||
|
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
<xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Any elements within a msg are processed,
|
||||||
|
so that we can preserve HTML tags. -->
|
||||||
|
<xsl:template match="msg">
|
||||||
|
<b><xsl:apply-templates/></b>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
||||||
|
|
34
doap_POI.rdf
Normal file
34
doap_POI.rdf
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<?xml-stylesheet type="text/xsl"?>
|
||||||
|
<rdf:RDF xml:lang="en"
|
||||||
|
xmlns="http://usefulinc.com/ns/doap#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:asfext="http:projects.apache.org/ns/asfext#">
|
||||||
|
<Project rdf:about="http://httpd.apache.org/">
|
||||||
|
<created>2006-01-26</created>
|
||||||
|
<license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
|
||||||
|
<name>Apache Jakarta POI</name>
|
||||||
|
<homepage rdf:resource="http://jakarta.apache.org/poi/" />
|
||||||
|
<asfext:pmc rdf:resource="http://jakarta.apache.org" />
|
||||||
|
<shortdesc>Java API To Access Microsoft Format Files</shortdesc>
|
||||||
|
<description>APIs for manipulating various file formats based upon Microsoft's OLE 2 Compound Document format using pure Java. POI is your Java Excel solution as well as your Java Word solution. However, we have a complete API for porting other OLE 2 Compound Document formats and welcome others to participate.</description>
|
||||||
|
<bug-database rdf:resource="http://issues.apache.org/bugzilla/buglist.cgi?product=POI" />
|
||||||
|
<mailing-list rdf:resource="http://jakarta.apache.org/site/mail2.html#POI" />
|
||||||
|
<download-page rdf:resource="http://www.apache.org/dyn/closer.cgi/jakarta/poi/" />
|
||||||
|
<programming-language>Java</programming-language>
|
||||||
|
<category rdf:resource="http://projects.apache.org/category/library" />
|
||||||
|
<release>
|
||||||
|
<Version>
|
||||||
|
<name>poi-bin</name>
|
||||||
|
<created>2004-08-04</created>
|
||||||
|
<revision>2.5.1-final-20040804</revision>
|
||||||
|
</Version>
|
||||||
|
</release>
|
||||||
|
<repository>
|
||||||
|
<SVNRepository>
|
||||||
|
<location rdf:resource="http://svn.apache.org/repos/asf/jakarta/poi"/>
|
||||||
|
<browse rdf:resource="http://svn.apache.org/viewvc/jakarta/poi/"/>
|
||||||
|
</SVNRepository>
|
||||||
|
</repository>
|
||||||
|
</Project>
|
||||||
|
</rdf:RDF>
|
96
forrest.properties
Normal file
96
forrest.properties
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
##############
|
||||||
|
# Properties used by forrest.build.xml for building the website
|
||||||
|
##############
|
||||||
|
|
||||||
|
# Prints out a summary of Forrest settings for this project
|
||||||
|
#forrest.echo=true
|
||||||
|
|
||||||
|
# Project name (used to name .war file)
|
||||||
|
#project.name=my-project
|
||||||
|
|
||||||
|
# Specifies name of Forrest skin to use
|
||||||
|
#project.skin=forrest-site
|
||||||
|
#project.skin=avalon-tigris
|
||||||
|
#project.skin=krysalis-site
|
||||||
|
project.skin=poi-site
|
||||||
|
|
||||||
|
##############
|
||||||
|
# layout properties
|
||||||
|
|
||||||
|
# Properties that must be set to override the default locations
|
||||||
|
#
|
||||||
|
# Parent properties must be set. This usually means uncommenting
|
||||||
|
# project.content-dir if any other property using it is uncommented
|
||||||
|
|
||||||
|
#project.status=status.xml
|
||||||
|
#project.content-dir=src/documentation
|
||||||
|
#project.conf-dir=${project.content-dir}/conf
|
||||||
|
#project.sitemap=${project.content-dir}/sitemap.xmap
|
||||||
|
#project.xdocs-dir=${project.content-dir}/content/xdocs
|
||||||
|
#project.stylesheets-dir=${project.content-dir}/resources/stylesheets
|
||||||
|
#project.images-dir=${project.content-dir}/resources/images
|
||||||
|
#project.schema-dir=${project.content-dir}/resources/schema
|
||||||
|
#project.skins-dir=${project.content-dir}/skins
|
||||||
|
#project.skinconf=${project.content-dir}/skinconf.xml
|
||||||
|
#project.lib-dir=${project.content-dir}/lib
|
||||||
|
#project.classes-dir=${project.content-dir}/classes
|
||||||
|
|
||||||
|
|
||||||
|
##############
|
||||||
|
# Cocoon catalog entity resolver properties
|
||||||
|
|
||||||
|
# A local catalog to supplement the default Forrest catalog
|
||||||
|
#project.catalog=${project.schema-dir}/catalog
|
||||||
|
|
||||||
|
# The verbosity level for the entity resolver (1..10)
|
||||||
|
#forrest.catalog.verbosity=1
|
||||||
|
|
||||||
|
|
||||||
|
##############
|
||||||
|
# validation properties
|
||||||
|
|
||||||
|
# These props determine if validation is performed at all
|
||||||
|
# Values are inherited unless overridden.
|
||||||
|
# Eg, if forrest.validate=false, then all others are false unless set to true.
|
||||||
|
#forrest.validate=true
|
||||||
|
#forrest.validate.xdocs=${forrest.validate}
|
||||||
|
#forrest.validate.skinconf=${forrest.validate}
|
||||||
|
#forrest.validate.sitemap=${forrest.validate}
|
||||||
|
#forrest.validate.stylesheets=${forrest.validate}
|
||||||
|
#forrest.validate.skins=${forrest.validate}
|
||||||
|
#forrest.validate.skins.stylesheets=${forrest.validate.skins}
|
||||||
|
|
||||||
|
|
||||||
|
# Key:
|
||||||
|
# *.failonerror=(true|false) stop when an XML file is invalid
|
||||||
|
# *.includes=(pattern) Comma-separated list of path patterns to validate
|
||||||
|
# *.excludes=(pattern) Comma-separated list of path patterns to not validate
|
||||||
|
|
||||||
|
#forrest.validate.failonerror=true
|
||||||
|
#forrest.validate.includes=**/*
|
||||||
|
#forrest.validate.excludes=
|
||||||
|
#
|
||||||
|
#forrest.validate.xdocs.failonerror=${forrest.validate.failonerror}
|
||||||
|
#
|
||||||
|
#forrest.validate.xdocs.includes=**/*.x*
|
||||||
|
#forrest.validate.xdocs.excludes=site.xml
|
||||||
|
#
|
||||||
|
#forrest.validate.skinconf.includes=${skinconf-file}
|
||||||
|
#forrest.validate.skinconf.excludes=
|
||||||
|
#forrest.validate.skinconf.failonerror=${forrest.validate.failonerror}
|
||||||
|
#
|
||||||
|
#forrest.validate.sitemap.includes=${sitemap-file}
|
||||||
|
#forrest.validate.sitemap.excludes=
|
||||||
|
#forrest.validate.sitemap.failonerror=${forrest.validate.failonerror}
|
||||||
|
#
|
||||||
|
#forrest.validate.stylesheets.includes=**/*.xsl
|
||||||
|
#forrest.validate.stylesheets.excludes=
|
||||||
|
#forrest.validate.stylesheets.failonerror=${forrest.validate.failonerror}
|
||||||
|
#
|
||||||
|
#forrest.validate.skins.includes=**/*
|
||||||
|
#forrest.validate.skins.excludes=**/*.xsl
|
||||||
|
#forrest.validate.skins.failonerror=${forrest.validate.failonerror}
|
||||||
|
#
|
||||||
|
#forrest.validate.skins.stylesheets.includes=**/*.xsl
|
||||||
|
#forrest.validate.skins.stylesheets.excludes=
|
||||||
|
#forrest.validate.skins.stylesheets.failonerror=${forrest.validate.skins.failonerror}
|
278
jdepend.xsl
Normal file
278
jdepend.xsl
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xsl:output method="html" indent="yes"/>
|
||||||
|
|
||||||
|
<xsl:template match="JDepend">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>JDepend Analysis</title>
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
font:normal 68% verdana,arial,helvetica;
|
||||||
|
color:#000000;
|
||||||
|
}
|
||||||
|
table tr td, tr th {
|
||||||
|
font-size: 68%;
|
||||||
|
}
|
||||||
|
table.details tr th{
|
||||||
|
font-weight: bold;
|
||||||
|
text-align:left;
|
||||||
|
background:#a6caf0;
|
||||||
|
}
|
||||||
|
table.details tr td{
|
||||||
|
background:#eeeee0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
line-height:1.5em;
|
||||||
|
margin-top:0.5em; margin-bottom:1.0em;
|
||||||
|
margin-left:2em;
|
||||||
|
margin-right:2em;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
|
||||||
|
}
|
||||||
|
.Error {
|
||||||
|
font-weight:bold; color:red;
|
||||||
|
}
|
||||||
|
.Failure {
|
||||||
|
font-weight:bold; color:purple;
|
||||||
|
}
|
||||||
|
.Properties {
|
||||||
|
text-align:right;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!--h1>JDepend Report</h1>
|
||||||
|
<ul>
|
||||||
|
<xsl:for-each select="./Packages/Package">
|
||||||
|
<xsl:sort select="@name"/>
|
||||||
|
<li><xsl:value-of select="@name"/></li>
|
||||||
|
</xsl:for-each>
|
||||||
|
</ul-->
|
||||||
|
|
||||||
|
<h1><a name="top">JDepend Analysis</a></h1>
|
||||||
|
<p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
|
||||||
|
<hr size="2" />
|
||||||
|
|
||||||
|
<table width="100%"><tr><td>
|
||||||
|
<a name="NVsummary"><h2>Summary</h2></a>
|
||||||
|
</td><td align="right">
|
||||||
|
[<a href="#NVsummary">summary</a>]
|
||||||
|
[<a href="#NVpackages">packages</a>]
|
||||||
|
[<a href="#NVcycles">cycles</a>]
|
||||||
|
[<a href="#NVexplanations">explanations</a>]
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<table width="100%" class="details">
|
||||||
|
<tr>
|
||||||
|
<th>Package</th>
|
||||||
|
<th>Total Classes</th>
|
||||||
|
<th><a href="#EXnumber">Abstract Classes</a></th>
|
||||||
|
<th><a href="#EXnumber">Concrete Classes</a></th>
|
||||||
|
<th><a href="#EXafferent">Afferent Couplings</a></th>
|
||||||
|
<th><a href="#EXefferent">Efferent Couplings</a></th>
|
||||||
|
<th><a href="#EXabstractness">Abstractness</a></th>
|
||||||
|
<th><a href="#EXinstability">Instability</a></th>
|
||||||
|
<th><a href="#EXdistance">Distance</a></th>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<xsl:for-each select="./Packages/Package">
|
||||||
|
<xsl:if test="count(error) = 0">
|
||||||
|
<tr>
|
||||||
|
<td align="left">
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/Ca"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/Ce"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/A"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/I"/></td>
|
||||||
|
<td align="right"><xsl:value-of select="Stats/D"/></td>
|
||||||
|
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:for-each>
|
||||||
|
<xsl:for-each select="./Packages/Package">
|
||||||
|
<xsl:if test="count(error) > 0">
|
||||||
|
<tr>
|
||||||
|
<td align="left">
|
||||||
|
<xsl:value-of select="@name"/>
|
||||||
|
</td>
|
||||||
|
<td align="left" colspan="8"><xsl:value-of select="error"/></td>
|
||||||
|
</tr>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:for-each>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table width="100%"><tr><td>
|
||||||
|
<a name="NVpackages"><h2>Packages</h2></a>
|
||||||
|
</td><td align="right">
|
||||||
|
[<a href="#NVsummary">summary</a>]
|
||||||
|
[<a href="#NVpackages">packages</a>]
|
||||||
|
[<a href="#NVcycles">cycles</a>]
|
||||||
|
[<a href="#NVexplanations">explanations</a>]
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<xsl:for-each select="./Packages/Package">
|
||||||
|
<xsl:if test="count(error) = 0">
|
||||||
|
<h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
|
||||||
|
<xsl:value-of select="@name"/></a></h3>
|
||||||
|
|
||||||
|
<table width="100%"><tr>
|
||||||
|
<td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
|
||||||
|
<td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
|
||||||
|
<td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
|
||||||
|
<td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
|
||||||
|
<td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<table width="100%" class="details">
|
||||||
|
<tr>
|
||||||
|
<th>Abstract Classes</th>
|
||||||
|
<th>Concrete Classes</th>
|
||||||
|
<th>Used by Packages</th>
|
||||||
|
<th>Uses Packages</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="25%">
|
||||||
|
<xsl:if test="count(AbstractClasses/Class)=0">
|
||||||
|
<i>None</i>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:for-each select="AbstractClasses/Class">
|
||||||
|
<xsl:value-of select="node()"/><br/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</td>
|
||||||
|
<td valign="top" width="25%">
|
||||||
|
<xsl:if test="count(ConcreteClasses/Class)=0">
|
||||||
|
<i>None</i>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:for-each select="ConcreteClasses/Class">
|
||||||
|
<xsl:value-of select="node()"/><br/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</td>
|
||||||
|
<td valign="top" width="25%">
|
||||||
|
<xsl:if test="count(UsedBy/Package)=0">
|
||||||
|
<i>None</i>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:for-each select="UsedBy/Package">
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
|
||||||
|
<xsl:value-of select="node()"/>
|
||||||
|
</a><br/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</td>
|
||||||
|
<td valign="top" width="25%">
|
||||||
|
<xsl:if test="count(DependsUpon/Package)=0">
|
||||||
|
<i>None</i>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:for-each select="DependsUpon/Package">
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
|
||||||
|
<xsl:value-of select="node()"/>
|
||||||
|
</a><br/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<table width="100%"><tr><td>
|
||||||
|
<a name="NVcycles"><h2>Cycles</h2></a>
|
||||||
|
</td><td align="right">
|
||||||
|
[<a href="#NVsummary">summary</a>]
|
||||||
|
[<a href="#NVpackages">packages</a>]
|
||||||
|
[<a href="#NVcycles">cycles</a>]
|
||||||
|
[<a href="#NVexplanations">explanations</a>]
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<xsl:if test="count(Cycles/Package) = 0">
|
||||||
|
<p>There are no cyclic dependancies.</p>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:for-each select="Cycles/Package">
|
||||||
|
<h3><xsl:value-of select="@Name"/></h3><p>
|
||||||
|
<xsl:for-each select="Package">
|
||||||
|
<xsl:value-of select="."/><br/>
|
||||||
|
</xsl:for-each></p>
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<table width="100%"><tr><td>
|
||||||
|
<a name="NVexplanations"><h2>Explanations</h2></a>
|
||||||
|
</td><td align="right">
|
||||||
|
[<a href="#NVsummary">summary</a>]
|
||||||
|
[<a href="#NVpackages">packages</a>]
|
||||||
|
[<a href="#NVcycles">cycles</a>]
|
||||||
|
[<a href="#NVexplanations">explanations</a>]
|
||||||
|
</td></tr></table>
|
||||||
|
|
||||||
|
<p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
|
||||||
|
|
||||||
|
<h3><a name="EXnumber">Number of Classes</a></h3>
|
||||||
|
<p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
|
||||||
|
<h3><a name="EXafferent">Afferent Couplings</a></h3>
|
||||||
|
<p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
|
||||||
|
<h3><a name="EXefferent">Efferent Couplings</a></h3>
|
||||||
|
<p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
|
||||||
|
<h3><a name="EXabstractness">Abstractness</a></h3>
|
||||||
|
<p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
|
||||||
|
<p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
|
||||||
|
<h3><a name="EXinstability">Instability</a></h3>
|
||||||
|
<p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
|
||||||
|
<p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
|
||||||
|
<h3><a name="EXdistance">Distance</a></h3>
|
||||||
|
<p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
|
||||||
|
<p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
|
||||||
|
<p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
338
legal/LICENSE
Normal file → Executable file
338
legal/LICENSE
Normal file → Executable file
@ -202,336 +202,18 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
APACHE POI SUBCOMPONENTS:
|
|
||||||
|
|
||||||
Apache POI includes subcomponents with separate copyright notices and
|
|
||||||
license terms. Your use of these subcomponents is subject to the terms
|
|
||||||
and conditions of the following licenses:
|
|
||||||
|
|
||||||
|
|
||||||
Office Open XML schemas (ooxml-schemas-1.*.jar)
|
Office Open XML (OOXML) xsds:
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
The Office Open XML schema definitions used by Apache POI are
|
These were downloaded as part of the Office Open XML ECMA Specification
|
||||||
a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
|
from <http://www.ecma-international.org/publications/standards/Ecma-376.htm>
|
||||||
As defined in section 9.4 of the ECMA bylaws [2], this specification
|
|
||||||
is available to all interested parties without restriction:
|
|
||||||
|
|
||||||
9.4 All documents when approved shall be made available to
|
These are included within the Apache POI distribution, and are available
|
||||||
all interested parties without restriction.
|
under compatible licensing terms.
|
||||||
|
|
||||||
Furthermore, both Microsoft and Adobe have granted patent licenses
|
Copyright - ECMA International, "made available without restriction"
|
||||||
to this work [3,4,5].
|
http://www.ecma-international.org/memento/Ecmabylaws.htm - section 9.4
|
||||||
|
Patent License - Microsoft Open Specification Promise (OSP)
|
||||||
[1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
|
http://www.microsoft.com/interop/osp/
|
||||||
[2] http://www.ecma-international.org/memento/Ecmabylaws.htm
|
|
||||||
[3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx
|
|
||||||
[4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
|
|
||||||
Patent%20statements%20ok/ECMA-376%20Edition%202%20Microsoft%20Patent%20Declaration.pdf
|
|
||||||
[5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/
|
|
||||||
Patent%20statements%20ok/ECMA-376%20Adobe%20Patent%20Declaration.pdf
|
|
||||||
|
|
||||||
|
|
||||||
Bouncy Castle library (bcprov-*.jar, bcpg-*.jar, bcpkix-*.jar)
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to
|
|
||||||
deal in the Software without restriction, including without limitation the
|
|
||||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
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 AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
IN THE SOFTWARE.
|
|
||||||
|
|
||||||
JUnit test library (junit-4.*.jar) & JaCoCo (*jacoco*)
|
|
||||||
|
|
||||||
Eclipse Public License - v 1.0
|
|
||||||
|
|
||||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
|
|
||||||
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
|
|
||||||
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
|
||||||
|
|
||||||
1. DEFINITIONS
|
|
||||||
|
|
||||||
"Contribution" means:
|
|
||||||
|
|
||||||
a) in the case of the initial Contributor, the initial code and documentation
|
|
||||||
distributed under this Agreement, and
|
|
||||||
b) in the case of each subsequent Contributor:
|
|
||||||
i) changes to the Program, and
|
|
||||||
ii) additions to the Program;
|
|
||||||
where such changes and/or additions to the Program originate from and are
|
|
||||||
distributed by that particular Contributor. A Contribution 'originates' from
|
|
||||||
a Contributor if it was added to the Program by such Contributor itself or
|
|
||||||
anyone acting on such Contributor's behalf. Contributions do not include
|
|
||||||
additions to the Program which: (i) are separate modules of software
|
|
||||||
distributed in conjunction with the Program under their own license agreement,
|
|
||||||
and (ii) are not derivative works of the Program.
|
|
||||||
|
|
||||||
"Contributor" means any person or entity that distributes the Program.
|
|
||||||
|
|
||||||
"Licensed Patents" mean patent claims licensable by a Contributor which are
|
|
||||||
necessarily infringed by the use or sale of its Contribution alone or when
|
|
||||||
combined with the Program.
|
|
||||||
|
|
||||||
"Program" means the Contributions distributed in accordance with this Agreement.
|
|
||||||
|
|
||||||
"Recipient" means anyone who receives the Program under this Agreement,
|
|
||||||
including all Contributors.
|
|
||||||
|
|
||||||
2. GRANT OF RIGHTS
|
|
||||||
|
|
||||||
a) Subject to the terms of this Agreement, each Contributor hereby grants
|
|
||||||
Recipient a non-exclusive, worldwide, royalty-free copyright license to
|
|
||||||
reproduce, prepare derivative works of, publicly display, publicly
|
|
||||||
perform, distribute and sublicense the Contribution of such Contributor,
|
|
||||||
if any, and such derivative works, in source code and object code form.
|
|
||||||
b) Subject to the terms of this Agreement, each Contributor hereby grants
|
|
||||||
Recipient a non-exclusive, worldwide, royalty-free patent license under
|
|
||||||
Licensed Patents to make, use, sell, offer to sell, import and otherwise
|
|
||||||
transfer the Contribution of such Contributor, if any, in source code
|
|
||||||
and object code form. This patent license shall apply to the combination
|
|
||||||
of the Contribution and the Program if, at the time the Contribution is
|
|
||||||
added by the Contributor, such addition of the Contribution causes such
|
|
||||||
combination to be covered by the Licensed Patents. The patent license
|
|
||||||
shall not apply to any other combinations which include the Contribution.
|
|
||||||
No hardware per se is licensed hereunder.
|
|
||||||
c) Recipient understands that although each Contributor grants the licenses
|
|
||||||
to its Contributions set forth herein, no assurances are provided by any
|
|
||||||
Contributor that the Program does not infringe the patent or other
|
|
||||||
intellectual property rights of any other entity. Each Contributor
|
|
||||||
disclaims any liability to Recipient for claims brought by any other
|
|
||||||
entity based on infringement of intellectual property rights or
|
|
||||||
otherwise. As a condition to exercising the rights and licenses granted
|
|
||||||
hereunder, each Recipient hereby assumes sole responsibility to secure
|
|
||||||
any other intellectual property rights needed, if any. For example, if
|
|
||||||
a third party patent license is required to allow Recipient to distribute
|
|
||||||
the Program, it is Recipient's responsibility to acquire that license
|
|
||||||
before distributing the Program.
|
|
||||||
d) Each Contributor represents that to its knowledge it has sufficient
|
|
||||||
copyright rights in its Contribution, if any, to grant the copyright
|
|
||||||
license set forth in this Agreement.
|
|
||||||
|
|
||||||
3. REQUIREMENTS
|
|
||||||
|
|
||||||
A Contributor may choose to distribute the Program in object code form under
|
|
||||||
its own license agreement, provided that:
|
|
||||||
|
|
||||||
a) it complies with the terms and conditions of this Agreement; and
|
|
||||||
b) its license agreement:
|
|
||||||
i) effectively disclaims on behalf of all Contributors all warranties and
|
|
||||||
conditions, express and implied, including warranties or conditions of
|
|
||||||
title and non-infringement, and implied warranties or conditions of
|
|
||||||
merchantability and fitness for a particular purpose;
|
|
||||||
ii) effectively excludes on behalf of all Contributors all liability for
|
|
||||||
damages, including direct, indirect, special, incidental and
|
|
||||||
consequential damages, such as lost profits;
|
|
||||||
iii) states that any provisions which differ from this Agreement are
|
|
||||||
offered by that Contributor alone and not by any other party; and
|
|
||||||
iv) states that source code for the Program is available from such
|
|
||||||
Contributor, and informs licensees how to obtain it in a reasonable
|
|
||||||
manner on or through a medium customarily used for software exchange.
|
|
||||||
|
|
||||||
When the Program is made available in source code form:
|
|
||||||
|
|
||||||
a) it must be made available under this Agreement; and
|
|
||||||
b) a copy of this Agreement must be included with each copy of the Program.
|
|
||||||
Contributors may not remove or alter any copyright notices contained
|
|
||||||
within the Program.
|
|
||||||
|
|
||||||
Each Contributor must identify itself as the originator of its Contribution,
|
|
||||||
if any, in a manner that reasonably allows subsequent Recipients to identify
|
|
||||||
the originator of the Contribution.
|
|
||||||
|
|
||||||
4. COMMERCIAL DISTRIBUTION
|
|
||||||
|
|
||||||
Commercial distributors of software may accept certain responsibilities with
|
|
||||||
respect to end users, business partners and the like. While this license is
|
|
||||||
intended to facilitate the commercial use of the Program, the Contributor
|
|
||||||
who includes the Program in a commercial product offering should do so in a
|
|
||||||
manner which does not create potential liability for other Contributors.
|
|
||||||
Therefore, if a Contributor includes the Program in a commercial product
|
|
||||||
offering, such Contributor ("Commercial Contributor") hereby agrees to
|
|
||||||
defend and indemnify every other Contributor ("Indemnified Contributor")
|
|
||||||
against any losses, damages and costs (collectively "Losses") arising from
|
|
||||||
claims, lawsuits and other legal actions brought by a third party against
|
|
||||||
the Indemnified Contributor to the extent caused by the acts or omissions
|
|
||||||
of such Commercial Contributor in connection with its distribution of the
|
|
||||||
Program in a commercial product offering. The obligations in this section
|
|
||||||
do not apply to any claims or Losses relating to any actual or alleged
|
|
||||||
intellectual property infringement. In order to qualify, an Indemnified
|
|
||||||
Contributor must: a) promptly notify the Commercial Contributor in writing
|
|
||||||
of such claim, and b) allow the Commercial Contributor to control, and
|
|
||||||
cooperate with the Commercial Contributor in, the defense and any related
|
|
||||||
settlement negotiations. The Indemnified Contributor may participate in any
|
|
||||||
such claim at its own expense.
|
|
||||||
|
|
||||||
For example, a Contributor might include the Program in a commercial product
|
|
||||||
offering, Product X. That Contributor is then a Commercial Contributor. If
|
|
||||||
that Commercial Contributor then makes performance claims, or offers
|
|
||||||
warranties related to Product X, those performance claims and warranties are
|
|
||||||
such Commercial Contributor's responsibility alone. Under this section, the
|
|
||||||
Commercial Contributor would have to defend claims against the other
|
|
||||||
Contributors related to those performance claims and warranties, and if a
|
|
||||||
court requires any other Contributor to pay any damages as a result, the
|
|
||||||
Commercial Contributor must pay those damages.
|
|
||||||
|
|
||||||
5. NO WARRANTY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
|
|
||||||
AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
|
|
||||||
EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
|
|
||||||
CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the
|
|
||||||
appropriateness of using and distributing the Program and assumes all risks
|
|
||||||
associated with its exercise of rights under this Agreement , including but
|
|
||||||
not limited to the risks and costs of program errors, compliance with
|
|
||||||
applicable laws, damage to or loss of data, programs or equipment, and
|
|
||||||
unavailability or interruption of operations.
|
|
||||||
|
|
||||||
6. DISCLAIMER OF LIABILITY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
|
|
||||||
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
|
|
||||||
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
|
|
||||||
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
|
|
||||||
OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
7. GENERAL
|
|
||||||
|
|
||||||
If any provision of this Agreement is invalid or unenforceable under
|
|
||||||
applicable law, it shall not affect the validity or enforceability of the
|
|
||||||
remainder of the terms of this Agreement, and without further action by the
|
|
||||||
parties hereto, such provision shall be reformed to the minimum extent
|
|
||||||
necessary to make such provision valid and enforceable.
|
|
||||||
|
|
||||||
If Recipient institutes patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Program itself
|
|
||||||
(excluding combinations of the Program with other software or hardware)
|
|
||||||
infringes such Recipient's patent(s), then such Recipient's rights granted
|
|
||||||
under Section 2(b) shall terminate as of the date such litigation is filed.
|
|
||||||
|
|
||||||
All Recipient's rights under this Agreement shall terminate if it fails to
|
|
||||||
comply with any of the material terms or conditions of this Agreement and
|
|
||||||
does not cure such failure in a reasonable period of time after becoming
|
|
||||||
aware of such noncompliance. If all Recipient's rights under this Agreement
|
|
||||||
terminate, Recipient agrees to cease use and distribution of the Program as
|
|
||||||
soon as reasonably practicable. However, Recipient's obligations under this
|
|
||||||
Agreement and any licenses granted by Recipient relating to the Program
|
|
||||||
shall continue and survive.
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute copies of this Agreement, but
|
|
||||||
in order to avoid inconsistency the Agreement is copyrighted and may only
|
|
||||||
be modified in the following manner. The Agreement Steward reserves the
|
|
||||||
right to publish new versions (including revisions) of this Agreement from
|
|
||||||
time to time. No one other than the Agreement Steward has the right to
|
|
||||||
modify this Agreement. The Eclipse Foundation is the initial Agreement
|
|
||||||
Steward. The Eclipse Foundation may assign the responsibility to serve as
|
|
||||||
the Agreement Steward to a suitable separate entity. Each new version of
|
|
||||||
the Agreement will be given a distinguishing version number. The Program
|
|
||||||
(including Contributions) may always be distributed subject to the version
|
|
||||||
of the Agreement under which it was received. In addition, after a new
|
|
||||||
version of the Agreement is published, Contributor may elect to distribute
|
|
||||||
the Program (including its Contributions) under the new version. Except as
|
|
||||||
expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
|
|
||||||
rights or licenses to the intellectual property of any Contributor under
|
|
||||||
this Agreement, whether expressly, by implication, estoppel or otherwise.
|
|
||||||
All rights in the Program not expressly granted under this Agreement are
|
|
||||||
reserved.
|
|
||||||
|
|
||||||
This Agreement is governed by the laws of the State of New York and the
|
|
||||||
intellectual property laws of the United States of America. No party to this
|
|
||||||
Agreement will bring a legal action under this Agreement more than one year
|
|
||||||
after the cause of action arose. Each party waives its rights to a jury
|
|
||||||
trial in any resulting litigation.
|
|
||||||
|
|
||||||
Hamcrest library (hamcrest-*.jar) & CuvesAPI / Curve API
|
|
||||||
|
|
||||||
BSD License
|
|
||||||
|
|
||||||
Copyright (c) 2000-2006, www.hamcrest.org
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer. Redistributions in binary
|
|
||||||
form must reproduce the above copyright notice, this list of conditions and
|
|
||||||
the following disclaimer in the documentation and/or other materials
|
|
||||||
provided with the distribution.
|
|
||||||
|
|
||||||
Neither the name of Hamcrest nor the names of its contributors may be used
|
|
||||||
to endorse or promote products derived from this software without specific
|
|
||||||
prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
SLF4J library (slf4j-api-*.jar)
|
|
||||||
|
|
||||||
Copyright (c) 2004-2013 QOS.ch
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
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 AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
inbot-utils (https://github.com/Inbot/inbot-utils)
|
|
||||||
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2015 Inbot
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
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 AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
46
legal/NOTICE
46
legal/NOTICE
@ -1,27 +1,35 @@
|
|||||||
Apache POI
|
Apache POI
|
||||||
Copyright 2003-2017 The Apache Software Foundation
|
Copyright 2001-2007 The Apache Software Foundation
|
||||||
|
|
||||||
This product includes software developed by
|
This product includes software developed by
|
||||||
The Apache Software Foundation (https://www.apache.org/).
|
The Apache Software Foundation (http://www.apache.org/).
|
||||||
|
|
||||||
This product contains parts that were originally based on software from BEA.
|
|
||||||
Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/> (dead link),
|
|
||||||
which was acquired by Oracle Corporation in 2008.
|
|
||||||
<http://www.oracle.com/us/corporate/Acquisitions/bea/index.html>
|
|
||||||
<https://en.wikipedia.org/wiki/BEA_Systems>
|
|
||||||
|
|
||||||
This product contains W3C XML Schema documents. Copyright 2001-2003 (c)
|
Unit testing support is provided by JUnit, under the
|
||||||
World Wide Web Consortium (Massachusetts Institute of Technology, European
|
Common Public License Version 1.0:
|
||||||
Research Consortium for Informatics and Mathematics, Keio University)
|
http://www.opensource.org/licenses/cpl.php
|
||||||
|
See http://www.junit.org/
|
||||||
|
|
||||||
This product contains the Piccolo XML Parser for Java
|
|
||||||
(http://piccolo.sourceforge.net/). Copyright 2002 Yuval Oren.
|
|
||||||
|
|
||||||
This product contains the chunks_parse_cmds.tbl file from the vsdump program.
|
A single resource file of the POI scratchpad component HDGF is taken from
|
||||||
Copyright (C) 2006-2007 Valek Filippov (frob@df.ru)
|
VSDump, and is under the GNU General Public Licence version 3 (GPL v3):
|
||||||
|
http://gplv3.fsf.org/
|
||||||
|
Since this is a data file, and has no compiled version (the original
|
||||||
|
file is distributed in both source and binary versions of POI), there should
|
||||||
|
be little difference in licencing requirements compared to the ASL.
|
||||||
|
For those wishing to avoid this component, the HDGF part of the POI
|
||||||
|
scratchpad should be omitted.
|
||||||
|
See http://www.gnome.ru/projects/vsdump_en.html
|
||||||
|
|
||||||
This product contains parts of the eID Applet project
|
|
||||||
<http://eid-applet.googlecode.com> and <https://github.com/e-Contract/eid-applet>.
|
The Office Open XML experimental support had additional dependencies,
|
||||||
Copyright (c) 2009-2014
|
with their own licensing:
|
||||||
FedICT (federal ICT department of Belgium), e-Contract.be BVBA (https://www.e-contract.be),
|
* XML Beans - http://xmlbeans.apache.org/
|
||||||
Bart Hanssens from FedICT
|
Apache Licence Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* DOM4J - http://www.dom4j.org/
|
||||||
|
BSD Licence - http://www.dom4j.org/license.html
|
||||||
|
* Jaxen - http://jaxen.org/
|
||||||
|
Apache Style Licence - http://jaxen.org/license.html
|
||||||
|
* OpenXml4J - http://www.openxml4j.org/
|
||||||
|
BSD Licence or Apache Licence Version 2.0 -
|
||||||
|
http://www.openxml4j.org/Licensing/Default.html
|
||||||
|
1
lib/.cvsignore
Normal file
1
lib/.cvsignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.jar
|
36
poi-redirect.pom
Normal file
36
poi-redirect.pom
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>poi</groupId>
|
||||||
|
<artifactId>@ARTIFICAT@</artifactId>
|
||||||
|
<version>@VERSION@</version>
|
||||||
|
|
||||||
|
<distributionManagement>
|
||||||
|
<relocation>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
</relocation>
|
||||||
|
</distributionManagement>
|
||||||
|
</project>
|
91
poi.pom
Normal file
91
poi.pom
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>@ARTIFICAT@</artifactId>
|
||||||
|
<version>@VERSION@</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<name>Apache POI</name>
|
||||||
|
<url>http://poi.apache.org/</url>
|
||||||
|
<description>Apache POI - Java API To Access Microsoft Format Files</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- START_NON_MAIN_DEPENDENCY -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi</artifactId>
|
||||||
|
<version>@VERSION@</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- END_NON_MAIN_DEPENDENCY -->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-logging</groupId>
|
||||||
|
<artifactId>commons-logging</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
<!-- need exclusion until commons-logging pom is fixed after 1.1 -->
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>logkit</groupId>
|
||||||
|
<artifactId>logkit</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>avalon-framework</groupId>
|
||||||
|
<artifactId>avalon-framework</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>servlet-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>1.2.13</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<licenses>
|
||||||
|
<license>
|
||||||
|
<name>The Apache Software License, Version 2.0</name>
|
||||||
|
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||||
|
<distribution>repo</distribution>
|
||||||
|
</license>
|
||||||
|
</licenses>
|
||||||
|
<scm>
|
||||||
|
<url>http://svn.apache.org/viewvc/poi/trunk</url>
|
||||||
|
<connection>scm:svn:http://svn.apache.org/repos/asf/poi/trunk</connection>
|
||||||
|
</scm>
|
||||||
|
<issueManagement>
|
||||||
|
<system>bugzilla</system>
|
||||||
|
<url>http://issues.apache.org/bugzilla/buglist.cgi?product=POI</url>
|
||||||
|
</issueManagement>
|
||||||
|
<organization>
|
||||||
|
<name>Apache Software Foundation</name>
|
||||||
|
<url>http://www.apache.org/</url>
|
||||||
|
</organization>
|
||||||
|
</project>
|
101
pom.xml
101
pom.xml
@ -1,101 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
||||||
contributor license agreements. See the NOTICE file distributed with
|
|
||||||
this work for additional information regarding copyright ownership.
|
|
||||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
||||||
(the "License"); you may not use this file except in compliance with
|
|
||||||
the License. You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<parent>
|
|
||||||
<groupId>org.sonatype.oss</groupId>
|
|
||||||
<artifactId>oss-parent</artifactId>
|
|
||||||
<version>9</version>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<groupId>com.moparisthebest.poi</groupId>
|
|
||||||
<artifactId>poi-fast-calc</artifactId>
|
|
||||||
<version>3.17-SNAPSHOT</version>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<name>POI Fast Calc</name>
|
|
||||||
<url>https://code.moparisthebest.com/moparisthebest/poi</url>
|
|
||||||
<description>POI Fast Calc - Java API To Calculate Excel formulas quickly</description>
|
|
||||||
|
|
||||||
<licenses>
|
|
||||||
<license>
|
|
||||||
<name>The Apache Software License, Version 2.0</name>
|
|
||||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
|
||||||
</license>
|
|
||||||
</licenses>
|
|
||||||
|
|
||||||
<organization>
|
|
||||||
<name>moparisthebest.com</name>
|
|
||||||
<url>https://www.moparisthebest.com</url>
|
|
||||||
</organization>
|
|
||||||
|
|
||||||
<scm>
|
|
||||||
<connection>scm:git:https://code.moparisthebest.com/moparisthebest/poi.git</connection>
|
|
||||||
<developerConnection>scm:git:https://code.moparisthebest.com/moparisthebest/poi.git</developerConnection>
|
|
||||||
<url>https://code.moparisthebest.com/moparisthebest/poi</url>
|
|
||||||
</scm>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<java.version>1.6</java.version>
|
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
|
||||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
|
||||||
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
<pushChanges>false</pushChanges>
|
|
||||||
<localCheckout>true</localCheckout>
|
|
||||||
|
|
||||||
<!-- default argline for junit tests, java 9+ requires much less memory than 6/7/8, but more runs faster -->
|
|
||||||
<test.argLine>-Xmx4096m</test.argLine>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
<version>4.12</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>2.22.1</version>
|
|
||||||
<configuration>
|
|
||||||
<verbose>true</verbose>
|
|
||||||
<fork>true</fork>
|
|
||||||
<argLine>${test.argLine}</argLine>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.sonatype.plugins</groupId>
|
|
||||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
|
||||||
<version>1.6.5</version>
|
|
||||||
<extensions>true</extensions>
|
|
||||||
<configuration>
|
|
||||||
<serverId>ossrh</serverId>
|
|
||||||
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
|
|
||||||
<autoReleaseAfterClose>true</autoReleaseAfterClose>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</project>
|
|
0
src/.cvsignore
Normal file
0
src/.cvsignore
Normal file
1
src/contrib/lib/.cvsignore
Normal file
1
src/contrib/lib/.cvsignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.jar
|
316
src/contrib/poi-ruby/Makefile
Normal file
316
src/contrib/poi-ruby/Makefile
Normal file
@ -0,0 +1,316 @@
|
|||||||
|
#Adapted from the Makefile for PyLucene, by the OSAF
|
||||||
|
# Makefile for building Poi4R
|
||||||
|
#
|
||||||
|
# Supported operating systems: Linux, Mac OS X and Windows.
|
||||||
|
# See INSTALL file for requirements.
|
||||||
|
#
|
||||||
|
# Steps to build
|
||||||
|
# 1. Edit the sections below as documented
|
||||||
|
# 2. make all
|
||||||
|
# 3. make install
|
||||||
|
#
|
||||||
|
# The install target installs the Poi4R python extension in python's
|
||||||
|
# site-packages directory. On Mac OS X, it also installs the gcj runtime
|
||||||
|
# libraries into $(PREFIX)/lib.
|
||||||
|
#
|
||||||
|
# To successfully import the Poi4R extension into Ruby, all required
|
||||||
|
# libraries need to be found. If the locations you chose are non-standard,
|
||||||
|
# the relevant DYLD_LIBRARY_PATH (Mac OS X), LD_LIBRARY_PATH (Linux), or
|
||||||
|
# PATH (Windows) need to be set accordingly.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
VERSION=0.1.0
|
||||||
|
POI_VER=2.0-final-20040126
|
||||||
|
RUBY_VER=1.8
|
||||||
|
|
||||||
|
POI4R:=$(shell pwd)
|
||||||
|
POI=$(POI4R)/poi-$(POI_VER)
|
||||||
|
#DEBUG=1
|
||||||
|
|
||||||
|
#
|
||||||
|
# You need to uncomment and edit the variables below in the section
|
||||||
|
# corresponding to your operating system.
|
||||||
|
#
|
||||||
|
# PREFIX: where programs are normally installed on your system (Unix).
|
||||||
|
# PREFIX_RUBY: where your version of python is installed.
|
||||||
|
# GCJ_HOME: where GCC/GCJ is installed.
|
||||||
|
# Windows drive-absolute paths need to be expressed cygwin style.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Mac OS X (Darwin)
|
||||||
|
#PREFIX=/usr/local
|
||||||
|
#PREFIX_RUBY=/Library/Frameworks/Ruby.framework/Versions/$(RUBY_VER)
|
||||||
|
#SWIG=$(PREFIX)/bin/swig
|
||||||
|
#GCJ_HOME=/usr/local/gcc-3.4.1
|
||||||
|
#DB=$(POI4R)/db-$(DB_VER)
|
||||||
|
#PREFIX_DB=/usr/local/BerkeleyDB.$(DB_LIB_VER)
|
||||||
|
|
||||||
|
# Linux
|
||||||
|
PREFIX=/usr
|
||||||
|
PREFIX_RUBY=$(PREFIX)
|
||||||
|
SWIG=$(PREFIX)/bin/swig
|
||||||
|
GCJ_HOME=/usr
|
||||||
|
#DB=$(POI4R)/db-$(DB_VER)
|
||||||
|
#PREFIX_DB=$(PREFIX)/BerkeleyDB.$(DB_LIB_VER)
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
#PREFIX_RUBY=/cygdrive/o/Python-2.3.2
|
||||||
|
#SWIG=/cygdrive/c/utils/bin/swig.exe
|
||||||
|
#GCJ_HOME=/cygdrive/o/mingw-3.1
|
||||||
|
#DB=/cygdrive/o/db-$(DB_VER)
|
||||||
|
#PREFIX_DB=$(DB)
|
||||||
|
|
||||||
|
#
|
||||||
|
# No edits required below
|
||||||
|
#
|
||||||
|
|
||||||
|
OS=$(shell uname)
|
||||||
|
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
|
||||||
|
OS=Cygwin
|
||||||
|
endif
|
||||||
|
ifeq ($(findstring WINNT,$(OS)),WINNT)
|
||||||
|
OS=Cygwin
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
COMP_OPT=DEBUG=1
|
||||||
|
SUFFIX=d
|
||||||
|
_SUFFIX=_d
|
||||||
|
BINDIR=debug
|
||||||
|
else
|
||||||
|
COMP_OPT=
|
||||||
|
SUFFIX=
|
||||||
|
_SUFFIX=
|
||||||
|
BINDIR=release
|
||||||
|
endif
|
||||||
|
|
||||||
|
SWIG_OPT=-DSWIG_COBJECT_TYPES -DPOI4R_VER="'$(VERSION)'" -DPOI_VER="'$(POI_VER)'"
|
||||||
|
|
||||||
|
JCCFLAGS=--encoding=UTF-8
|
||||||
|
#JCCFLAGS=--encoding=UTF-8 -findirect-dispatch
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)/site-packages
|
||||||
|
RUBY_INC=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)
|
||||||
|
POI4R=$(BINDIR)/poi4r.so
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
CCFLAGS=-O0 -g
|
||||||
|
LDFLAGS=-g
|
||||||
|
else
|
||||||
|
CCFLAGS=-O2
|
||||||
|
LDFLAGS=
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby/site-ruby/$(RUBY_VER)/
|
||||||
|
RUBY_INC=$(PREFIX_RUBY)/lib/ruby/$(RUBY_VER)/i686-linux
|
||||||
|
POI4R_LIB=$(BINDIR)/poi4r.so
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
CCFLAGS=-O0 -g -fPIC
|
||||||
|
LDFLAGS=-g
|
||||||
|
else
|
||||||
|
CCFLAGS=-O2 -fPIC
|
||||||
|
LDFLAGS=
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
RUBY_SITE=`cygpath -aw $(PREFIX_RUBY)/Lib/site-packages`
|
||||||
|
RUBY_INC=`cygpath -aw $(PREFIX_RUBY)/Include`
|
||||||
|
RUBY_PC=`cygpath -aw $(PREFIX_RUBY)/PC`
|
||||||
|
POI4R_LIB=$(BINDIR)/poi4r$(_SUFFIX).so
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
CCFLAGS=-O -g
|
||||||
|
LDFLAGS=-g
|
||||||
|
else
|
||||||
|
CCFLAGS=-O2
|
||||||
|
LDFLAGS=
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
|
||||||
|
RUBY=unknown
|
||||||
|
RUBY_SITE=unknown
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
CLASSES=$(BINDIR)/classes
|
||||||
|
JAR_CLASSES=$(CLASSES)/jar
|
||||||
|
|
||||||
|
CC=$(GCJ_HOME)/bin/gcc
|
||||||
|
CXX=$(GCJ_HOME)/bin/g++
|
||||||
|
JCC=$(GCJ_HOME)/bin/gcj
|
||||||
|
JCCH=$(GCJ_HOME)/bin/gcjh
|
||||||
|
JAR=$(GCJ_HOME)/bin/jar
|
||||||
|
POI_ZIP=poi-$(POI_VER).jar
|
||||||
|
POI_JAR=poi-$(POI_VER).jar
|
||||||
|
|
||||||
|
POI4R_CP:=$(BINDIR)/$(POI_JAR):$(CLASSES)
|
||||||
|
|
||||||
|
OBJS=$(BINDIR)/poi.o $(BINDIR)/io.java.o $(BINDIR)/io.cpp.o
|
||||||
|
|
||||||
|
LIBS=$(POI4R_LIB)
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
patches:
|
||||||
|
|
||||||
|
|
||||||
|
env:
|
||||||
|
ifndef PREFIX_RUBY
|
||||||
|
@echo Operating system is $(OS)
|
||||||
|
@echo You need to edit that section of the Makefile
|
||||||
|
@false
|
||||||
|
else
|
||||||
|
@true
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
$(BINDIR):
|
||||||
|
mkdir -p $(BINDIR)/classes/jar
|
||||||
|
|
||||||
|
|
||||||
|
DISTRIB=Poi-$(VERSION)
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
POI4R_CP:=`cygpath -awp $(POI4R_CP)`
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
_poi=`cygpath -aw $(POI)`
|
||||||
|
else
|
||||||
|
_poi=$(POI)
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(BINDIR)/$(POI_JAR):
|
||||||
|
cp $(POI4R)/$(POI_JAR) $(BINDIR)/$(POI_JAR)
|
||||||
|
cd $(JAR_CLASSES); $(JAR) -xf $(POI4R)/$(POI_JAR)
|
||||||
|
|
||||||
|
$(BINDIR)/io.java.o: java/org/apache/poi/RubyOutputStream.java
|
||||||
|
$(JCC) $(JCCFLAGS) -C -d $(CLASSES) java/org/apache/poi/RubyOutputStream.java
|
||||||
|
$(JCC) $(JCCFLAGS) $(CCFLAGS) -I$(GCJ_HOME)/include -c -o $@ java/org/apache/poi/RubyOutputStream.java
|
||||||
|
|
||||||
|
$(CLASSES)/org/apache/poi/RubyOutputStream.h: $(BINDIR)/io.java.o Makefile
|
||||||
|
mkdir -p $(CLASSES)/org/apache/poi/hssf/usermodel
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFWorkbook
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFSheet
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFRow
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCell
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFHeader
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFooter
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFont
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFDataFormat
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCellStyle
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(CLASSES) org.apache.poi.RubyOutputStream
|
||||||
|
|
||||||
|
|
||||||
|
$(BINDIR)/io.cpp.o: $(CLASSES)/org/apache/poi/RubyOutputStream.h cpp/RubyIO.cpp $(BINDIR)/io.java.o
|
||||||
|
$(JCC) -I$(RUBY_INC) -I$(GCJ_HOME)/include -I$(CLASSES) $(CCFLAGS) -c -o $@ cpp/RubyIO.cpp
|
||||||
|
|
||||||
|
$(BINDIR)/poi.o: $(BINDIR)/$(POI_JAR)
|
||||||
|
$(JCC) $(JCCFLAGS) $(CCFLAGS) -c -o $@ $(BINDIR)/$(POI_JAR)
|
||||||
|
|
||||||
|
Poi4R_wrap.cxx: $(BINDIR)/io.cpp.o Poi4R.i
|
||||||
|
ifdef SWIG
|
||||||
|
$(SWIG) $(SWIG_OPT) -I$(CLASSES) -c++ -ruby Poi4R.i
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||||
|
$(CXX) -shared -bundle -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(GCJ_HOME)/include -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -L$(GCJ_HOME)/lib -lgcj -liconv -undefined suppress -flat_namespace -multiply_defined suppress
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||||
|
$(CXX) -shared -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -lgcj
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||||
|
$(CXX) -c $(CCFLAGS) $(PYDBG) -D_NO_OLDNAMES -D_off_t=off_t $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_PC) -I$(RUBY_INC) -o $(BINDIR)/Poi4R_wrap.o Poi4R_wrap.cxx
|
||||||
|
$(CXX) -shared $(LDFLAGS) -o $@ $(OBJS) `cygpath -aw $(PREFIX_RUBY)/python23$(_SUFFIX).dll` $(BINDIR)/Poi4R_wrap.o -lgcj -lwin32k -lws2_32
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
all: env $(BINDIR) $(LIBS)
|
||||||
|
@echo build of $(POI4R_LIB) complete
|
||||||
|
|
||||||
|
install:: all
|
||||||
|
install Poi4R.rb $(RUBY_SITE)
|
||||||
|
install $(POI4R_LIB) $(RUBY_SITE)
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
install::
|
||||||
|
install $(GCJ_HOME)/lib/libgcj.5.dylib $(PREFIX)/lib
|
||||||
|
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(PREFIX)/lib
|
||||||
|
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(PREFIX)/lib
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
install::
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
install::
|
||||||
|
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BINDIR) Poi4R.rb* Poi4R_wrap.cxx
|
||||||
|
|
||||||
|
realclean: clean
|
||||||
|
rm -rf $(POI) $(STORE) $(DISTRIB)
|
||||||
|
|
||||||
|
distrib::
|
||||||
|
mkdir -p $(DISTRIB)/python
|
||||||
|
install Poi4R.rb $(DISTRIB)/python
|
||||||
|
install $(POI4R_LIB) $(DISTRIB)/python
|
||||||
|
install README $(DISTRIB)
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
distrib::
|
||||||
|
ifdef DB
|
||||||
|
mkdir -p $(DISTRIB)/db
|
||||||
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||||
|
install libdb_java-$(DB_LIB_VER).la.osx $(DISTRIB)/db
|
||||||
|
endif
|
||||||
|
mkdir -p $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcj.5.dylib $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(DISTRIB)/gcj
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
distrib::
|
||||||
|
ifdef DB
|
||||||
|
mkdir -p $(DISTRIB)/db
|
||||||
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||||
|
endif
|
||||||
|
mkdir -p $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcj.so.5 $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libstdc++.so.6 $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcc_s.so.1 $(DISTRIB)/gcj
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
distrib::
|
||||||
|
ifdef DB
|
||||||
|
mkdir -p $(DISTRIB)/db
|
||||||
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
614
src/contrib/poi-ruby/Poi4R.i
Normal file
614
src/contrib/poi-ruby/Poi4R.i
Normal file
@ -0,0 +1,614 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
%module poi4r
|
||||||
|
|
||||||
|
|
||||||
|
%{
|
||||||
|
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
#include <java/lang/Object.h>
|
||||||
|
#include <java/lang/Thread.h>
|
||||||
|
#include <java/lang/ThreadGroup.h>
|
||||||
|
#include <java/lang/Runnable.h>
|
||||||
|
#include <java/lang/String.h>
|
||||||
|
#include <java/lang/Throwable.h>
|
||||||
|
#include <java/lang/Comparable.h>
|
||||||
|
#include <java/lang/Integer.h>
|
||||||
|
#include <java/lang/Long.h>
|
||||||
|
#include <java/lang/Float.h>
|
||||||
|
#include <java/lang/Double.h>
|
||||||
|
#include <java/io/StringWriter.h>
|
||||||
|
#include <java/io/PrintWriter.h>
|
||||||
|
#include <java/util/Hashtable.h>
|
||||||
|
#include <java/util/Date.h>
|
||||||
|
#include <java/util/Calendar.h>
|
||||||
|
#include <java/lang/System.h>
|
||||||
|
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFWorkbook.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFSheet.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFRow.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFCell.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFFont.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFCellStyle.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFDataFormat.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFHeader.h"
|
||||||
|
#include "org/apache/poi/hssf/usermodel/HSSFFooter.h"
|
||||||
|
#include "org/apache/poi/RubyOutputStream.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFWorkbook *jhworkbook;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFSheet *jhsheet;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFRow *jhrow;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFCell *jhcell;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFCellStyle *jhcellstyle;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFFont *jhfont;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFFooter *jhfooter;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFHeader *jhheader;
|
||||||
|
typedef ::org::apache::poi::hssf::usermodel::HSSFDataFormat *jhdataformat;
|
||||||
|
|
||||||
|
typedef ::java::util::Date *jdate;
|
||||||
|
typedef ::java::util::Calendar *jcalendar;
|
||||||
|
typedef ::java::io::OutputStream *joutputstream;
|
||||||
|
typedef ::java::io::InputStream *jinputstream;
|
||||||
|
typedef ::java::util::Collection *jstringCollection;
|
||||||
|
typedef ::java::util::Collection *jtermCollection;
|
||||||
|
typedef ::java::util::Locale *jlocale;
|
||||||
|
typedef ::java::lang::Comparable *jcomparable;
|
||||||
|
typedef JArray<jobject> *jobjectArray;
|
||||||
|
typedef JArray<jstring> *jstringArray;
|
||||||
|
|
||||||
|
|
||||||
|
static java::lang::Thread *nextThread;
|
||||||
|
static java::util::Hashtable *objects;
|
||||||
|
|
||||||
|
|
||||||
|
static void store_reference(jobject object) {
|
||||||
|
java::lang::Integer *ji =new java::lang::Integer(java::lang::System::identityHashCode(object));
|
||||||
|
jobject jo = objects->get(ji);
|
||||||
|
if (!jo) {
|
||||||
|
// printf("put object in hash\n");
|
||||||
|
objects->put(ji,object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static VALUE jo2rv(jobject object, swig_type_info *descriptor)
|
||||||
|
{
|
||||||
|
if (object == NULL)
|
||||||
|
{
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return SWIG_NewPointerObj((void *) object, descriptor, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static int cvtptr(VALUE value, void **jo, swig_type_info *info)
|
||||||
|
{
|
||||||
|
if (SWIG_ConvertPtr(value, jo, info, 0) == 0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int rv2jo(VALUE rv, jobject *jo, swig_type_info *descriptor)
|
||||||
|
{
|
||||||
|
if (NIL_P(rv))
|
||||||
|
*jo = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
java::lang::Object *javaObj;
|
||||||
|
|
||||||
|
if (cvtptr(rv, (void **) &javaObj, descriptor) == -1)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
*jo = javaObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static jstring r2j(VALUE object)
|
||||||
|
{
|
||||||
|
if (NIL_P(object)){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char *ps = STR2CSTR(object);
|
||||||
|
jstring js = JvNewStringLatin1(ps);
|
||||||
|
|
||||||
|
if (!js)
|
||||||
|
{
|
||||||
|
rb_raise(rb_eRuntimeError, "ruby str cannot be converted to java: %s",ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
return js;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE j2r(jstring js)
|
||||||
|
{
|
||||||
|
if (!js)
|
||||||
|
{
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jint len = JvGetStringUTFLength(js);
|
||||||
|
char buf[len + 1];
|
||||||
|
|
||||||
|
JvGetStringUTFRegion(js, 0, len, buf);
|
||||||
|
buf[len] = '\0';
|
||||||
|
|
||||||
|
return rb_str_new2(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void free_java_obj(void* arg1) {
|
||||||
|
jobject object =(jobject) arg1;
|
||||||
|
java::lang::Integer *ji =new java::lang::Integer(java::lang::System::identityHashCode(object));
|
||||||
|
jobject jo = objects->get(ji);
|
||||||
|
if (jo) {
|
||||||
|
// printf("removed object from hash\n");
|
||||||
|
objects->remove(ji);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void raise_ruby_error(java::lang::Throwable *e) {
|
||||||
|
java::io::StringWriter *buffer = new java::io::StringWriter();
|
||||||
|
java::io::PrintWriter *writer = new java::io::PrintWriter(buffer);
|
||||||
|
e->printStackTrace(writer);
|
||||||
|
writer->close();
|
||||||
|
jstring message = buffer->toString();
|
||||||
|
jint len = JvGetStringUTFLength(message);
|
||||||
|
char buf[len + 1];
|
||||||
|
JvGetStringUTFRegion(message, 0, len, buf);
|
||||||
|
buf[len] = '\0';
|
||||||
|
rb_raise(rb_eRuntimeError, "error calling poi \n %s", buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
||||||
|
typedef long jint;
|
||||||
|
typedef long long jlong;
|
||||||
|
typedef char jbyte;
|
||||||
|
typedef float jfloat;
|
||||||
|
typedef float jdouble;
|
||||||
|
typedef int jshort;
|
||||||
|
typedef bool jboolean;
|
||||||
|
|
||||||
|
%typemap(in) SWIGTYPE * {
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1, $1_descriptor))
|
||||||
|
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping");
|
||||||
|
}
|
||||||
|
%typemap(out) SWIGTYPE * {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $1_descriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(in) org::apache::poi::hssf::usermodel::HSSFWorkbook{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFWorkbook *)))
|
||||||
|
SWIG_fail;
|
||||||
|
}
|
||||||
|
%typemap(out) org::apache::poi::hssf::usermodel::HSSFWorkbook {
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFWorkbook *));
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(in) jhsheet{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFSheet *)))
|
||||||
|
SWIG_fail;
|
||||||
|
}
|
||||||
|
%typemap(out) jhsheet {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFSheet *));
|
||||||
|
}
|
||||||
|
%typemap(in) jhrow{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFRow *)))
|
||||||
|
SWIG_fail;
|
||||||
|
}
|
||||||
|
%typemap(out) jhrow {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFRow *));
|
||||||
|
}
|
||||||
|
%typemap(in) jhcell{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFCell *)))
|
||||||
|
SWIG_fail;
|
||||||
|
}
|
||||||
|
%typemap(out) jhcell {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFCell *));
|
||||||
|
}
|
||||||
|
%typemap(in) jhfont{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFFont *)))
|
||||||
|
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFFont");
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(out) jhfont {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFFont *));
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(in) jhcellstyle{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFCellStyle *)))
|
||||||
|
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFCellStyle");
|
||||||
|
}
|
||||||
|
%typemap(out) jhcellstyle {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFCellStyle *));
|
||||||
|
}
|
||||||
|
%typemap(in) jhdataformat{
|
||||||
|
|
||||||
|
if (!rv2jo($input, (jobject *) &$1,
|
||||||
|
$descriptor(org::apache::poi::hssf::usermodel::HSSFDataFormat *)))
|
||||||
|
rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFDataFormat");
|
||||||
|
}
|
||||||
|
%typemap(out) jhdataformat {
|
||||||
|
|
||||||
|
$result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFDataFormat *));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
%typemap(in) jstring {
|
||||||
|
$1 = r2j($input);
|
||||||
|
}
|
||||||
|
%typemap(out) jstring {
|
||||||
|
$result = j2r($1);
|
||||||
|
}
|
||||||
|
%typecheck(SWIG_TYPECHECK_STRING) jstring {
|
||||||
|
$1 = ( NIL_P($input) || TYPE($input)==T_STRING );
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(in) joutputstream {
|
||||||
|
|
||||||
|
jlong ptr;
|
||||||
|
if (!rb_respond_to($input, rb_intern("putc"))) rb_raise(rb_eTypeError,"Expected IO");
|
||||||
|
*(VALUE *) &ptr = (VALUE) $input;
|
||||||
|
$1 = new org::apache::poi::RubyOutputStream(ptr);
|
||||||
|
}
|
||||||
|
%typemap(in) jcalendar {
|
||||||
|
$1 = java::util::Calendar::getInstance();
|
||||||
|
//$1->setTimeInMillis((long long) NUM2DBL(rb_funcall($input,rb_intern("to_i"),0,NULL))*1000.0);
|
||||||
|
$1->set(FIX2INT(rb_funcall($input,rb_intern("year"),0,NULL)),
|
||||||
|
FIX2INT(rb_funcall($input,rb_intern("mon"),0,NULL))-1,
|
||||||
|
FIX2INT(rb_funcall($input,rb_intern("day"),0,NULL)),
|
||||||
|
FIX2INT(rb_funcall($input,rb_intern("hour"),0,NULL)),
|
||||||
|
FIX2INT(rb_funcall($input,rb_intern("min"),0,NULL)),
|
||||||
|
FIX2INT(rb_funcall($input,rb_intern("sec"),0,NULL))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
%typecheck(SWIG_TYPECHECK_POINTER) jcalendar {
|
||||||
|
$1 = rb_respond_to($input, rb_intern("asctime"));
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(out) jdate {
|
||||||
|
jlong t = ((jdate) $1)->getTime();
|
||||||
|
//TODO: separate seconds and microsecs
|
||||||
|
int ts=t/1000;
|
||||||
|
$result=rb_time_new((time_t) ts, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
%freefunc org::apache::poi::hssf::usermodel::HSSFWorkbook "free_java_obj";
|
||||||
|
|
||||||
|
%exception {
|
||||||
|
try {
|
||||||
|
$action
|
||||||
|
} catch (java::lang::Throwable *e) {
|
||||||
|
raise_ruby_error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%exception org::apache::poi::hssf::usermodel::HSSFWorkbook::HSSFWorkbook {
|
||||||
|
try {
|
||||||
|
$action
|
||||||
|
store_reference(result);
|
||||||
|
} catch (java::lang::Throwable *e) {
|
||||||
|
raise_ruby_error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace java {
|
||||||
|
namespace lang {
|
||||||
|
class Object {
|
||||||
|
jstring toString();
|
||||||
|
};
|
||||||
|
%nodefault;
|
||||||
|
class System : public Object {
|
||||||
|
public:
|
||||||
|
static jstring getProperty(jstring);
|
||||||
|
static jstring getProperty(jstring, jstring);
|
||||||
|
static void load(jstring);
|
||||||
|
static void loadLibrary(jstring);
|
||||||
|
static void mapLibraryName(jstring);
|
||||||
|
static void runFinalization();
|
||||||
|
static void setProperty(jstring, jstring);
|
||||||
|
};
|
||||||
|
%makedefault;
|
||||||
|
}
|
||||||
|
namespace io {
|
||||||
|
%nodefault;
|
||||||
|
class InputStream : public ::java::lang::Object {
|
||||||
|
};
|
||||||
|
class OutputStream : public ::java::lang::Object {
|
||||||
|
};
|
||||||
|
|
||||||
|
%makedefault;
|
||||||
|
}
|
||||||
|
namespace util {
|
||||||
|
class Date : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
Date();
|
||||||
|
Date(jlong);
|
||||||
|
void setTime(jlong);
|
||||||
|
jstring toString();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace org {
|
||||||
|
namespace apache {
|
||||||
|
namespace poi {
|
||||||
|
namespace hssf {
|
||||||
|
namespace usermodel {
|
||||||
|
%nodefault;
|
||||||
|
class HSSFWorkbook : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
HSSFWorkbook();
|
||||||
|
jstring getSheetName(jint);
|
||||||
|
jint getNumberOfSheets();
|
||||||
|
void setSheetOrder(jstring,jint);
|
||||||
|
void setSheetName(jint,jstring);
|
||||||
|
void setSheetName(jint,jstring,jshort);
|
||||||
|
jint getSheetIndex(jstring);
|
||||||
|
jhsheet createSheet();
|
||||||
|
jhsheet cloneSheet(jint);
|
||||||
|
jhsheet createSheet(jstring);
|
||||||
|
jhsheet getSheetAt(jint);
|
||||||
|
jhsheet getSheet(jstring);
|
||||||
|
void removeSheetAt(jint);
|
||||||
|
jhcellstyle createCellStyle();
|
||||||
|
jhfont createFont();
|
||||||
|
jhdataformat createDataFormat();
|
||||||
|
void write(joutputstream);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class HSSFSheet : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
jhrow createRow(jint);
|
||||||
|
jhrow getRow(jint);
|
||||||
|
jhfooter getFooter();
|
||||||
|
jhheader getHeader();
|
||||||
|
};
|
||||||
|
class HSSFRow : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
jhcell createCell(jshort);
|
||||||
|
jhcell getCell(jshort);
|
||||||
|
//jboolean getProtect(); //only in 2.5
|
||||||
|
|
||||||
|
};
|
||||||
|
class HSSFCell : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
void setCellValue(jdouble);
|
||||||
|
void setCellValue(jstring);
|
||||||
|
void setCellValue(jboolean);
|
||||||
|
void setCellValue(jcalendar);
|
||||||
|
void setCellFormula(jstring);
|
||||||
|
jstring getStringCellValue();
|
||||||
|
jdouble getNumericCellValue();
|
||||||
|
jdate getDateCellValue();
|
||||||
|
jstring getCellFormula();
|
||||||
|
jboolean getBooleanCellValue();
|
||||||
|
jint getCellType();
|
||||||
|
jshort getEncoding();
|
||||||
|
void setAsActiveCell();
|
||||||
|
|
||||||
|
void setCellStyle(jhcellstyle);
|
||||||
|
void setEncoding(jshort encoding);
|
||||||
|
|
||||||
|
static const jint CELL_TYPE_BLANK;
|
||||||
|
static const jint CELL_TYPE_BOOLEAN;
|
||||||
|
static const jint CELL_TYPE_ERROR;
|
||||||
|
static const jint CELL_TYPE_FORMULA;
|
||||||
|
static const jint CELL_TYPE_NUMERIC;
|
||||||
|
static const jint CELL_TYPE_STRING;
|
||||||
|
|
||||||
|
static const jshort ENCODING_COMPRESSED_UNICODE;
|
||||||
|
static const jshort ENCODING_UTF_16;
|
||||||
|
};
|
||||||
|
class HSSFCellStyle : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
static const jshort ALIGN_CENTER;
|
||||||
|
static const jshort ALIGN_CENTER_SELECTION;
|
||||||
|
static const jshort ALIGN_FILL;
|
||||||
|
static const jshort ALIGN_GENERAL;
|
||||||
|
static const jshort ALIGN_JUSTIFY;
|
||||||
|
static const jshort ALIGN_LEFT;
|
||||||
|
static const jshort ALIGN_RIGHT;
|
||||||
|
static const jshort ALT_BARS;
|
||||||
|
static const jshort BIG_SPOTS;
|
||||||
|
static const jshort BORDER_DASH_DOT;
|
||||||
|
static const jshort BORDER_DASH_DOT_DOT;
|
||||||
|
static const jshort BORDER_DASHED;
|
||||||
|
static const jshort BORDER_DOTTED;
|
||||||
|
static const jshort BORDER_DOUBLE;
|
||||||
|
static const jshort BORDER_HAIR;
|
||||||
|
static const jshort BORDER_MEDIUM;
|
||||||
|
static const jshort BORDER_MEDIUM_DASH_DOT;
|
||||||
|
static const jshort BORDER_MEDIUM_DASH_DOT_DOT;
|
||||||
|
static const jshort BORDER_MEDIUM_DASHED;
|
||||||
|
static const jshort BORDER_NONE;
|
||||||
|
static const jshort BORDER_SLANTED_DASH_DOT;
|
||||||
|
static const jshort BORDER_THICK;
|
||||||
|
static const jshort BORDER_THIN;
|
||||||
|
static const jshort BRICKS;
|
||||||
|
static const jshort DIAMONDS;
|
||||||
|
static const jshort FINE_DOTS;
|
||||||
|
static const jshort NO_FILL;
|
||||||
|
static const jshort SOLID_FOREGROUND;
|
||||||
|
static const jshort SPARSE_DOTS;
|
||||||
|
static const jshort SQUARES;
|
||||||
|
static const jshort THICK_BACKWARD_DIAG;
|
||||||
|
static const jshort THICK_FORWARD_DIAG;
|
||||||
|
static const jshort THICK_HORZ_BANDS;
|
||||||
|
static const jshort THICK_VERT_BANDS;
|
||||||
|
static const jshort THIN_BACKWARD_DIAG;
|
||||||
|
static const jshort THIN_FORWARD_DIAG;
|
||||||
|
static const jshort THIN_HORZ_BANDS;
|
||||||
|
static const jshort THIN_VERT_BANDS;
|
||||||
|
static const jshort VERTICAL_BOTTOM;
|
||||||
|
static const jshort VERTICAL_CENTER;
|
||||||
|
static const jshort VERTICAL_JUSTIFY;
|
||||||
|
static const jshort VERTICAL_TOP;
|
||||||
|
|
||||||
|
jshort getAlignment();
|
||||||
|
jshort getBorderBottom();
|
||||||
|
jshort getBorderLeft();
|
||||||
|
jshort getBorderRight();
|
||||||
|
jshort getBorderTop();
|
||||||
|
jshort getBottomBorderColor();
|
||||||
|
jshort getDataFormat();
|
||||||
|
jshort getFillBackgroundColor();
|
||||||
|
jshort getFillForegroundColor();
|
||||||
|
jshort getFillPattern();
|
||||||
|
jshort getFontIndex();
|
||||||
|
jboolean getHidden();
|
||||||
|
jshort getIndention();
|
||||||
|
jshort getIndex();
|
||||||
|
jshort getLeftBorderColor();
|
||||||
|
jboolean getLocked();
|
||||||
|
jshort getRightBorderColor();
|
||||||
|
jshort getRotation();
|
||||||
|
jshort getTopBorderColor();
|
||||||
|
jshort getVerticalAlignment();
|
||||||
|
jboolean getWrapText();
|
||||||
|
void setAlignment(jshort) ;
|
||||||
|
void setBorderBottom(jshort );
|
||||||
|
void setBorderLeft(jshort );
|
||||||
|
void setBorderRight(jshort );
|
||||||
|
void setBorderTop(jshort );
|
||||||
|
void setBottomBorderColor(jshort );
|
||||||
|
void setDataFormat(jshort );
|
||||||
|
void setFillBackgroundColor(jshort );
|
||||||
|
void setFillForegroundColor(jshort );
|
||||||
|
void setFillPattern(jshort );
|
||||||
|
void setFont(jhfont );
|
||||||
|
void setHidden(jboolean );
|
||||||
|
void setIndention(jshort );
|
||||||
|
void setLeftBorderColor(jshort );
|
||||||
|
void setLocked(jboolean );
|
||||||
|
void setRightBorderColor(jshort );
|
||||||
|
void setRotation(jshort );
|
||||||
|
void setTopBorderColor(jshort );
|
||||||
|
void setVerticalAlignment(jshort );
|
||||||
|
void setWrapText(jboolean );
|
||||||
|
};
|
||||||
|
class HSSFDataFormat : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
static jstring getBuiltinFormat(jshort);
|
||||||
|
static jshort getBuiltinFormat(jstring);
|
||||||
|
jstring getFormat(jshort);
|
||||||
|
jshort getFormat(jstring);
|
||||||
|
static jint getNumberOfBuiltinBuiltinFormats();
|
||||||
|
//TODO static jlist getBuiltinFormats();
|
||||||
|
|
||||||
|
};
|
||||||
|
class HSSFFont : public ::java::lang::Object {
|
||||||
|
public:
|
||||||
|
static const jshort BOLDWEIGHT_BOLD;
|
||||||
|
static const jshort BOLDWEIGHT_NORMAL;
|
||||||
|
static const jshort COLOR_NORMAL;
|
||||||
|
static const jshort COLOR_RED;
|
||||||
|
static const jstring FONT_ARIAL;
|
||||||
|
static const jshort SS_NONE;
|
||||||
|
static const jshort SS_SUB;
|
||||||
|
static const jshort SS_SUPER;
|
||||||
|
static const jshort U_DOUBLE;
|
||||||
|
static const jshort U_DOUBLE_ACCOUNTING;
|
||||||
|
static const jshort U_NONE;
|
||||||
|
static const jshort U_SINGLE;
|
||||||
|
static const jshort U_SINGLE_ACCOUNTING;
|
||||||
|
|
||||||
|
jshort getBoldweight();
|
||||||
|
jshort getColor();
|
||||||
|
jshort getFontHeight();
|
||||||
|
jshort getFontHeightInPoints();
|
||||||
|
jstring getFontName();
|
||||||
|
jshort getIndex();
|
||||||
|
jboolean getItalic();
|
||||||
|
jboolean getStrikeout();
|
||||||
|
jshort getTypeOffset();
|
||||||
|
jshort getUnderline();
|
||||||
|
void setBoldweight(jshort );
|
||||||
|
void setColor(jshort );
|
||||||
|
void setFontHeight(jshort );
|
||||||
|
void setFontHeightInPoints(jshort );
|
||||||
|
void setFontName(jstring );
|
||||||
|
void setItalic(jboolean );
|
||||||
|
void setStrikeout(jboolean );
|
||||||
|
void setTypeOffset(jshort );
|
||||||
|
void setUnderline(jshort );
|
||||||
|
};
|
||||||
|
%makedefault;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%init %{
|
||||||
|
|
||||||
|
JvCreateJavaVM(NULL);
|
||||||
|
JvAttachCurrentThread(NULL, NULL);
|
||||||
|
|
||||||
|
nextThread = new java::lang::Thread();
|
||||||
|
objects = new java::util::Hashtable();
|
||||||
|
|
||||||
|
java::util::Hashtable *props = (java::util::Hashtable *)
|
||||||
|
java::lang::System::getProperties();
|
||||||
|
props->put(JvNewStringUTF("inRuby"), objects);
|
||||||
|
|
||||||
|
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFFont::class$);
|
||||||
|
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFCell::class$);
|
||||||
|
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFSheet::class$);
|
||||||
|
JvInitClass(&org::apache::poi::hssf::usermodel::HSSFCellStyle::class$);
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
44
src/contrib/poi-ruby/cpp/RubyIO.cpp
Normal file
44
src/contrib/poi-ruby/cpp/RubyIO.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
|
||||||
|
#include "ruby.h"
|
||||||
|
#include "org/apache/poi/RubyOutputStream.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The native functions declared in org.apache.poi.RubyoutputStream
|
||||||
|
*
|
||||||
|
* @author aviks
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace org {
|
||||||
|
namespace apache {
|
||||||
|
namespace poi {
|
||||||
|
|
||||||
|
void RubyOutputStream::close(void)
|
||||||
|
{
|
||||||
|
rb_funcall3((VALUE ) rubyIO, rb_intern("close"), 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RubyOutputStream::write(jint toWrite)
|
||||||
|
{
|
||||||
|
rb_funcall((VALUE ) rubyIO, rb_intern("putc"),1,INT2FIX(toWrite));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author aviks
|
||||||
|
* Wrap a java.io.OutputStream around a Ruby IO object
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class RubyOutputStream extends OutputStream {
|
||||||
|
|
||||||
|
//pointer to native ruby VALUE
|
||||||
|
protected long rubyIO;
|
||||||
|
|
||||||
|
public RubyOutputStream (long rubyIO)
|
||||||
|
{
|
||||||
|
this.rubyIO = rubyIO;
|
||||||
|
// incRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void finalize()
|
||||||
|
throws Throwable
|
||||||
|
{
|
||||||
|
// decRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
// protected native void incRef();
|
||||||
|
// protected native void decRef();
|
||||||
|
|
||||||
|
public native void close()
|
||||||
|
throws IOException;
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.io.OutputStream#write(int)
|
||||||
|
*/
|
||||||
|
public native void write(int arg0) throws IOException;
|
||||||
|
}
|
||||||
|
|
BIN
src/contrib/poi-ruby/poi-2.0-final-20040126.jar
Normal file
BIN
src/contrib/poi-ruby/poi-2.0-final-20040126.jar
Normal file
Binary file not shown.
100
src/contrib/poi-ruby/tests/tc_base_tests.rb
Normal file
100
src/contrib/poi-ruby/tests/tc_base_tests.rb
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# ====================================================================
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ====================================================================
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'release/poi4r'
|
||||||
|
|
||||||
|
class TC_base_tests < Test::Unit::TestCase
|
||||||
|
|
||||||
|
def setup()
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_get_constant
|
||||||
|
h=Poi4r::HSSFWorkbook.new
|
||||||
|
s=h.createSheet("Sheet1")
|
||||||
|
r=s.createRow(0)
|
||||||
|
c=r.createCell(0)
|
||||||
|
assert_equal(3,Poi4r::HSSFCell.CELL_TYPE_BLANK,"Constant CELL_TYPE_BLANK")
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_base
|
||||||
|
system("rm test.xls")
|
||||||
|
h=Poi4r::HSSFWorkbook.new
|
||||||
|
|
||||||
|
#Test Sheet Creation
|
||||||
|
s=h.createSheet("Sheet1")
|
||||||
|
s=h.createSheet("Sheet2")
|
||||||
|
assert_equal(2,h.getNumberOfSheets(),"Number of sheets is 2")
|
||||||
|
|
||||||
|
#Test setting cell values
|
||||||
|
s=h.getSheetAt(0)
|
||||||
|
r=s.createRow(0)
|
||||||
|
c=r.createCell(0)
|
||||||
|
c.setCellValue(1.5)
|
||||||
|
assert_equal(c.getNumericCellValue(),1.5,"Numeric Cell Value")
|
||||||
|
c=r.createCell(1)
|
||||||
|
c.setCellValue("Ruby")
|
||||||
|
assert_equal(c.getStringCellValue(),"Ruby","String Cell Value")
|
||||||
|
#Test error handling
|
||||||
|
assert_raise (RuntimeError) {c.getNumericCellValue()}
|
||||||
|
|
||||||
|
#Test styles
|
||||||
|
st = h.createCellStyle()
|
||||||
|
c=r.createCell(2)
|
||||||
|
st.setAlignment(Poi4r::HSSFCellStyle.ALIGN_CENTER)
|
||||||
|
c.setCellStyle(st)
|
||||||
|
c.setCellValue("centr'd")
|
||||||
|
|
||||||
|
#Date handling
|
||||||
|
c=r.createCell(3)
|
||||||
|
t1=Time.now
|
||||||
|
c.setCellValue(Time.now)
|
||||||
|
t2= c.getDateCellValue().gmtime
|
||||||
|
assert_equal(t1.year,t2.year,"year")
|
||||||
|
assert_equal(t1.mon,t2.mon,"month")
|
||||||
|
assert_equal(t1.day,t2.day,"day")
|
||||||
|
assert_equal(t1.hour,t2.hour,"hour")
|
||||||
|
assert_equal(t1.min,t2.min,"min")
|
||||||
|
assert_equal(t1.sec,t2.sec,"sec")
|
||||||
|
st=h.createCellStyle();
|
||||||
|
st.setDataFormat(Poi4r::HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"))
|
||||||
|
c.setCellStyle(st)
|
||||||
|
|
||||||
|
#Fonts
|
||||||
|
c=r.createCell(4)
|
||||||
|
font = h.createFont();
|
||||||
|
font.setFontHeightInPoints(24);
|
||||||
|
font.setFontName("Courier New");
|
||||||
|
font.setItalic(true);
|
||||||
|
font.setStrikeout(true);
|
||||||
|
style = h.createCellStyle();
|
||||||
|
style.setFont(font);
|
||||||
|
c.setCellValue("This is a test of fonts");
|
||||||
|
c.setCellStyle(style);
|
||||||
|
|
||||||
|
#Formulas
|
||||||
|
c=r.createCell(5)
|
||||||
|
c.setCellFormula("A1*2")
|
||||||
|
assert_equal("A1*2",c.getCellFormula,"formula")
|
||||||
|
|
||||||
|
#Test writing
|
||||||
|
h.write(File.new("test.xls","w"))
|
||||||
|
assert_nothing_raised {File.new("test.xls","r")}
|
||||||
|
#h.write(0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
32
src/contrib/poi-ruby/tests/tc_gc.rb
Normal file
32
src/contrib/poi-ruby/tests/tc_gc.rb
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# ====================================================================
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ====================================================================
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'release/poi4r'
|
||||||
|
|
||||||
|
class TC_gc < Test::Unit::TestCase
|
||||||
|
def test_premature_collection
|
||||||
|
h=Poi4r::HSSFWorkbook.new
|
||||||
|
h.createSheet("Sheet1");
|
||||||
|
5000.times do
|
||||||
|
hh=Poi4r::HSSFWorkbook.new
|
||||||
|
GC.start()
|
||||||
|
end
|
||||||
|
assert_equal(1,h.getNumberOfSheets(),"Number of sheets")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
20
src/contrib/poi-ruby/tests/ts_all.rb
Normal file
20
src/contrib/poi-ruby/tests/ts_all.rb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# ====================================================================
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ====================================================================
|
||||||
|
|
||||||
|
require 'test/unit'
|
||||||
|
require 'tests/tc_base_tests'
|
||||||
|
require 'tests/tc_gc'
|
@ -0,0 +1,83 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.metrics;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
public class FontMetricsDumper
|
||||||
|
{
|
||||||
|
public static void main( String[] args ) throws IOException
|
||||||
|
{
|
||||||
|
|
||||||
|
Properties props = new Properties();
|
||||||
|
|
||||||
|
Font[] allFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
|
||||||
|
for ( int i = 0; i < allFonts.length; i++ )
|
||||||
|
{
|
||||||
|
String fontName = allFonts[i].getFontName();
|
||||||
|
|
||||||
|
Font font = new Font(fontName, Font.BOLD, 10);
|
||||||
|
FontMetrics fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(font);
|
||||||
|
int fontHeight = fontMetrics.getHeight();
|
||||||
|
|
||||||
|
props.setProperty("font." + fontName + ".height", fontHeight+"");
|
||||||
|
StringBuffer characters = new StringBuffer();
|
||||||
|
for (char c = 'a'; c <= 'z'; c++)
|
||||||
|
{
|
||||||
|
characters.append( c + ", " );
|
||||||
|
}
|
||||||
|
for (char c = 'A'; c <= 'Z'; c++)
|
||||||
|
{
|
||||||
|
characters.append( c + ", " );
|
||||||
|
}
|
||||||
|
for (char c = '0'; c <= '9'; c++)
|
||||||
|
{
|
||||||
|
characters.append( c + ", " );
|
||||||
|
}
|
||||||
|
StringBuffer widths = new StringBuffer();
|
||||||
|
for (char c = 'a'; c <= 'z'; c++)
|
||||||
|
{
|
||||||
|
widths.append( fontMetrics.getWidths()[c] + ", " );
|
||||||
|
}
|
||||||
|
for (char c = 'A'; c <= 'Z'; c++)
|
||||||
|
{
|
||||||
|
widths.append( fontMetrics.getWidths()[c] + ", " );
|
||||||
|
}
|
||||||
|
for (char c = '0'; c <= '9'; c++)
|
||||||
|
{
|
||||||
|
widths.append( fontMetrics.getWidths()[c] + ", " );
|
||||||
|
}
|
||||||
|
props.setProperty("font." + fontName + ".characters", characters.toString());
|
||||||
|
props.setProperty("font." + fontName + ".widths", widths.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
FileOutputStream fileOut = new FileOutputStream("font_metrics.properties");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
props.store(fileOut, "Font Metrics");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
fileOut.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
245
src/contrib/src/org/apache/poi/contrib/poibrowser/Codec.java
Normal file
245
src/contrib/src/org/apache/poi/contrib/poibrowser/Codec.java
Normal file
@ -0,0 +1,245 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
import org.apache.poi.hpsf.ClassID;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Provides utility methods for encoding and decoding hexadecimal
|
||||||
|
* data.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute (klute@rainer-klute.de) - with portions from Tomcat
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-01-24
|
||||||
|
*/
|
||||||
|
public class Codec
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>The nibbles' hexadecimal values. A nibble is a half byte.</p>
|
||||||
|
*/
|
||||||
|
protected static final byte hexval[] =
|
||||||
|
{(byte) '0', (byte) '1', (byte) '2', (byte) '3',
|
||||||
|
(byte) '4', (byte) '5', (byte) '6', (byte) '7',
|
||||||
|
(byte) '8', (byte) '9', (byte) 'A', (byte) 'B',
|
||||||
|
(byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F'};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a string into its hexadecimal notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final String s)
|
||||||
|
{
|
||||||
|
return hexEncode(s.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a byte array into its hexadecimal notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final byte[] s)
|
||||||
|
{
|
||||||
|
return hexEncode(s, 0, s.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a part of a byte array into its hexadecimal
|
||||||
|
* notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final byte[] s, final int offset,
|
||||||
|
final int length)
|
||||||
|
{
|
||||||
|
StringBuffer b = new StringBuffer(length * 2);
|
||||||
|
for (int i = offset; i < offset + length; i++)
|
||||||
|
{
|
||||||
|
int c = s[i];
|
||||||
|
b.append((char) hexval[(c & 0xF0) >> 4]);
|
||||||
|
b.append((char) hexval[(c & 0x0F) >> 0]);
|
||||||
|
}
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a single byte into its hexadecimal notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final byte b)
|
||||||
|
{
|
||||||
|
StringBuffer sb = new StringBuffer(2);
|
||||||
|
sb.append((char) hexval[(b & 0xF0) >> 4]);
|
||||||
|
sb.append((char) hexval[(b & 0x0F) >> 0]);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a short value (16-bit) into its hexadecimal
|
||||||
|
* notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final short s)
|
||||||
|
{
|
||||||
|
StringBuffer sb = new StringBuffer(4);
|
||||||
|
sb.append((char) hexval[(s & 0xF000) >> 12]);
|
||||||
|
sb.append((char) hexval[(s & 0x0F00) >> 8]);
|
||||||
|
sb.append((char) hexval[(s & 0x00F0) >> 4]);
|
||||||
|
sb.append((char) hexval[(s & 0x000F) >> 0]);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts an int value (32-bit) into its hexadecimal
|
||||||
|
* notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final int i)
|
||||||
|
{
|
||||||
|
StringBuffer sb = new StringBuffer(8);
|
||||||
|
sb.append((char) hexval[(i & 0xF0000000) >> 28]);
|
||||||
|
sb.append((char) hexval[(i & 0x0F000000) >> 24]);
|
||||||
|
sb.append((char) hexval[(i & 0x00F00000) >> 20]);
|
||||||
|
sb.append((char) hexval[(i & 0x000F0000) >> 16]);
|
||||||
|
sb.append((char) hexval[(i & 0x0000F000) >> 12]);
|
||||||
|
sb.append((char) hexval[(i & 0x00000F00) >> 8]);
|
||||||
|
sb.append((char) hexval[(i & 0x000000F0) >> 4]);
|
||||||
|
sb.append((char) hexval[(i & 0x0000000F) >> 0]);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a long value (64-bit) into its hexadecimal
|
||||||
|
* notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final long l)
|
||||||
|
{
|
||||||
|
StringBuffer sb = new StringBuffer(16);
|
||||||
|
sb.append(hexEncode((int) (l & 0xFFFFFFFF00000000L) >> 32));
|
||||||
|
sb.append(hexEncode((int) (l & 0x00000000FFFFFFFFL) >> 0));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Converts a class ID into its hexadecimal notation.</p>
|
||||||
|
*/
|
||||||
|
public static String hexEncode(final ClassID classID)
|
||||||
|
{
|
||||||
|
return hexEncode(classID.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Decodes the hexadecimal representation of a sequence of
|
||||||
|
* bytes into a byte array. Each character in the string
|
||||||
|
* represents a nibble (half byte) and must be one of the
|
||||||
|
* characters '0'-'9', 'A'-'F' or 'a'-'f'.</p>
|
||||||
|
*
|
||||||
|
* @param s The string to be decoded
|
||||||
|
*
|
||||||
|
* @return The bytes
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if the string does not contain
|
||||||
|
* a valid representation of a byte sequence.
|
||||||
|
*/
|
||||||
|
public static byte[] hexDecode(final String s)
|
||||||
|
{
|
||||||
|
final int length = s.length();
|
||||||
|
|
||||||
|
/* The string to be converted must have an even number of
|
||||||
|
characters. */
|
||||||
|
if (length % 2 == 1)
|
||||||
|
throw new IllegalArgumentException
|
||||||
|
("String has odd length " + length);
|
||||||
|
byte[] b = new byte[length / 2];
|
||||||
|
char[] c = new char[length];
|
||||||
|
s.toUpperCase().getChars(0, length, c, 0);
|
||||||
|
for (int i = 0; i < length; i += 2)
|
||||||
|
b[i/2] = (byte) (decodeNibble(c[i]) << 4 & 0xF0 |
|
||||||
|
decodeNibble(c[i+1]) & 0x0F);
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Decodes a nibble.</p>
|
||||||
|
*
|
||||||
|
* @param c A character in the range '0'-'9' or 'A'-'F'. Lower
|
||||||
|
* case is not supported here.
|
||||||
|
*
|
||||||
|
* @return The decoded nibble in the range 0-15
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if <em>c</em> is not a
|
||||||
|
* permitted character
|
||||||
|
*/
|
||||||
|
protected static byte decodeNibble(final char c)
|
||||||
|
{
|
||||||
|
for (byte i = 0; i < hexval.length; i++)
|
||||||
|
if ((byte) c == hexval[i])
|
||||||
|
return i;
|
||||||
|
throw new IllegalArgumentException("\"" + c + "\"" +
|
||||||
|
" does not represent a nibble.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>For testing.</p>
|
||||||
|
*/
|
||||||
|
public static void main(final String args[])
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
final BufferedReader in =
|
||||||
|
new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
String s;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
s = in.readLine();
|
||||||
|
if (s != null)
|
||||||
|
{
|
||||||
|
String bytes = hexEncode(s);
|
||||||
|
System.out.print("Hex encoded (String): ");
|
||||||
|
System.out.println(bytes);
|
||||||
|
System.out.print("Hex encoded (byte[]): ");
|
||||||
|
System.out.println(hexEncode(s.getBytes()));
|
||||||
|
System.out.print("Re-decoded (byte[]): ");
|
||||||
|
System.out.println(new String(hexDecode(bytes)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (s != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import org.apache.poi.poifs.filesystem.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Describes the most important (whatever that is) features of a
|
||||||
|
* {@link POIFSDocument}.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute (klute@rainer-klute.de)
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-02-05
|
||||||
|
* *
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
*/
|
||||||
|
public class DocumentDescriptor
|
||||||
|
{
|
||||||
|
String name;
|
||||||
|
POIFSDocumentPath path;
|
||||||
|
DocumentInputStream stream;
|
||||||
|
|
||||||
|
int size;
|
||||||
|
byte[] bytes;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Creates a {@link DocumentDescriptor}.</p>
|
||||||
|
*
|
||||||
|
* @param name The stream's name.
|
||||||
|
*
|
||||||
|
* @param path The stream's path in the POI filesystem hierarchy.
|
||||||
|
*
|
||||||
|
* @param stream The stream.
|
||||||
|
*
|
||||||
|
* @param nrOfBytes The maximum number of bytes to display in a
|
||||||
|
* dump starting at the beginning of the stream.
|
||||||
|
*/
|
||||||
|
public DocumentDescriptor(final String name,
|
||||||
|
final POIFSDocumentPath path,
|
||||||
|
final DocumentInputStream stream,
|
||||||
|
final int nrOfBytes)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.path = path;
|
||||||
|
this.stream = stream;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
size = stream.available();
|
||||||
|
if (stream.markSupported())
|
||||||
|
{
|
||||||
|
stream.mark(nrOfBytes);
|
||||||
|
final byte[] b = new byte[nrOfBytes];
|
||||||
|
final int read = stream.read(b, 0, Math.min(size, b.length));
|
||||||
|
bytes = new byte[read];
|
||||||
|
System.arraycopy(b, 0, bytes, 0, read);
|
||||||
|
stream.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
System.out.println(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.tree.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>{@link TreeCellRenderer} for a {@link DocumentDescriptor}. The
|
||||||
|
* renderer is extremly rudimentary since displays only the document's
|
||||||
|
* name, its size and its fist few bytes.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-02-05
|
||||||
|
*/
|
||||||
|
public class DocumentDescriptorRenderer extends DefaultTreeCellRenderer
|
||||||
|
{
|
||||||
|
|
||||||
|
public Component getTreeCellRendererComponent(final JTree tree,
|
||||||
|
final Object value,
|
||||||
|
final boolean selected,
|
||||||
|
final boolean expanded,
|
||||||
|
final boolean leaf,
|
||||||
|
final int row,
|
||||||
|
final boolean hasFocus)
|
||||||
|
{
|
||||||
|
final DocumentDescriptor d = (DocumentDescriptor)
|
||||||
|
((DefaultMutableTreeNode) value).getUserObject();
|
||||||
|
final JPanel p = new JPanel();
|
||||||
|
final JTextArea text = new JTextArea();
|
||||||
|
text.append(renderAsString(d));
|
||||||
|
text.setFont(new Font("Monospaced", Font.PLAIN, 10));
|
||||||
|
p.add(text);
|
||||||
|
if (selected)
|
||||||
|
Util.invert(text);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Renders {@link DocumentDescriptor} as a string.</p>
|
||||||
|
*/
|
||||||
|
protected String renderAsString(final DocumentDescriptor d)
|
||||||
|
{
|
||||||
|
final StringBuffer b = new StringBuffer();
|
||||||
|
b.append("Name: ");
|
||||||
|
b.append(d.name);
|
||||||
|
b.append(" (");
|
||||||
|
b.append(Codec.hexEncode(d.name));
|
||||||
|
b.append(") \n");
|
||||||
|
|
||||||
|
b.append("Size: ");
|
||||||
|
b.append(d.size);
|
||||||
|
b.append(" bytes\n");
|
||||||
|
|
||||||
|
b.append("First bytes: ");
|
||||||
|
b.append(Codec.hexEncode(d.bytes));
|
||||||
|
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,149 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.tree.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>This is a {@link TreeCellRenderer} implementation which is able
|
||||||
|
* to render arbitrary objects. The {@link ExtendableTreeCellRenderer}
|
||||||
|
* does not do the rendering itself but instead dispatches to
|
||||||
|
* class-specific renderers. A class/renderer pair must be registered
|
||||||
|
* using the {@link #register} method. If a class has no registered
|
||||||
|
* renderer, the renderer of its closest superclass is used. Since the
|
||||||
|
* {@link ExtendableTreeCellRenderer} always has a default renderer
|
||||||
|
* for the {@link Object} class, rendering is always possible. The
|
||||||
|
* default {@link Object} renderer can be replaced by another renderer
|
||||||
|
* but it cannot be unregistered.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-01-22
|
||||||
|
*/
|
||||||
|
public class ExtendableTreeCellRenderer implements TreeCellRenderer
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Maps classes to renderers.</p>
|
||||||
|
*/
|
||||||
|
protected Map renderers;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public ExtendableTreeCellRenderer()
|
||||||
|
{
|
||||||
|
renderers = new HashMap();
|
||||||
|
register(Object.class, new DefaultTreeCellRenderer()
|
||||||
|
{
|
||||||
|
public Component getTreeCellRendererComponent
|
||||||
|
(JTree tree, Object value, boolean selected,
|
||||||
|
boolean expanded, boolean leaf, int row, boolean hasFocus)
|
||||||
|
{
|
||||||
|
final String s = value.toString();
|
||||||
|
final JLabel l = new JLabel(s + " ");
|
||||||
|
if (selected)
|
||||||
|
{
|
||||||
|
Util.invert(l);
|
||||||
|
l.setOpaque(true);
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Registers a renderer for a class.</p>
|
||||||
|
**/
|
||||||
|
public void register(final Class c, final TreeCellRenderer renderer)
|
||||||
|
{
|
||||||
|
renderers.put(c, renderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Unregisters a renderer for a class. The renderer for the
|
||||||
|
* {@link Object} class cannot be unregistered.</p>
|
||||||
|
*/
|
||||||
|
public void unregister(final Class c)
|
||||||
|
{
|
||||||
|
if (c == Object.class)
|
||||||
|
throw new IllegalArgumentException
|
||||||
|
("Renderer for Object cannot be unregistered.");
|
||||||
|
renderers.put(c, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Renders an object in a tree cell depending of the object's
|
||||||
|
* class.</p>
|
||||||
|
*
|
||||||
|
* @see TreeCellRenderer#getTreeCellRendererComponent
|
||||||
|
*/
|
||||||
|
public Component getTreeCellRendererComponent
|
||||||
|
(final JTree tree, final Object value, final boolean selected,
|
||||||
|
final boolean expanded, final boolean leaf, final int row,
|
||||||
|
final boolean hasFocus)
|
||||||
|
{
|
||||||
|
final String NULL = "null";
|
||||||
|
TreeCellRenderer r;
|
||||||
|
Object userObject;
|
||||||
|
if (value == null)
|
||||||
|
userObject = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
userObject = ((DefaultMutableTreeNode) value).getUserObject();
|
||||||
|
if (userObject == null)
|
||||||
|
userObject = NULL;
|
||||||
|
}
|
||||||
|
r = findRenderer(userObject.getClass());
|
||||||
|
return r.getTreeCellRendererComponent
|
||||||
|
(tree, value, selected, expanded, leaf, row,
|
||||||
|
hasFocus);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Find the renderer for the specified class.</p>
|
||||||
|
*/
|
||||||
|
protected TreeCellRenderer findRenderer(final Class c)
|
||||||
|
{
|
||||||
|
final TreeCellRenderer r = (TreeCellRenderer) renderers.get(c);
|
||||||
|
if (r != null)
|
||||||
|
/* The class has a renderer. */
|
||||||
|
return r;
|
||||||
|
|
||||||
|
/* The class has no renderer, try the superclass, if any. */
|
||||||
|
final Class superclass = c.getSuperclass();
|
||||||
|
if (superclass != null)
|
||||||
|
return findRenderer(superclass);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,136 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.awt.event.WindowAdapter;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.JTree;
|
||||||
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
import javax.swing.tree.DefaultTreeModel;
|
||||||
|
import javax.swing.tree.MutableTreeNode;
|
||||||
|
|
||||||
|
import org.apache.poi.poifs.eventfilesystem.POIFSReader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>The main class of the POI Browser. It shows the structure of POI
|
||||||
|
* filesystems (Microsoft Office documents) in a {@link
|
||||||
|
* JTree}. Specify their filenames on the command line!</p>
|
||||||
|
*
|
||||||
|
* @see POIFSReader
|
||||||
|
*
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-01-19
|
||||||
|
*/
|
||||||
|
public class POIBrowser extends JFrame
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>The tree's root node must be visible to all methods.</p>
|
||||||
|
*/
|
||||||
|
protected MutableTreeNode rootNode;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Takes a bunch of file names as command line parameters,
|
||||||
|
* opens each of them as a POI filesystem and displays their
|
||||||
|
* internal structures in a {@link JTree}.</p>
|
||||||
|
*/
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
new POIBrowser().run(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected void run(String[] args)
|
||||||
|
{
|
||||||
|
addWindowListener(new WindowAdapter()
|
||||||
|
{
|
||||||
|
public void windowClosing(WindowEvent e)
|
||||||
|
{
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Create the tree model with a root node. The latter is
|
||||||
|
* invisible but it must be present because a tree model
|
||||||
|
* always needs a root. */
|
||||||
|
rootNode = new DefaultMutableTreeNode("POI Filesystems");
|
||||||
|
DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
|
||||||
|
|
||||||
|
/* Create the tree UI element. */
|
||||||
|
final JTree treeUI = new JTree(treeModel);
|
||||||
|
getContentPane().add(new JScrollPane(treeUI));
|
||||||
|
|
||||||
|
/* Add the POI filesystems to the tree. */
|
||||||
|
int displayedFiles = 0;
|
||||||
|
for (int i = 0; i < args.length; i++)
|
||||||
|
{
|
||||||
|
final String filename = args[i];
|
||||||
|
try
|
||||||
|
{
|
||||||
|
POIFSReader r = new POIFSReader();
|
||||||
|
r.registerListener(new TreeReaderListener(filename, rootNode));
|
||||||
|
r.read(new FileInputStream(filename));
|
||||||
|
displayedFiles++;
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
System.err.println(filename + ": " + ex);
|
||||||
|
}
|
||||||
|
catch (Throwable t)
|
||||||
|
{
|
||||||
|
System.err.println("Unexpected exception while reading \"" +
|
||||||
|
filename + "\":");
|
||||||
|
t.printStackTrace(System.err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Exit if there is no file to display (none specified or only
|
||||||
|
* files with problems). */
|
||||||
|
if (displayedFiles == 0)
|
||||||
|
{
|
||||||
|
System.out.println("No POI filesystem(s) to display.");
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make the tree UI element visible. */
|
||||||
|
treeUI.setRootVisible(true);
|
||||||
|
treeUI.setShowsRootHandles(true);
|
||||||
|
ExtendableTreeCellRenderer etcr = new ExtendableTreeCellRenderer();
|
||||||
|
etcr.register(DocumentDescriptor.class,
|
||||||
|
new DocumentDescriptorRenderer());
|
||||||
|
etcr.register(PropertySetDescriptor.class,
|
||||||
|
new PropertySetDescriptorRenderer());
|
||||||
|
treeUI.setCellRenderer(etcr);
|
||||||
|
setSize(600, 450);
|
||||||
|
setTitle("POI Browser 0.09");
|
||||||
|
setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
|
||||||
|
import org.apache.poi.hpsf.MarkUnsupportedException;
|
||||||
|
import org.apache.poi.hpsf.NoPropertySetStreamException;
|
||||||
|
import org.apache.poi.hpsf.PropertySet;
|
||||||
|
import org.apache.poi.hpsf.PropertySetFactory;
|
||||||
|
import org.apache.poi.poifs.filesystem.DocumentInputStream;
|
||||||
|
import org.apache.poi.poifs.filesystem.POIFSDocumentPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Describes the most important (whatever that is) features of a
|
||||||
|
* stream containing a {@link PropertySet}.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute (klute@rainer-klute.de)
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-02-05
|
||||||
|
*/
|
||||||
|
public class PropertySetDescriptor extends DocumentDescriptor
|
||||||
|
{
|
||||||
|
|
||||||
|
protected PropertySet propertySet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Returns this {@link PropertySetDescriptor}'s {@link
|
||||||
|
* PropertySet}.</p>
|
||||||
|
*/
|
||||||
|
public PropertySet getPropertySet()
|
||||||
|
{
|
||||||
|
return propertySet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Creates a {@link PropertySetDescriptor} by reading a {@link
|
||||||
|
* PropertySet} from a {@link DocumentInputStream}.</p>
|
||||||
|
*
|
||||||
|
* @param name The stream's name.
|
||||||
|
*
|
||||||
|
* @param path The stream's path in the POI filesystem hierarchy.
|
||||||
|
*
|
||||||
|
* @param stream The stream.
|
||||||
|
*
|
||||||
|
* @param nrOfBytesToDump The maximum number of bytes to display in a
|
||||||
|
* dump starting at the beginning of the stream.
|
||||||
|
*/
|
||||||
|
public PropertySetDescriptor(final String name,
|
||||||
|
final POIFSDocumentPath path,
|
||||||
|
final DocumentInputStream stream,
|
||||||
|
final int nrOfBytesToDump)
|
||||||
|
throws NoPropertySetStreamException,
|
||||||
|
MarkUnsupportedException, UnsupportedEncodingException,
|
||||||
|
IOException
|
||||||
|
{
|
||||||
|
super(name, path, stream, nrOfBytesToDump);
|
||||||
|
propertySet = PropertySetFactory.create(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,175 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.JTree;
|
||||||
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
|
||||||
|
import org.apache.poi.hpsf.Property;
|
||||||
|
import org.apache.poi.hpsf.PropertySet;
|
||||||
|
import org.apache.poi.hpsf.Section;
|
||||||
|
import org.apache.poi.hpsf.SummaryInformation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Renders a {@link PropertySetDescriptor} by more or less dumping
|
||||||
|
* the stuff into a {@link JTextArea}.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-02-05
|
||||||
|
*/
|
||||||
|
public class PropertySetDescriptorRenderer extends DocumentDescriptorRenderer
|
||||||
|
{
|
||||||
|
|
||||||
|
public Component getTreeCellRendererComponent(final JTree tree,
|
||||||
|
final Object value,
|
||||||
|
final boolean selected,
|
||||||
|
final boolean expanded,
|
||||||
|
final boolean leaf,
|
||||||
|
final int row,
|
||||||
|
final boolean hasFocus)
|
||||||
|
{
|
||||||
|
final PropertySetDescriptor d = (PropertySetDescriptor)
|
||||||
|
((DefaultMutableTreeNode) value).getUserObject();
|
||||||
|
final PropertySet ps = d.getPropertySet();
|
||||||
|
final JPanel p = new JPanel();
|
||||||
|
final JTextArea text = new JTextArea();
|
||||||
|
text.setBackground(new Color(200, 255, 200));
|
||||||
|
text.setFont(new Font("Monospaced", Font.PLAIN, 10));
|
||||||
|
text.append(renderAsString(d));
|
||||||
|
text.append("\nByte order: " +
|
||||||
|
Codec.hexEncode((short) ps.getByteOrder()));
|
||||||
|
text.append("\nFormat: " +
|
||||||
|
Codec.hexEncode((short) ps.getFormat()));
|
||||||
|
text.append("\nOS version: " +
|
||||||
|
Codec.hexEncode(ps.getOSVersion()));
|
||||||
|
text.append("\nClass ID: " +
|
||||||
|
Codec.hexEncode(ps.getClassID()));
|
||||||
|
text.append("\nSection count: " + ps.getSectionCount());
|
||||||
|
text.append(sectionsToString(ps.getSections()));
|
||||||
|
p.add(text);
|
||||||
|
|
||||||
|
if (ps instanceof SummaryInformation)
|
||||||
|
{
|
||||||
|
/* Use the convenience methods. */
|
||||||
|
final SummaryInformation si = (SummaryInformation) ps;
|
||||||
|
text.append("\n");
|
||||||
|
text.append("\nTitle: " + si.getTitle());
|
||||||
|
text.append("\nSubject: " + si.getSubject());
|
||||||
|
text.append("\nAuthor: " + si.getAuthor());
|
||||||
|
text.append("\nKeywords: " + si.getKeywords());
|
||||||
|
text.append("\nComments: " + si.getComments());
|
||||||
|
text.append("\nTemplate: " + si.getTemplate());
|
||||||
|
text.append("\nLast Author: " + si.getLastAuthor());
|
||||||
|
text.append("\nRev. Number: " + si.getRevNumber());
|
||||||
|
text.append("\nEdit Time: " + si.getEditTime());
|
||||||
|
text.append("\nLast Printed: " + si.getLastPrinted());
|
||||||
|
text.append("\nCreate Date/Time: " + si.getCreateDateTime());
|
||||||
|
text.append("\nLast Save Date/Time: " + si.getLastSaveDateTime());
|
||||||
|
text.append("\nPage Count: " + si.getPageCount());
|
||||||
|
text.append("\nWord Count: " + si.getWordCount());
|
||||||
|
text.append("\nChar Count: " + si.getCharCount());
|
||||||
|
// text.append("\nThumbnail: " + si.getThumbnail());
|
||||||
|
text.append("\nApplication Name: " + si.getApplicationName());
|
||||||
|
text.append("\nSecurity: " + si.getSecurity());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selected)
|
||||||
|
Util.invert(text);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Returns a string representation of a list of {@link
|
||||||
|
* Section}s.</p>
|
||||||
|
*/
|
||||||
|
protected String sectionsToString(final List sections)
|
||||||
|
{
|
||||||
|
final StringBuffer b = new StringBuffer();
|
||||||
|
int count = 1;
|
||||||
|
for (Iterator i = sections.iterator(); i.hasNext();)
|
||||||
|
{
|
||||||
|
Section s = (Section) i.next();
|
||||||
|
String d = toString(s, "Section " + count++);
|
||||||
|
b.append(d);
|
||||||
|
}
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Returns a string representation of a {@link Section}.</p>
|
||||||
|
* @param s the section
|
||||||
|
* @param name the section's name
|
||||||
|
* @return a string representation of the {@link Section}
|
||||||
|
*/
|
||||||
|
protected String toString(final Section s, final String name)
|
||||||
|
{
|
||||||
|
final StringBuffer b = new StringBuffer();
|
||||||
|
b.append("\n" + name + " Format ID: ");
|
||||||
|
b.append(Codec.hexEncode(s.getFormatID()));
|
||||||
|
b.append("\n" + name + " Offset: " + s.getOffset());
|
||||||
|
b.append("\n" + name + " Section size: " + s.getSize());
|
||||||
|
b.append("\n" + name + " Property count: " + s.getPropertyCount());
|
||||||
|
|
||||||
|
final Property[] properties = s.getProperties();
|
||||||
|
for (int i = 0; i < properties.length; i++)
|
||||||
|
{
|
||||||
|
final Property p = properties[i];
|
||||||
|
final long id = p.getID();
|
||||||
|
final long type = p.getType();
|
||||||
|
final Object value = p.getValue();
|
||||||
|
b.append('\n');
|
||||||
|
b.append(name);
|
||||||
|
b.append(", Name: ");
|
||||||
|
b.append(id);
|
||||||
|
b.append(" (");
|
||||||
|
b.append(s.getPIDString(id));
|
||||||
|
b.append("), Type: ");
|
||||||
|
b.append(type);
|
||||||
|
b.append(", Value: ");
|
||||||
|
if (value instanceof byte[])
|
||||||
|
{
|
||||||
|
byte[] b2 = (byte[]) value;
|
||||||
|
b.append("0x" + Codec.hexEncode(b2, 0, 4));
|
||||||
|
b.append(' ');
|
||||||
|
b.append("0x" + Codec.hexEncode(b2, 4, b2.length - 4));
|
||||||
|
}
|
||||||
|
else if (value != null)
|
||||||
|
b.append(value.toString());
|
||||||
|
else
|
||||||
|
b.append("null");
|
||||||
|
}
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,238 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
import javax.swing.tree.MutableTreeNode;
|
||||||
|
|
||||||
|
import org.apache.poi.hpsf.HPSFException;
|
||||||
|
import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
|
||||||
|
import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
|
||||||
|
import org.apache.poi.poifs.filesystem.DocumentInputStream;
|
||||||
|
import org.apache.poi.poifs.filesystem.POIFSDocumentPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Organizes document information in a tree model in order to be
|
||||||
|
* e.g. displayed in a Swing {@link javax.swing.JTree}. An instance of this
|
||||||
|
* class is created with a root tree node ({@link MutableTreeNode}) and
|
||||||
|
* registered as a {@link POIFSReaderListener} with a {@link
|
||||||
|
* org.apache.poi.poifs.eventfilesystem.POIFSReader}. While the latter processes
|
||||||
|
* a POI filesystem it calls this class' {@link #processPOIFSReaderEvent} for
|
||||||
|
* each document it has been registered for. This method appends the document it
|
||||||
|
* processes at the appropriate position into the tree rooted at the
|
||||||
|
* above mentioned root tree node.</p>
|
||||||
|
*
|
||||||
|
* <p>The root tree node should be the root tree node of a {@link
|
||||||
|
* javax.swing.tree.TreeModel}.</p>
|
||||||
|
*
|
||||||
|
* <p>A top-level element in the tree model, i.e. an immediate child
|
||||||
|
* node of the root node, describes a POI filesystem as such. It is
|
||||||
|
* suggested to use the file's name (as seen by the operating system)
|
||||||
|
* but it could be any other string.</p>
|
||||||
|
*
|
||||||
|
* <p>The value of a tree node is a {@link DocumentDescriptor}. Unlike
|
||||||
|
* a {@link org.apache.poi.poifs.filesystem.POIFSDocument} which may be as heavy
|
||||||
|
* as many megabytes, an instance of {@link DocumentDescriptor} is a
|
||||||
|
* light-weight object and contains only some meta-information about a
|
||||||
|
* document.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-01-24
|
||||||
|
*/
|
||||||
|
public class TreeReaderListener implements POIFSReaderListener
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>The tree's root node. POI filesystems get attached to this
|
||||||
|
* node as children.</p>
|
||||||
|
*/
|
||||||
|
protected MutableTreeNode rootNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Maps filenames and POI document paths to their associated
|
||||||
|
* tree nodes.</p>
|
||||||
|
*/
|
||||||
|
protected Map pathToNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>The name of the file this {@link TreeReaderListener}
|
||||||
|
* processes. It is used to identify a top-level element in the
|
||||||
|
* tree. Alternatively any other string can be used. It is just a
|
||||||
|
* label which should identify a POI filesystem.</p>
|
||||||
|
*/
|
||||||
|
protected String filename;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Creates a {@link TreeReaderListener} which should then be
|
||||||
|
* registered with a
|
||||||
|
* {@link org.apache.poi.poifs.eventfilesystem.POIFSReader}.</p>
|
||||||
|
*
|
||||||
|
* @param filename The name of the POI filesystem, i.e. the name
|
||||||
|
* of the file the POI filesystem resides in. Alternatively any
|
||||||
|
* other string can be used.
|
||||||
|
*
|
||||||
|
* @param rootNode All document information will be attached as
|
||||||
|
* descendands to this tree node.
|
||||||
|
*/
|
||||||
|
public TreeReaderListener(final String filename,
|
||||||
|
final MutableTreeNode rootNode)
|
||||||
|
{
|
||||||
|
this.filename = filename;
|
||||||
|
this.rootNode = rootNode;
|
||||||
|
pathToNode = new HashMap(15); // Should be a reasonable guess.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** <p>The number of bytes to dump.</p> */
|
||||||
|
private int nrOfBytes = 50;
|
||||||
|
|
||||||
|
public void setNrOfBytes(final int nrOfBytes)
|
||||||
|
{
|
||||||
|
this.nrOfBytes = nrOfBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNrOfBytes()
|
||||||
|
{
|
||||||
|
return nrOfBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>A document in the POI filesystem has been opened for
|
||||||
|
* reading. This method retrieves properties of the document and
|
||||||
|
* adds them to a tree model.</p>
|
||||||
|
*/
|
||||||
|
public void processPOIFSReaderEvent(final POIFSReaderEvent event)
|
||||||
|
{
|
||||||
|
DocumentDescriptor d;
|
||||||
|
final DocumentInputStream is = event.getStream();
|
||||||
|
if (!is.markSupported())
|
||||||
|
throw new UnsupportedOperationException(is.getClass().getName() +
|
||||||
|
" does not support mark().");
|
||||||
|
|
||||||
|
/* Try do handle this document as a property set. We receive
|
||||||
|
* an exception if is no property set and handle it as a
|
||||||
|
* document of some other format. We are not concerned about
|
||||||
|
* that document's details. */
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d = new PropertySetDescriptor(event.getName(), event.getPath(),
|
||||||
|
is, nrOfBytes);
|
||||||
|
}
|
||||||
|
catch (HPSFException ex)
|
||||||
|
{
|
||||||
|
d = new DocumentDescriptor(event.getName(), event.getPath(),
|
||||||
|
is, nrOfBytes);
|
||||||
|
}
|
||||||
|
catch (Throwable t)
|
||||||
|
{
|
||||||
|
System.err.println
|
||||||
|
("Unexpected exception while processing " +
|
||||||
|
event.getName() + " in " + event.getPath().toString());
|
||||||
|
t.printStackTrace(System.err);
|
||||||
|
throw new RuntimeException(t.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
is.close();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.err.println
|
||||||
|
("Unexpected exception while closing " +
|
||||||
|
event.getName() + " in " + event.getPath().toString());
|
||||||
|
ex.printStackTrace(System.err);
|
||||||
|
}
|
||||||
|
|
||||||
|
final MutableTreeNode parentNode = getNode(d.path, filename, rootNode);
|
||||||
|
final MutableTreeNode nameNode = new DefaultMutableTreeNode(d.name);
|
||||||
|
parentNode.insert(nameNode, 0);
|
||||||
|
final MutableTreeNode dNode = new DefaultMutableTreeNode(d);
|
||||||
|
nameNode.insert(dNode, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Locates the parent node for a document entry in the tree
|
||||||
|
* model. If the parent node does not yet exist it will be
|
||||||
|
* created, too. This is done recursively, if needed.</p>
|
||||||
|
*
|
||||||
|
* @param path The tree node for this path is located.
|
||||||
|
*
|
||||||
|
* @param fsName The name of the POI filesystem. This is just a
|
||||||
|
* string which is displayed in the tree at the top lovel.
|
||||||
|
*
|
||||||
|
* @param root The root node.
|
||||||
|
*/
|
||||||
|
private MutableTreeNode getNode(final POIFSDocumentPath path,
|
||||||
|
final String fsName,
|
||||||
|
final MutableTreeNode root)
|
||||||
|
{
|
||||||
|
MutableTreeNode n = (MutableTreeNode) pathToNode.get(path);
|
||||||
|
if (n != null)
|
||||||
|
/* Node found in map, just return it. */
|
||||||
|
return n;
|
||||||
|
if (path.length() == 0)
|
||||||
|
{
|
||||||
|
/* This is the root path of the POI filesystem. Its tree
|
||||||
|
* node is resp. must be located below the tree node of
|
||||||
|
* the POI filesystem itself. This is a tree node with the
|
||||||
|
* POI filesystem's name (this the operating system file's
|
||||||
|
* name) as its key it the path-to-node map. */
|
||||||
|
n = (MutableTreeNode) pathToNode.get(fsName);
|
||||||
|
if (n == null)
|
||||||
|
{
|
||||||
|
/* A tree node for the POI filesystem does not yet
|
||||||
|
* exist. */
|
||||||
|
n = new DefaultMutableTreeNode(fsName);
|
||||||
|
pathToNode.put(fsName, n);
|
||||||
|
root.insert(n, 0);
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* The path is somewhere down in the POI filesystem's
|
||||||
|
* hierarchy. We need the tree node of this path's parent
|
||||||
|
* and attach our new node to it. */
|
||||||
|
final String name = path.getComponent(path.length() - 1);
|
||||||
|
final POIFSDocumentPath parentPath = path.getParent();
|
||||||
|
final MutableTreeNode parentNode =
|
||||||
|
getNode(parentPath, fsName, root);
|
||||||
|
n = new DefaultMutableTreeNode(name);
|
||||||
|
pathToNode.put(path, n);
|
||||||
|
parentNode.insert(n, 0);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
51
src/contrib/src/org/apache/poi/contrib/poibrowser/Util.java
Normal file
51
src/contrib/src/org/apache/poi/contrib/poibrowser/Util.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.contrib.poibrowser;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Contains various (well, just one at the moment) static utility
|
||||||
|
* methods.</p>
|
||||||
|
*
|
||||||
|
* @author Rainer Klute <a
|
||||||
|
* href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
|
||||||
|
* @version $Id$
|
||||||
|
* @since 2002-01-25
|
||||||
|
*/
|
||||||
|
public class Util
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Makes a Swing component inverted by swapping its foreground
|
||||||
|
* and background colors. Hint: Depending on your needs it might
|
||||||
|
* also be a good idea to call <tt>c.setOpaque(true)</tt>.</p>
|
||||||
|
*/
|
||||||
|
public static void invert(final JComponent c)
|
||||||
|
{
|
||||||
|
final Color invBackground = c.getForeground();
|
||||||
|
final Color invForeground = c.getBackground();
|
||||||
|
c.setBackground(invBackground);
|
||||||
|
c.setForeground(invForeground);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
127
src/contrib/src/org/apache/poi/contrib/poibrowser/package.html
Normal file
127
src/contrib/src/org/apache/poi/contrib/poibrowser/package.html
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<!doctype html public "-//W3C//DTD HTML 4.0//EN//">
|
||||||
|
<!--
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
-->
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<p>The <strong>POI Browser</strong> is a very simple Swing GUI tool that
|
||||||
|
displays the internal structure of a Microsoft Office file. It concentrates
|
||||||
|
on streams in the <em>Horrible Property Set Format (HPSF)</em>. In order to
|
||||||
|
access these streams the POI Browser uses the package
|
||||||
|
<tt>org.apache.poi.hpsf</tt>.</p>
|
||||||
|
|
||||||
|
<p>A file in Microsoft's Office format can be seen as a filesystem within a
|
||||||
|
file. For example, a Word document like <var>sample.doc</var> is just a
|
||||||
|
simple file from the operation system's point of view. However, internally
|
||||||
|
it is organized into various directories and files. For example,
|
||||||
|
<var>sample.doc</var> might consist of the three internal files (or
|
||||||
|
"streams", as Microsoft calls them) <tt>\001CompObj</tt>,
|
||||||
|
<tt>\005SummaryInformation</tt>, and <tt>WordDocument</tt>. (In these names
|
||||||
|
\001 and \005 denote the unprintable characters with the character codes 1
|
||||||
|
and 5, respectively.) A more complicated Word file typically contains a
|
||||||
|
directory named <tt>ObjectPool</tt> with more directories and files nested
|
||||||
|
within it.</p>
|
||||||
|
|
||||||
|
<p>The POI Browser makes these internal structures visible. It takes one or
|
||||||
|
more Microsoft files as input on the command line and shows directories and
|
||||||
|
files in a tree-like structure. On the top-level POI Browser displays the
|
||||||
|
(operating system) filenames. An internal file (i.e. a "stream" or a
|
||||||
|
"document") is shown with its name, its size and a hexadecimal dump of its
|
||||||
|
first bytes.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Property Set Streams</h3>
|
||||||
|
|
||||||
|
<p>The POI Browser pays special attention to property set streams. For
|
||||||
|
example, the <tt>\005SummaryInformation</tt> stream contains information
|
||||||
|
like title and author of the document. The POI Browser opens every stream
|
||||||
|
in a POI filesystem. If it encounters a property set stream, it displays
|
||||||
|
not just its first bytes but analyses the whole stream and displays its
|
||||||
|
contents in a more or less readable manner.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Running POI Browser</h3>
|
||||||
|
|
||||||
|
<p>Running the POI Browser requires you to start a Java Virtual Machine
|
||||||
|
(JVM) and to set up a valid classpath so that the JVM can find all the Java
|
||||||
|
classes it needs. These are the main POI classes and the "contrib" POI
|
||||||
|
classes.</p>
|
||||||
|
|
||||||
|
<p>The following instructions assume that you have set up your Java
|
||||||
|
enviromnent variables properly, i.e. the variable JAVA_HOME contains the
|
||||||
|
name of your Java installation directory and the variable PATH includes the
|
||||||
|
<var>bin</var> subdirectory of the Java installation directory. At the time
|
||||||
|
of this writing the current POI version was 2.5.1-final dating from August
|
||||||
|
4th, 2004. The example statements reflect version numbering and
|
||||||
|
date. Change the commands accordingly if you are running the POI Browser of
|
||||||
|
a later or earlier than this!</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>Running POI Browser on Unix</h4>
|
||||||
|
|
||||||
|
<p>Suppose you have unpacked the POI 2.5.1 release in the
|
||||||
|
<var>/opt/local/poi</var> directory of your Unix box. Then the following
|
||||||
|
command starts the POI Browser and displays the structure of the files
|
||||||
|
<var>MyWord.doc</var>, <var>MyExcel.xls</var> and
|
||||||
|
<var>MyPowerpoint.ppt</var>:</p>
|
||||||
|
|
||||||
|
<pre>java -classpath /opt/local/poi/poi-2.5.1-final-20040804.jar:/opt/local/poi/poi-contrib-2.5.1-final-20040804.jar org.apache.poi.contrib.poibrowser.POIBrowser MyWord.doc MyExcel.xls MyPowerpoint.ppt</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h4>Running POI Browser on Windows</h4>
|
||||||
|
|
||||||
|
<p>Suppose you have unpacked the POI 2.5.1 release in the
|
||||||
|
<var>C:\Programs\POI</var> directory of your Windows box. Then the following
|
||||||
|
command starts the POI Browser and displays the structure of the files
|
||||||
|
<var>MyWord.doc</var>, <var>MyExcel.xls</var> and
|
||||||
|
<var>MyPowerpoint.ppt</var>:</p>
|
||||||
|
|
||||||
|
<pre>java -classpath C:\Programs\POI\poi-2.5.1-final-20040804.jar;C:\Programs\POI\poi-contrib-2.5.1-final-20040804.jar org.apache.poi.contrib.poibrowser.POIBrowser MyWord.doc MyExcel.xls MyPowerpoint.ppt</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<!-- Keep this comment at the end of the file
|
||||||
|
Local variables:
|
||||||
|
sgml-default-dtd-file:"HTML_4.0_Strict.ced"
|
||||||
|
mode: html
|
||||||
|
sgml-omittag:t
|
||||||
|
sgml-shorttag:nil
|
||||||
|
sgml-namecase-general:t
|
||||||
|
sgml-general-insert-case:lower
|
||||||
|
sgml-minimize-attributes:nil
|
||||||
|
sgml-always-quote-attributes:t
|
||||||
|
sgml-indent-step:1
|
||||||
|
sgml-indent-data:t
|
||||||
|
sgml-parent-document:nil
|
||||||
|
sgml-exposed-tags:nil
|
||||||
|
sgml-local-catalogs:nil
|
||||||
|
sgml-local-ecat-files:nil
|
||||||
|
End:
|
||||||
|
-->
|
564
src/contrib/src/org/apache/poi/hssf/contrib/view/SVBorder.java
Normal file
564
src/contrib/src/org/apache/poi/hssf/contrib/view/SVBorder.java
Normal file
@ -0,0 +1,564 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
import javax.swing.border.AbstractBorder;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is an attempt to implement Excel style borders for the SheetViewer.
|
||||||
|
* Mostly just overrides stuff so the javadoc won't appear here but will
|
||||||
|
* appear in the generated stuff.
|
||||||
|
*
|
||||||
|
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||||
|
* @author Jason Height
|
||||||
|
*/
|
||||||
|
public class SVBorder extends AbstractBorder {
|
||||||
|
private Color northColor = null;
|
||||||
|
private Color eastColor = null;
|
||||||
|
private Color southColor = null;
|
||||||
|
private Color westColor = null;
|
||||||
|
private int northBorderType = HSSFCellStyle.BORDER_NONE;
|
||||||
|
private int eastBorderType =HSSFCellStyle.BORDER_NONE;
|
||||||
|
private int southBorderType = HSSFCellStyle.BORDER_NONE;
|
||||||
|
private int westBorderType = HSSFCellStyle.BORDER_NONE;
|
||||||
|
private boolean northBorder=false;
|
||||||
|
private boolean eastBorder=false;
|
||||||
|
private boolean southBorder=false;
|
||||||
|
private boolean westBorder=false;
|
||||||
|
private boolean selected = false;
|
||||||
|
|
||||||
|
public void setBorder(Color northColor, Color eastColor,
|
||||||
|
Color southColor, Color westColor,
|
||||||
|
int northBorderType, int eastBorderType,
|
||||||
|
int southBorderType, int westBorderType,
|
||||||
|
boolean selected) {
|
||||||
|
this.eastColor = eastColor;
|
||||||
|
this.southColor = southColor;
|
||||||
|
this.westColor = westColor;
|
||||||
|
this.northBorderType = northBorderType;
|
||||||
|
this.eastBorderType = eastBorderType;
|
||||||
|
this.southBorderType = southBorderType;
|
||||||
|
this.westBorderType = westBorderType;
|
||||||
|
this.northBorder=northBorderType != HSSFCellStyle.BORDER_NONE;
|
||||||
|
this.eastBorder=eastBorderType != HSSFCellStyle.BORDER_NONE;
|
||||||
|
this.southBorder=southBorderType != HSSFCellStyle.BORDER_NONE;
|
||||||
|
this.westBorder=westBorderType != HSSFCellStyle.BORDER_NONE;
|
||||||
|
this.selected = selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintBorder(Component c, Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
Color oldColor = g.getColor();
|
||||||
|
|
||||||
|
|
||||||
|
paintSelectedBorder(g, x, y, width, height);
|
||||||
|
paintNormalBorders(g, x, y, width, height);
|
||||||
|
paintDottedBorders(g, x, y, width, height);
|
||||||
|
paintDashedBorders(g, x, y, width, height);
|
||||||
|
paintDoubleBorders(g, x, y, width, height);
|
||||||
|
paintDashDotDotBorders(g, x, y, width, height);
|
||||||
|
|
||||||
|
|
||||||
|
g.setColor(oldColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by paintBorder to paint the border of a selected cell.
|
||||||
|
* The paramaters are the Graphics object, location and dimensions of the
|
||||||
|
* cell.
|
||||||
|
*/
|
||||||
|
private void paintSelectedBorder(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
if (selected) {
|
||||||
|
//Need to setup thickness of 2
|
||||||
|
g.setColor(Color.black);
|
||||||
|
//paint the border
|
||||||
|
g.drawRect(x,y,width-1,height-1);
|
||||||
|
|
||||||
|
//paint the filled rectangle at the bottom left hand position
|
||||||
|
g.fillRect(x+width-5, y+height-5, 5, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by paintBorder to paint the various versions of normal line
|
||||||
|
* borders for a cell.
|
||||||
|
*/
|
||||||
|
private void paintNormalBorders(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
|
||||||
|
if (northBorder &&
|
||||||
|
((northBorderType == HSSFCellStyle.BORDER_THIN) ||
|
||||||
|
(northBorderType == HSSFCellStyle.BORDER_MEDIUM) ||
|
||||||
|
(northBorderType == HSSFCellStyle.BORDER_THICK)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(northBorderType);
|
||||||
|
|
||||||
|
g.setColor(northColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
g.drawLine(x,y+k,width,y+k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eastBorder &&
|
||||||
|
((eastBorderType == HSSFCellStyle.BORDER_THIN) ||
|
||||||
|
(eastBorderType == HSSFCellStyle.BORDER_MEDIUM) ||
|
||||||
|
(eastBorderType == HSSFCellStyle.BORDER_THICK)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(eastBorderType);
|
||||||
|
|
||||||
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
g.drawLine(width-k,y,width-k,height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (southBorder &&
|
||||||
|
((southBorderType == HSSFCellStyle.BORDER_THIN) ||
|
||||||
|
(southBorderType == HSSFCellStyle.BORDER_MEDIUM) ||
|
||||||
|
(southBorderType == HSSFCellStyle.BORDER_THICK)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(southBorderType);
|
||||||
|
|
||||||
|
g.setColor(southColor);
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
g.drawLine(x,height - k,width,height - k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (westBorder &&
|
||||||
|
((westBorderType == HSSFCellStyle.BORDER_THIN) ||
|
||||||
|
(westBorderType == HSSFCellStyle.BORDER_MEDIUM) ||
|
||||||
|
(westBorderType == HSSFCellStyle.BORDER_THICK)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(westBorderType);
|
||||||
|
|
||||||
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
g.drawLine(x+k,y,x+k,height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by paintBorder to paint the dotted line
|
||||||
|
* borders for a cell.
|
||||||
|
*/
|
||||||
|
private void paintDottedBorders(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
if (northBorder &&
|
||||||
|
northBorderType == HSSFCellStyle.BORDER_DOTTED) {
|
||||||
|
int thickness = getThickness(northBorderType);
|
||||||
|
|
||||||
|
g.setColor(northColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int xc = x; xc < width; xc=xc+2) {
|
||||||
|
g.drawLine(xc,y+k,xc,y+k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eastBorder &&
|
||||||
|
eastBorderType == HSSFCellStyle.BORDER_DOTTED
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(eastBorderType);
|
||||||
|
thickness++; //need for dotted borders to show up east
|
||||||
|
|
||||||
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int yc=y;yc < height; yc=yc+2) {
|
||||||
|
g.drawLine(width-k,yc,width-k,yc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (southBorder &&
|
||||||
|
southBorderType == HSSFCellStyle.BORDER_DOTTED
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(southBorderType);
|
||||||
|
thickness++;
|
||||||
|
g.setColor(southColor);
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int xc = x; xc < width; xc=xc+2) {
|
||||||
|
g.drawLine(xc,height-k,xc,height-k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (westBorder &&
|
||||||
|
westBorderType == HSSFCellStyle.BORDER_DOTTED
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(westBorderType);
|
||||||
|
// thickness++;
|
||||||
|
|
||||||
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int yc=y;yc < height; yc=yc+2) {
|
||||||
|
g.drawLine(x+k,yc,x+k,yc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by paintBorder to paint the various versions of dotted line
|
||||||
|
* borders for a cell.
|
||||||
|
*/
|
||||||
|
private void paintDashedBorders(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
if (northBorder &&
|
||||||
|
((northBorderType == HSSFCellStyle.BORDER_DASHED) ||
|
||||||
|
(northBorderType == HSSFCellStyle.BORDER_HAIR))
|
||||||
|
) {
|
||||||
|
int thickness = getThickness(northBorderType);
|
||||||
|
|
||||||
|
int dashlength = 1;
|
||||||
|
|
||||||
|
if (northBorderType == HSSFCellStyle.BORDER_DASHED)
|
||||||
|
dashlength = 2;
|
||||||
|
|
||||||
|
g.setColor(northColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int xc = x; xc < width; xc=xc+5) {
|
||||||
|
g.drawLine(xc,y+k,xc+dashlength,y+k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eastBorder &&
|
||||||
|
((eastBorderType == HSSFCellStyle.BORDER_DASHED) ||
|
||||||
|
(eastBorderType == HSSFCellStyle.BORDER_HAIR))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(eastBorderType);
|
||||||
|
thickness++; //need for dotted borders to show up east
|
||||||
|
|
||||||
|
|
||||||
|
int dashlength = 1;
|
||||||
|
|
||||||
|
if (eastBorderType == HSSFCellStyle.BORDER_DASHED)
|
||||||
|
dashlength = 2;
|
||||||
|
|
||||||
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int yc=y;yc < height; yc=yc+5) {
|
||||||
|
g.drawLine(width-k,yc,width-k,yc+dashlength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (southBorder &&
|
||||||
|
((southBorderType == HSSFCellStyle.BORDER_DASHED) ||
|
||||||
|
(southBorderType == HSSFCellStyle.BORDER_HAIR))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(southBorderType);
|
||||||
|
thickness++;
|
||||||
|
|
||||||
|
int dashlength = 1;
|
||||||
|
|
||||||
|
if (southBorderType == HSSFCellStyle.BORDER_DASHED)
|
||||||
|
dashlength = 2;
|
||||||
|
|
||||||
|
g.setColor(southColor);
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int xc = x; xc < width; xc=xc+5) {
|
||||||
|
g.drawLine(xc,height-k,xc+dashlength,height-k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (westBorder &&
|
||||||
|
((westBorderType == HSSFCellStyle.BORDER_DASHED) ||
|
||||||
|
(westBorderType == HSSFCellStyle.BORDER_HAIR))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(westBorderType);
|
||||||
|
// thickness++;
|
||||||
|
|
||||||
|
int dashlength = 1;
|
||||||
|
|
||||||
|
if (westBorderType == HSSFCellStyle.BORDER_DASHED)
|
||||||
|
dashlength = 2;
|
||||||
|
|
||||||
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
for (int k=0; k < thickness; k++) {
|
||||||
|
for (int yc=y;yc < height; yc=yc+5) {
|
||||||
|
g.drawLine(x+k,yc,x+k,yc+dashlength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by paintBorder to paint the double line
|
||||||
|
* borders for a cell.
|
||||||
|
*/
|
||||||
|
private void paintDoubleBorders(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
if (northBorder &&
|
||||||
|
northBorderType == HSSFCellStyle.BORDER_DOUBLE) {
|
||||||
|
|
||||||
|
g.setColor(northColor);
|
||||||
|
|
||||||
|
int leftx=x;
|
||||||
|
int rightx=width;
|
||||||
|
|
||||||
|
// if there are borders on the west or east then
|
||||||
|
// the second line shouldn't cross them
|
||||||
|
if (westBorder)
|
||||||
|
leftx = x+3;
|
||||||
|
|
||||||
|
if (eastBorder)
|
||||||
|
rightx = width-3;
|
||||||
|
|
||||||
|
g.drawLine(x,y,width,y);
|
||||||
|
g.drawLine(leftx,y+2,rightx,y+2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eastBorder &&
|
||||||
|
eastBorderType == HSSFCellStyle.BORDER_DOUBLE
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(eastBorderType);
|
||||||
|
thickness++; //need for dotted borders to show up east
|
||||||
|
|
||||||
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
int topy=y;
|
||||||
|
int bottomy=height;
|
||||||
|
|
||||||
|
if (northBorder)
|
||||||
|
topy=y+3;
|
||||||
|
|
||||||
|
if (southBorder)
|
||||||
|
bottomy=height-3;
|
||||||
|
|
||||||
|
g.drawLine(width-1,y,width-1,height);
|
||||||
|
g.drawLine(width-3,topy,width-3,bottomy);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (southBorder &&
|
||||||
|
southBorderType == HSSFCellStyle.BORDER_DOUBLE
|
||||||
|
) {
|
||||||
|
|
||||||
|
g.setColor(southColor);
|
||||||
|
|
||||||
|
int leftx=y;
|
||||||
|
int rightx=width;
|
||||||
|
|
||||||
|
if (westBorder)
|
||||||
|
leftx=x+3;
|
||||||
|
|
||||||
|
if (eastBorder)
|
||||||
|
rightx=width-3;
|
||||||
|
|
||||||
|
|
||||||
|
g.drawLine(x,height - 1,width,height - 1);
|
||||||
|
g.drawLine(leftx,height - 3,rightx,height - 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (westBorder &&
|
||||||
|
westBorderType == HSSFCellStyle.BORDER_DOUBLE
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(westBorderType);
|
||||||
|
// thickness++;
|
||||||
|
|
||||||
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
int topy=y;
|
||||||
|
int bottomy=height-3;
|
||||||
|
|
||||||
|
if (northBorder)
|
||||||
|
topy=y+2;
|
||||||
|
|
||||||
|
if (southBorder)
|
||||||
|
bottomy=height-3;
|
||||||
|
|
||||||
|
g.drawLine(x,y,x,height);
|
||||||
|
g.drawLine(x+2,topy,x+2,bottomy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by paintBorder to paint the various versions of dash dot dot line
|
||||||
|
* borders for a cell.
|
||||||
|
*/
|
||||||
|
private void paintDashDotDotBorders(Graphics g, int x, int y, int width,
|
||||||
|
int height) {
|
||||||
|
if (northBorder &&
|
||||||
|
((northBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(northBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
int thickness = getThickness(northBorderType);
|
||||||
|
|
||||||
|
g.setColor(northColor);
|
||||||
|
for (int l=x; l < width;) {
|
||||||
|
l=l+drawDashDotDot(g, l, y, thickness, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eastBorder &&
|
||||||
|
((eastBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(eastBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(eastBorderType);
|
||||||
|
|
||||||
|
g.setColor(eastColor);
|
||||||
|
|
||||||
|
for (int l=y;l < height;) {
|
||||||
|
//System.err.println("drawing east");
|
||||||
|
l=l+drawDashDotDot(g,width-1,l,thickness,false,false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (southBorder &&
|
||||||
|
((southBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(southBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(southBorderType);
|
||||||
|
|
||||||
|
g.setColor(southColor);
|
||||||
|
|
||||||
|
for (int l=x; l < width;) {
|
||||||
|
//System.err.println("drawing south");
|
||||||
|
l=l+drawDashDotDot(g, l, height-1, thickness, true, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (westBorder &&
|
||||||
|
((westBorderType == HSSFCellStyle.BORDER_DASH_DOT_DOT) ||
|
||||||
|
(westBorderType == HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT))
|
||||||
|
) {
|
||||||
|
|
||||||
|
int thickness = getThickness(westBorderType);
|
||||||
|
|
||||||
|
g.setColor(westColor);
|
||||||
|
|
||||||
|
for (int l=y;l < height;) {
|
||||||
|
//System.err.println("drawing west");
|
||||||
|
l=l+drawDashDotDot(g,x,l,thickness,false,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws one dash dot dot horizontally or vertically with thickness drawn
|
||||||
|
* incrementally to either the right or left.
|
||||||
|
*
|
||||||
|
* @param g graphics object for drawing with
|
||||||
|
* @param x the x origin of the line
|
||||||
|
* @param y the y origin of the line
|
||||||
|
* @param thickness the thickness of the line
|
||||||
|
* @param horizontal or vertical (true for horizontal)
|
||||||
|
* @param right/bottom or left/top thickness (true for right or top),
|
||||||
|
* if true then the x or y origin will be incremented to provide
|
||||||
|
* thickness, if false, they'll be decremented. For vertical
|
||||||
|
* borders, x is incremented or decremented, for horizontal its y.
|
||||||
|
* Just set to true for north and west, and false for east and
|
||||||
|
* south.
|
||||||
|
* @returns length - returns the length of the line.
|
||||||
|
*/
|
||||||
|
private int drawDashDotDot(Graphics g,int x, int y, int thickness,
|
||||||
|
boolean horizontal,
|
||||||
|
boolean rightBottom) {
|
||||||
|
|
||||||
|
for (int t=0; t < thickness; t++) {
|
||||||
|
if (!rightBottom) {
|
||||||
|
t = 0 - t; //add negative thickness so we go the other way
|
||||||
|
//then we'll decrement instead of increment.
|
||||||
|
}
|
||||||
|
if (horizontal) {
|
||||||
|
g.drawLine(x,y+t,x+5,y+t);
|
||||||
|
g.drawLine(x+8,y+t,x+10,y+t);
|
||||||
|
g.drawLine(x+13,y+t,x+15,y+t);
|
||||||
|
} else {
|
||||||
|
g.drawLine(x+t,y,x+t,y+5);
|
||||||
|
g.drawLine(x+t,y+8,x+t,y+10);
|
||||||
|
g.drawLine(x+t,y+13,x+t,y+15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 18;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns the line thickness for a border based on border type
|
||||||
|
*/
|
||||||
|
private int getThickness(int thickness) {
|
||||||
|
int retval=1;
|
||||||
|
switch (thickness) {
|
||||||
|
case HSSFCellStyle.BORDER_THIN:
|
||||||
|
retval=2;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_MEDIUM:
|
||||||
|
retval=3;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_THICK:
|
||||||
|
retval=4;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_DASHED:
|
||||||
|
retval=1;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_DASH_DOT_DOT:
|
||||||
|
retval=1;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT:
|
||||||
|
retval=3;
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.BORDER_HAIR:
|
||||||
|
retval=1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
retval=1;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,220 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.text.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used to format cells into their fractional format.
|
||||||
|
*
|
||||||
|
* I cant be 100% sure that the same fractional value will be displayed as in
|
||||||
|
* excel but then again it is a lossy formating mode anyway
|
||||||
|
*
|
||||||
|
* @author Jason Height
|
||||||
|
* @since 15 July 2002
|
||||||
|
*/
|
||||||
|
public class SVFractionalFormat extends Format {
|
||||||
|
private short ONE_DIGIT = 1;
|
||||||
|
private short TWO_DIGIT = 2;
|
||||||
|
private short THREE_DIGIT = 3;
|
||||||
|
private short UNITS = 4;
|
||||||
|
private int units = 1;
|
||||||
|
private short mode = -1;
|
||||||
|
|
||||||
|
/** Constructs a new FractionalFormatter
|
||||||
|
*
|
||||||
|
* The formatStr defines how the number will be formatted
|
||||||
|
* # ?/? Up to one digit
|
||||||
|
* # ??/?? Up to two digits
|
||||||
|
* # ???/??? Up to three digits
|
||||||
|
* # ?/2 In halves
|
||||||
|
* # ?/4 In quarters
|
||||||
|
* # ?/8 In eighths
|
||||||
|
* # ?/16 In sixteenths
|
||||||
|
* # ?/10 In tenths
|
||||||
|
* # ?/100 In hundredths
|
||||||
|
*/
|
||||||
|
public SVFractionalFormat(String formatStr) {
|
||||||
|
if ("# ?/?".equals(formatStr))
|
||||||
|
mode = ONE_DIGIT;
|
||||||
|
else if ("# ??/??".equals(formatStr))
|
||||||
|
mode = TWO_DIGIT;
|
||||||
|
else if ("# ???/???".equals(formatStr))
|
||||||
|
mode = THREE_DIGIT;
|
||||||
|
else if ("# ?/2".equals(formatStr)) {
|
||||||
|
mode = UNITS;
|
||||||
|
units = 2;
|
||||||
|
} else if ("# ?/4".equals(formatStr)) {
|
||||||
|
mode = UNITS;
|
||||||
|
units = 4;
|
||||||
|
} else if ("# ?/8".equals(formatStr)) {
|
||||||
|
mode = UNITS;
|
||||||
|
units = 8;
|
||||||
|
} else if ("# ?/16".equals(formatStr)) {
|
||||||
|
mode = UNITS;
|
||||||
|
units = 16;
|
||||||
|
} else if ("# ?/10".equals(formatStr)) {
|
||||||
|
mode = UNITS;
|
||||||
|
units = 10;
|
||||||
|
} else if ("# ?/100".equals(formatStr)) {
|
||||||
|
mode = UNITS;
|
||||||
|
units = 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a fractional string representation of a double to a maximum denominator size
|
||||||
|
*
|
||||||
|
* This code has been translated to java from the following web page.
|
||||||
|
* http://www.codeproject.com/cpp/fraction.asp
|
||||||
|
* Originally coded in c++ By Dean Wyant dwyant@mindspring.com
|
||||||
|
* The code on the web page is freely available.
|
||||||
|
*
|
||||||
|
* @param f Description of the Parameter
|
||||||
|
* @param MaxDen Description of the Parameter
|
||||||
|
* @return Description of the Return Value
|
||||||
|
*/
|
||||||
|
private String format(final double f, final int MaxDen) {
|
||||||
|
long Whole = (long)f;
|
||||||
|
int sign = 1;
|
||||||
|
if (f < 0) {
|
||||||
|
sign = -1;
|
||||||
|
}
|
||||||
|
double Precision = 0.00001;
|
||||||
|
double AllowedError = Precision;
|
||||||
|
double d = Math.abs(f);
|
||||||
|
d -= Whole;
|
||||||
|
double Frac = d;
|
||||||
|
double Diff = Frac;
|
||||||
|
long Num = 1;
|
||||||
|
long Den = 0;
|
||||||
|
long A = 0;
|
||||||
|
long B = 0;
|
||||||
|
long i = 0;
|
||||||
|
if (Frac > Precision) {
|
||||||
|
while (true) {
|
||||||
|
d = 1.0 / d;
|
||||||
|
i = (long) (d + Precision);
|
||||||
|
d -= i;
|
||||||
|
if (A > 0) {
|
||||||
|
Num = i * Num + B;
|
||||||
|
}
|
||||||
|
Den = (long) (Num / Frac + 0.5);
|
||||||
|
Diff = Math.abs((double) Num / Den - Frac);
|
||||||
|
if (Den > MaxDen) {
|
||||||
|
if (A > 0) {
|
||||||
|
Num = A;
|
||||||
|
Den = (long) (Num / Frac + 0.5);
|
||||||
|
Diff = Math.abs((double) Num / Den - Frac);
|
||||||
|
} else {
|
||||||
|
Den = MaxDen;
|
||||||
|
Num = 1;
|
||||||
|
Diff = Math.abs((double) Num / Den - Frac);
|
||||||
|
if (Diff > Frac) {
|
||||||
|
Num = 0;
|
||||||
|
Den = 1;
|
||||||
|
// Keeps final check below from adding 1 and keeps Den from being 0
|
||||||
|
Diff = Frac;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((Diff <= AllowedError) || (d < Precision)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Precision = AllowedError / Diff;
|
||||||
|
// This calcualtion of Precision does not always provide results within
|
||||||
|
// Allowed Error. It compensates for loss of significant digits that occurs.
|
||||||
|
// It helps to round the inprecise reciprocal values to i.
|
||||||
|
B = A;
|
||||||
|
A = Num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Num == Den) {
|
||||||
|
Whole++;
|
||||||
|
Num = 0;
|
||||||
|
Den = 0;
|
||||||
|
} else if (Den == 0) {
|
||||||
|
Num = 0;
|
||||||
|
}
|
||||||
|
if (sign < 0) {
|
||||||
|
if (Whole == 0) {
|
||||||
|
Num = -Num;
|
||||||
|
} else {
|
||||||
|
Whole = -Whole;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new StringBuffer().append(Whole).append(" ").append(Num).append("/").append(Den).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method formats the double in the units specified.
|
||||||
|
* The usints could be any number but in this current implementation it is
|
||||||
|
* halves (2), quaters (4), eigths (8) etc
|
||||||
|
*/
|
||||||
|
private String formatUnit(double f, int units) {
|
||||||
|
long Whole = (long)f;
|
||||||
|
f -= Whole;
|
||||||
|
long Num = Math.round(f * units);
|
||||||
|
|
||||||
|
return new StringBuffer().append(Whole).append(" ").append(Num).append("/").append(units).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final String format(double val) {
|
||||||
|
if (mode == ONE_DIGIT) {
|
||||||
|
return format(val, 9);
|
||||||
|
} else if (mode == TWO_DIGIT) {
|
||||||
|
return format(val, 99);
|
||||||
|
} else if (mode == THREE_DIGIT) {
|
||||||
|
return format(val, 999);
|
||||||
|
} else if (mode == UNITS) {
|
||||||
|
return formatUnit(val , units);
|
||||||
|
}
|
||||||
|
throw new RuntimeException("Unexpected Case");
|
||||||
|
}
|
||||||
|
|
||||||
|
public StringBuffer format(Object obj,
|
||||||
|
StringBuffer toAppendTo,
|
||||||
|
FieldPosition pos) {
|
||||||
|
if (obj instanceof Number) {
|
||||||
|
toAppendTo.append(format(((Number)obj).doubleValue()));
|
||||||
|
return toAppendTo;
|
||||||
|
}
|
||||||
|
else throw new IllegalArgumentException("Can only handle Numbers");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object parseObject(String source,
|
||||||
|
ParsePosition status) {
|
||||||
|
//JMH TBD
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object parseObject(String source)
|
||||||
|
throws ParseException {
|
||||||
|
//JMH TBD
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object clone() {
|
||||||
|
//JMH TBD
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class presents the row header to the table.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Jason Height
|
||||||
|
*/
|
||||||
|
public class SVRowHeader extends JList {
|
||||||
|
/** This model simply returns an integer number up to the number of rows
|
||||||
|
* that are present in the sheet.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private class SVRowHeaderModel extends AbstractListModel {
|
||||||
|
private HSSFSheet sheet;
|
||||||
|
|
||||||
|
public SVRowHeaderModel(HSSFSheet sheet) {
|
||||||
|
this.sheet = sheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return sheet.getLastRowNum() + 1;
|
||||||
|
}
|
||||||
|
public Object getElementAt(int index) {
|
||||||
|
return Integer.toString(index+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Renderes the row number*/
|
||||||
|
private class RowHeaderRenderer extends JLabel implements ListCellRenderer {
|
||||||
|
private HSSFSheet sheet;
|
||||||
|
private int extraHeight;
|
||||||
|
|
||||||
|
RowHeaderRenderer(HSSFSheet sheet, JTable table, int extraHeight) {
|
||||||
|
this.sheet = sheet;
|
||||||
|
this.extraHeight = extraHeight;
|
||||||
|
JTableHeader header = table.getTableHeader();
|
||||||
|
setOpaque(true);
|
||||||
|
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
|
||||||
|
setHorizontalAlignment(CENTER);
|
||||||
|
setForeground(header.getForeground());
|
||||||
|
setBackground(header.getBackground());
|
||||||
|
setFont(header.getFont());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getListCellRendererComponent( JList list,
|
||||||
|
Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
||||||
|
Dimension d = getPreferredSize();
|
||||||
|
HSSFRow row = sheet.getRow(index);
|
||||||
|
int rowHeight;
|
||||||
|
if(row == null) {
|
||||||
|
rowHeight = (int)sheet.getDefaultRowHeightInPoints();
|
||||||
|
} else {
|
||||||
|
rowHeight = (int)row.getHeightInPoints();
|
||||||
|
}
|
||||||
|
d.height = rowHeight+extraHeight;
|
||||||
|
setPreferredSize(d);
|
||||||
|
setText((value == null) ? "" : value.toString());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVRowHeader(HSSFSheet sheet, JTable table, int extraHeight) {
|
||||||
|
ListModel lm = new SVRowHeaderModel(sheet);
|
||||||
|
this.setModel(lm);
|
||||||
|
|
||||||
|
setFixedCellWidth(50);
|
||||||
|
setCellRenderer(new RowHeaderRenderer(sheet, table, extraHeight));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,205 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.*;
|
||||||
|
import org.apache.poi.hssf.util.HSSFColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sheet Viewer Table Cell Editor -- not commented via javadoc as it
|
||||||
|
* nearly completely consists of overridden methods.
|
||||||
|
*
|
||||||
|
* @author Jason Height
|
||||||
|
* @since 16 July 2002
|
||||||
|
*/
|
||||||
|
public class SVTableCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
|
||||||
|
private static final Color black = getAWTColor(new HSSFColor.BLACK());
|
||||||
|
private static final Color white = getAWTColor(new HSSFColor.WHITE());
|
||||||
|
private Hashtable colors = HSSFColor.getIndexHash();
|
||||||
|
|
||||||
|
|
||||||
|
private HSSFWorkbook wb;
|
||||||
|
private JTextField editor;
|
||||||
|
|
||||||
|
private HSSFCell editorValue;
|
||||||
|
|
||||||
|
|
||||||
|
public SVTableCellEditor(HSSFWorkbook wb) {
|
||||||
|
this.wb = wb;
|
||||||
|
this.editor = new JTextField();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the cellEditable attribute of the SVTableCellEditor object
|
||||||
|
*
|
||||||
|
* @return The cellEditable value
|
||||||
|
*/
|
||||||
|
public boolean isCellEditable(java.util.EventObject e) {
|
||||||
|
if (e instanceof MouseEvent) {
|
||||||
|
return ((MouseEvent) e).getClickCount() >= 2;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean shouldSelectCell(EventObject anEvent) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean startCellEditing(EventObject anEvent) {
|
||||||
|
System.out.println("Start Cell Editing");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean stopCellEditing() {
|
||||||
|
System.out.println("Stop Cell Editing");
|
||||||
|
fireEditingStopped();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void cancelCellEditing() {
|
||||||
|
System.out.println("Cancel Cell Editing");
|
||||||
|
fireEditingCanceled();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
System.out.println("Action performed");
|
||||||
|
stopCellEditing();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the cellEditorValue attribute of the SVTableCellEditor object
|
||||||
|
*
|
||||||
|
* @return The cellEditorValue value
|
||||||
|
*/
|
||||||
|
public Object getCellEditorValue() {
|
||||||
|
System.out.println("GetCellEditorValue");
|
||||||
|
//JMH Look at when this method is called. Should it return a HSSFCell?
|
||||||
|
return editor.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the tableCellEditorComponent attribute of the SVTableCellEditor object
|
||||||
|
*
|
||||||
|
* @return The tableCellEditorComponent value
|
||||||
|
*/
|
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value,
|
||||||
|
boolean isSelected,
|
||||||
|
int row,
|
||||||
|
int column) {
|
||||||
|
System.out.println("GetTableCellEditorComponent");
|
||||||
|
HSSFCell cell = (HSSFCell) value;
|
||||||
|
if (cell != null) {
|
||||||
|
HSSFCellStyle style = cell.getCellStyle();
|
||||||
|
HSSFFont f = wb.getFontAt(style.getFontIndex());
|
||||||
|
boolean isbold = f.getBoldweight() > HSSFFont.BOLDWEIGHT_NORMAL;
|
||||||
|
boolean isitalics = f.getItalic();
|
||||||
|
|
||||||
|
int fontstyle = Font.PLAIN;
|
||||||
|
|
||||||
|
if (isbold) fontstyle = Font.BOLD;
|
||||||
|
if (isitalics) fontstyle = fontstyle | Font.ITALIC;
|
||||||
|
|
||||||
|
int fontheight = f.getFontHeightInPoints();
|
||||||
|
if (fontheight == 9) fontheight = 10; //fix for stupid ol Windows
|
||||||
|
|
||||||
|
Font font = new Font(f.getFontName(),fontstyle,fontheight);
|
||||||
|
editor.setFont(font);
|
||||||
|
|
||||||
|
if (style.getFillPattern() == HSSFCellStyle.SOLID_FOREGROUND) {
|
||||||
|
editor.setBackground(getAWTColor(style.getFillForegroundColor(), white));
|
||||||
|
} else editor.setBackground(white);
|
||||||
|
|
||||||
|
editor.setForeground(getAWTColor(f.getColor(), black));
|
||||||
|
|
||||||
|
|
||||||
|
//Set the value that is rendered for the cell
|
||||||
|
switch (cell.getCellType()) {
|
||||||
|
case HSSFCell.CELL_TYPE_BLANK:
|
||||||
|
editor.setText("");
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_BOOLEAN:
|
||||||
|
if (cell.getBooleanCellValue()) {
|
||||||
|
editor.setText("true");
|
||||||
|
} else {
|
||||||
|
editor.setText("false");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||||
|
editor.setText(Double.toString(cell.getNumericCellValue()));
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_STRING:
|
||||||
|
editor.setText(cell.getRichStringCellValue().getString());
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_FORMULA:
|
||||||
|
default:
|
||||||
|
editor.setText("?");
|
||||||
|
}
|
||||||
|
switch (style.getAlignment()) {
|
||||||
|
case HSSFCellStyle.ALIGN_LEFT:
|
||||||
|
case HSSFCellStyle.ALIGN_JUSTIFY:
|
||||||
|
case HSSFCellStyle.ALIGN_FILL:
|
||||||
|
editor.setHorizontalAlignment(SwingConstants.LEFT);
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.ALIGN_CENTER:
|
||||||
|
case HSSFCellStyle.ALIGN_CENTER_SELECTION:
|
||||||
|
editor.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.ALIGN_GENERAL:
|
||||||
|
case HSSFCellStyle.ALIGN_RIGHT:
|
||||||
|
editor.setHorizontalAlignment(SwingConstants.RIGHT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
editor.setHorizontalAlignment(SwingConstants.LEFT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method retrieves the AWT Color representation from the colour hash table
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private final Color getAWTColor(int index, Color deflt) {
|
||||||
|
HSSFColor clr = (HSSFColor)colors.get(new Integer(index));
|
||||||
|
if (clr == null) return deflt;
|
||||||
|
return getAWTColor(clr);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Color getAWTColor(HSSFColor clr) {
|
||||||
|
short[] rgb = clr.getTriplet();
|
||||||
|
return new Color(rgb[0],rgb[1],rgb[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,274 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.TableCellRenderer;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.text.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sheet Viewer Table Cell Render -- not commented via javadoc as it
|
||||||
|
* nearly completely consists of overridden methods.
|
||||||
|
*
|
||||||
|
* @author Andrew C. Oliver
|
||||||
|
*/
|
||||||
|
public class SVTableCellRenderer extends JLabel
|
||||||
|
implements TableCellRenderer, Serializable
|
||||||
|
{
|
||||||
|
protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
|
||||||
|
protected SVBorder cellBorder = new SVBorder();
|
||||||
|
|
||||||
|
|
||||||
|
private HSSFWorkbook wb = null;
|
||||||
|
|
||||||
|
/** This class holds the references to the predefined cell formats.
|
||||||
|
*/
|
||||||
|
private class CellFormatter {
|
||||||
|
private Format[] textFormatter;
|
||||||
|
|
||||||
|
private DecimalFormat generalNumberFormat = new DecimalFormat("0");
|
||||||
|
|
||||||
|
public CellFormatter() {
|
||||||
|
textFormatter = new Format[0x31];
|
||||||
|
|
||||||
|
textFormatter[0x01] = new DecimalFormat("0");
|
||||||
|
textFormatter[0x02] = new DecimalFormat("0.00");
|
||||||
|
textFormatter[0x03] = new DecimalFormat("#,##0");
|
||||||
|
textFormatter[0x04] = new DecimalFormat("#,##0.00");
|
||||||
|
textFormatter[0x05] = new DecimalFormat("$#,##0;$#,##0");
|
||||||
|
textFormatter[0x06] = new DecimalFormat("$#,##0;$#,##0");
|
||||||
|
textFormatter[0x07] = new DecimalFormat("$#,##0.00;$#,##0.00");
|
||||||
|
textFormatter[0x08] = new DecimalFormat("$#,##0.00;$#,##0.00");
|
||||||
|
textFormatter[0x09] = new DecimalFormat("0%");
|
||||||
|
textFormatter[0x0A] = new DecimalFormat("0.00%");
|
||||||
|
textFormatter[0x0B] = new DecimalFormat("0.00E0");
|
||||||
|
textFormatter[0x0C] = new SVFractionalFormat("# ?/?");
|
||||||
|
textFormatter[0x0D] = new SVFractionalFormat("# ??/??");
|
||||||
|
textFormatter[0x0E] = new SimpleDateFormat("M/d/yy");
|
||||||
|
textFormatter[0x0F] = new SimpleDateFormat("d-MMM-yy");
|
||||||
|
textFormatter[0x10] = new SimpleDateFormat("d-MMM");
|
||||||
|
textFormatter[0x11] = new SimpleDateFormat("MMM-yy");
|
||||||
|
textFormatter[0x12] = new SimpleDateFormat("h:mm a");
|
||||||
|
textFormatter[0x13] = new SimpleDateFormat("h:mm:ss a");
|
||||||
|
textFormatter[0x14] = new SimpleDateFormat("h:mm");
|
||||||
|
textFormatter[0x15] = new SimpleDateFormat("h:mm:ss");
|
||||||
|
textFormatter[0x16] = new SimpleDateFormat("M/d/yy h:mm");
|
||||||
|
// 0x17 - 0x24 reserved for international and undocumented 0x25, "(#,##0_);(#,##0)"
|
||||||
|
//start at 0x26
|
||||||
|
//jmh need to do colour
|
||||||
|
//"(#,##0_);[Red](#,##0)"
|
||||||
|
textFormatter[0x26] = new DecimalFormat("#,##0;#,##0");
|
||||||
|
//jmh need to do colour
|
||||||
|
//(#,##0.00_);(#,##0.00)
|
||||||
|
textFormatter[0x27] = new DecimalFormat("#,##0.00;#,##0.00");
|
||||||
|
textFormatter[0x28] = new DecimalFormat("#,##0.00;#,##0.00");
|
||||||
|
//?? textFormatter[0x29] = new DecimalFormat("_(*#,##0_);_(*(#,##0);_(* \"-\"_);_(@_)");
|
||||||
|
//?? textFormatter[0x2A] = new DecimalFormat("_($*#,##0_);_($*(#,##0);_($* \"-\"_);_(@_)");
|
||||||
|
//?? textFormatter[0x2B] = new DecimalFormat("_(*#,##0.00_);_(*(#,##0.00);_(*\"-\"??_);_(@_)");
|
||||||
|
//?? textFormatter[0x2C] = new DecimalFormat("_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)");
|
||||||
|
textFormatter[0x2D] = new SimpleDateFormat("mm:ss");
|
||||||
|
//?? textFormatter[0x2E] = new SimpleDateFormat("[h]:mm:ss");
|
||||||
|
textFormatter[0x2F] = new SimpleDateFormat("mm:ss.0");
|
||||||
|
textFormatter[0x30] = new DecimalFormat("##0.0E0");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String format(short index, Object value) {
|
||||||
|
if (index == 0)
|
||||||
|
return value.toString();
|
||||||
|
if (textFormatter[index] == null)
|
||||||
|
throw new RuntimeException("Sorry. I cant handle the format code :"+Integer.toHexString(index));
|
||||||
|
return textFormatter[index].format(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String format(short index, double value) {
|
||||||
|
if ( index <= 0 )
|
||||||
|
return generalNumberFormat.format(value);
|
||||||
|
if (textFormatter[index] == null)
|
||||||
|
throw new RuntimeException("Sorry. I cant handle the format code :"+Integer.toHexString(index));
|
||||||
|
if (textFormatter[index] instanceof DecimalFormat) {
|
||||||
|
return ((DecimalFormat)textFormatter[index]).format(value);
|
||||||
|
}
|
||||||
|
if (textFormatter[index] instanceof SVFractionalFormat) {
|
||||||
|
return ((SVFractionalFormat)textFormatter[index]).format(value);
|
||||||
|
}
|
||||||
|
throw new RuntimeException("Sorry. I cant handle a non decimal formatter for a decimal value :"+Integer.toHexString(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean useRedColor(short index, double value) {
|
||||||
|
return (((index == 0x06)||(index == 0x08)||(index == 0x26) || (index == 0x27)) && (value < 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final CellFormatter cellFormatter = new CellFormatter();
|
||||||
|
|
||||||
|
public SVTableCellRenderer(HSSFWorkbook wb) {
|
||||||
|
super();
|
||||||
|
setOpaque(true);
|
||||||
|
setBorder(noFocusBorder);
|
||||||
|
this.wb = wb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getTableCellRendererComponent(JTable table, Object value,
|
||||||
|
boolean isSelected, boolean hasFocus, int row, int column) {
|
||||||
|
boolean isBorderSet = false;
|
||||||
|
|
||||||
|
//If the JTables default cell renderer has been setup correctly the
|
||||||
|
//value will be the HSSFCell that we are trying to render
|
||||||
|
HSSFCell c = (HSSFCell)value;
|
||||||
|
|
||||||
|
if (c != null) {
|
||||||
|
HSSFCellStyle s = c.getCellStyle();
|
||||||
|
HSSFFont f = wb.getFontAt(s.getFontIndex());
|
||||||
|
setFont(SVTableUtils.makeFont(f));
|
||||||
|
|
||||||
|
if (s.getFillPattern() == HSSFCellStyle.SOLID_FOREGROUND) {
|
||||||
|
setBackground(SVTableUtils.getAWTColor(s.getFillForegroundColor(), SVTableUtils.white));
|
||||||
|
} else setBackground(SVTableUtils.white);
|
||||||
|
|
||||||
|
setForeground(SVTableUtils.getAWTColor(f.getColor(), SVTableUtils.black));
|
||||||
|
|
||||||
|
cellBorder.setBorder(SVTableUtils.getAWTColor(s.getTopBorderColor(), SVTableUtils.black),
|
||||||
|
SVTableUtils.getAWTColor(s.getRightBorderColor(), SVTableUtils.black),
|
||||||
|
SVTableUtils.getAWTColor(s.getBottomBorderColor(), SVTableUtils.black),
|
||||||
|
SVTableUtils.getAWTColor(s.getLeftBorderColor(), SVTableUtils.black),
|
||||||
|
s.getBorderTop(), s.getBorderRight(),
|
||||||
|
s.getBorderBottom(), s.getBorderLeft(),
|
||||||
|
hasFocus);
|
||||||
|
setBorder(cellBorder);
|
||||||
|
isBorderSet=true;
|
||||||
|
|
||||||
|
//Set the value that is rendered for the cell
|
||||||
|
switch (c.getCellType()) {
|
||||||
|
case HSSFCell.CELL_TYPE_BLANK:
|
||||||
|
setValue("");
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_BOOLEAN:
|
||||||
|
if (c.getBooleanCellValue()) {
|
||||||
|
setValue("true");
|
||||||
|
} else {
|
||||||
|
setValue("false");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||||
|
short format = s.getDataFormat();
|
||||||
|
double numericValue = c.getNumericCellValue();
|
||||||
|
if (cellFormatter.useRedColor(format, numericValue))
|
||||||
|
setForeground(Color.red);
|
||||||
|
else setForeground(null);
|
||||||
|
setValue(cellFormatter.format(format, c.getNumericCellValue()));
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_STRING:
|
||||||
|
setValue(c.getRichStringCellValue().getString());
|
||||||
|
break;
|
||||||
|
case HSSFCell.CELL_TYPE_FORMULA:
|
||||||
|
default:
|
||||||
|
setValue("?");
|
||||||
|
}
|
||||||
|
//Set the text alignment of the cell
|
||||||
|
switch (s.getAlignment()) {
|
||||||
|
case HSSFCellStyle.ALIGN_LEFT:
|
||||||
|
case HSSFCellStyle.ALIGN_JUSTIFY:
|
||||||
|
case HSSFCellStyle.ALIGN_FILL:
|
||||||
|
setHorizontalAlignment(SwingConstants.LEFT);
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.ALIGN_CENTER:
|
||||||
|
case HSSFCellStyle.ALIGN_CENTER_SELECTION:
|
||||||
|
setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
break;
|
||||||
|
case HSSFCellStyle.ALIGN_GENERAL:
|
||||||
|
case HSSFCellStyle.ALIGN_RIGHT:
|
||||||
|
setHorizontalAlignment(SwingConstants.RIGHT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
setHorizontalAlignment(SwingConstants.LEFT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setValue("");
|
||||||
|
setBackground(SVTableUtils.white);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (hasFocus) {
|
||||||
|
if (!isBorderSet) {
|
||||||
|
//This is the border to paint when there is no border
|
||||||
|
//and the cell has focus
|
||||||
|
cellBorder.setBorder(SVTableUtils.black,
|
||||||
|
SVTableUtils.black,
|
||||||
|
SVTableUtils.black,
|
||||||
|
SVTableUtils.black,
|
||||||
|
HSSFCellStyle.BORDER_NONE,
|
||||||
|
HSSFCellStyle.BORDER_NONE,
|
||||||
|
HSSFCellStyle.BORDER_NONE,
|
||||||
|
HSSFCellStyle.BORDER_NONE,
|
||||||
|
isSelected);
|
||||||
|
setBorder(cellBorder);
|
||||||
|
}
|
||||||
|
if (table.isCellEditable(row, column)) {
|
||||||
|
setForeground( UIManager.getColor("Table.focusCellForeground") );
|
||||||
|
setBackground( UIManager.getColor("Table.focusCellBackground") );
|
||||||
|
}
|
||||||
|
} else if (!isBorderSet) {
|
||||||
|
setBorder(noFocusBorder);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- begin optimization to avoid painting background ----
|
||||||
|
Color back = getBackground();
|
||||||
|
boolean colorMatch = (back != null) && ( back.equals(table.getBackground()) ) && table.isOpaque();
|
||||||
|
setOpaque(!colorMatch);
|
||||||
|
// ---- end optimization to aviod painting background ----
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void validate() {}
|
||||||
|
|
||||||
|
public void revalidate() {}
|
||||||
|
|
||||||
|
public void repaint(long tm, int x, int y, int width, int height) {}
|
||||||
|
|
||||||
|
public void repaint(Rectangle r) { }
|
||||||
|
|
||||||
|
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
|
||||||
|
// Strings get interned...
|
||||||
|
if (propertyName=="text") {
|
||||||
|
super.firePropertyChange(propertyName, oldValue, newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the string to either the value or "" if the value is null.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected void setValue(Object value) {
|
||||||
|
setText((value == null) ? "" : value.toString());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import javax.swing.table.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sheet Viewer Table Model - The model for the Sheet Viewer just overrides things.
|
||||||
|
* @author Andrew C. Oliver
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class SVTableModel extends AbstractTableModel {
|
||||||
|
private HSSFSheet st = null;
|
||||||
|
int maxcol = 0;
|
||||||
|
|
||||||
|
public SVTableModel(HSSFSheet st, int maxcol) {
|
||||||
|
this.st = st;
|
||||||
|
this.maxcol=maxcol;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVTableModel(HSSFSheet st) {
|
||||||
|
this.st = st;
|
||||||
|
Iterator i = st.rowIterator();
|
||||||
|
|
||||||
|
while (i.hasNext()) {
|
||||||
|
HSSFRow row = (HSSFRow)i.next();
|
||||||
|
if (maxcol < (row.getLastCellNum()+1)) {
|
||||||
|
this.maxcol = row.getLastCellNum();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getColumnCount() {
|
||||||
|
return this.maxcol+1;
|
||||||
|
}
|
||||||
|
public Object getValueAt(int row, int col) {
|
||||||
|
HSSFRow r = st.getRow(row);
|
||||||
|
HSSFCell c = null;
|
||||||
|
if (r != null) {
|
||||||
|
c = r.getCell((short)col);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
public int getRowCount() {
|
||||||
|
return st.getLastRowNum() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class getColumnClass(int c) {
|
||||||
|
return HSSFCell.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
||||||
|
if (aValue != null)
|
||||||
|
System.out.println("SVTableModel.setValueAt. value type = "+aValue.getClass().getName());
|
||||||
|
else System.out.println("SVTableModel.setValueAt. value type = null");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.border.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.*;
|
||||||
|
import org.apache.poi.hssf.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SVTableCell Editor and Renderer helper functions.
|
||||||
|
*
|
||||||
|
* @author Jason Height
|
||||||
|
* @since 16 July 2002
|
||||||
|
*/
|
||||||
|
public class SVTableUtils {
|
||||||
|
private final static Hashtable colors = HSSFColor.getIndexHash();
|
||||||
|
/** Description of the Field */
|
||||||
|
public final static Color black = getAWTColor(new HSSFColor.BLACK());
|
||||||
|
/** Description of the Field */
|
||||||
|
public final static Color white = getAWTColor(new HSSFColor.WHITE());
|
||||||
|
/** Description of the Field */
|
||||||
|
public static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new font for a specific cell style
|
||||||
|
*/
|
||||||
|
public static Font makeFont(HSSFFont font) {
|
||||||
|
boolean isbold = font.getBoldweight() > HSSFFont.BOLDWEIGHT_NORMAL;
|
||||||
|
boolean isitalics = font.getItalic();
|
||||||
|
int fontstyle = Font.PLAIN;
|
||||||
|
if (isbold) {
|
||||||
|
fontstyle = Font.BOLD;
|
||||||
|
}
|
||||||
|
if (isitalics) {
|
||||||
|
fontstyle = fontstyle | Font.ITALIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fontheight = font.getFontHeightInPoints();
|
||||||
|
if (fontheight == 9) {
|
||||||
|
//fix for stupid ol Windows
|
||||||
|
fontheight = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Font(font.getFontName(), fontstyle, fontheight);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method retrieves the AWT Color representation from the colour hash table
|
||||||
|
*
|
||||||
|
* @param index Description of the Parameter
|
||||||
|
* @param deflt Description of the Parameter
|
||||||
|
* @return The aWTColor value
|
||||||
|
*/
|
||||||
|
public final static Color getAWTColor(int index, Color deflt) {
|
||||||
|
HSSFColor clr = (HSSFColor) colors.get(new Integer(index));
|
||||||
|
if (clr == null) {
|
||||||
|
return deflt;
|
||||||
|
}
|
||||||
|
return getAWTColor(clr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the aWTColor attribute of the SVTableUtils class
|
||||||
|
*
|
||||||
|
* @param clr Description of the Parameter
|
||||||
|
* @return The aWTColor value
|
||||||
|
*/
|
||||||
|
public final static Color getAWTColor(HSSFColor clr) {
|
||||||
|
short[] rgb = clr.getTriplet();
|
||||||
|
return new Color(rgb[0], rgb[1], rgb[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
172
src/contrib/src/org/apache/poi/hssf/contrib/view/SViewer.java
Normal file
172
src/contrib/src/org/apache/poi/hssf/contrib/view/SViewer.java
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
|
||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sheet Viewer - Views XLS files via HSSF. Can be used as an applet with
|
||||||
|
* filename="" or as a applications (pass the filename as the first parameter).
|
||||||
|
* Or you can pass it a URL in a "url" parameter when run as an applet or just
|
||||||
|
* that first parameter must start with http:// and it will guess its a url. I
|
||||||
|
* only tested it as an applet though, so it probably won't work...you fix it.
|
||||||
|
*
|
||||||
|
* @author Andrew C. Oliver
|
||||||
|
* @author Jason Height
|
||||||
|
*/
|
||||||
|
public class SViewer extends JApplet {
|
||||||
|
private SViewerPanel panel;
|
||||||
|
boolean isStandalone = false;
|
||||||
|
String filename = null;
|
||||||
|
|
||||||
|
/**Get a parameter value*/
|
||||||
|
public String getParameter(String key, String def) {
|
||||||
|
return isStandalone ? System.getProperty(key, def) :
|
||||||
|
(getParameter(key) != null ? getParameter(key) : def);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Construct the applet*/
|
||||||
|
public SViewer() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Initialize the applet*/
|
||||||
|
public void init() {
|
||||||
|
try {
|
||||||
|
jbInit();
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Component initialization*/
|
||||||
|
private void jbInit() throws Exception {
|
||||||
|
InputStream i = null;
|
||||||
|
boolean isurl = false;
|
||||||
|
if (filename == null) filename = getParameter("filename");
|
||||||
|
|
||||||
|
if (filename == null || filename.substring(0,7).equals("http://")) {
|
||||||
|
isurl = true;
|
||||||
|
if (filename == null) filename = getParameter("url");
|
||||||
|
i = getXLSFromURL(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
HSSFWorkbook wb = null;
|
||||||
|
if (isurl) {
|
||||||
|
wb = constructWorkbook(i);
|
||||||
|
} else {
|
||||||
|
wb = constructWorkbook(filename);
|
||||||
|
}
|
||||||
|
panel = new SViewerPanel(wb, false);
|
||||||
|
getContentPane().setLayout(new BorderLayout());
|
||||||
|
getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private HSSFWorkbook constructWorkbook(String filename) throws FileNotFoundException, IOException {
|
||||||
|
HSSFWorkbook wb = null;
|
||||||
|
FileInputStream in = new FileInputStream(filename);
|
||||||
|
wb = new HSSFWorkbook(in);
|
||||||
|
in.close();
|
||||||
|
return wb;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HSSFWorkbook constructWorkbook(InputStream in) throws IOException {
|
||||||
|
HSSFWorkbook wb = null;
|
||||||
|
|
||||||
|
wb = new HSSFWorkbook(in);
|
||||||
|
in.close();
|
||||||
|
return wb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Start the applet*/
|
||||||
|
public void start() {
|
||||||
|
}
|
||||||
|
/**Stop the applet*/
|
||||||
|
public void stop() {
|
||||||
|
}
|
||||||
|
/**Destroy the applet*/
|
||||||
|
public void destroy() {
|
||||||
|
}
|
||||||
|
/**Get Applet information*/
|
||||||
|
public String getAppletInfo() {
|
||||||
|
return "Applet Information";
|
||||||
|
}
|
||||||
|
/**Get parameter info*/
|
||||||
|
public String[][] getParameterInfo() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* opens a url and returns an inputstream
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private InputStream getXLSFromURL(String urlstring) throws MalformedURLException, IOException {
|
||||||
|
URL url = new URL(urlstring);
|
||||||
|
URLConnection uc = url.openConnection();
|
||||||
|
String field = uc.getHeaderField(0);
|
||||||
|
for (int i=0;field != null; i++) {
|
||||||
|
System.out.println(field);
|
||||||
|
field = uc.getHeaderField(i);
|
||||||
|
}
|
||||||
|
BufferedInputStream is = new BufferedInputStream(uc.getInputStream());
|
||||||
|
return is;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**Main method*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
throw new IllegalArgumentException("A filename to view must be supplied as the first argument, but none was given");
|
||||||
|
}
|
||||||
|
|
||||||
|
SViewer applet = new SViewer();
|
||||||
|
applet.isStandalone = true;
|
||||||
|
applet.filename = args[0];
|
||||||
|
Frame frame;
|
||||||
|
frame = new Frame() {
|
||||||
|
protected void processWindowEvent(WindowEvent e) {
|
||||||
|
super.processWindowEvent(e);
|
||||||
|
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public synchronized void setTitle(String title) {
|
||||||
|
super.setTitle(title);
|
||||||
|
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
frame.setTitle("Applet Frame");
|
||||||
|
frame.add(applet, BorderLayout.CENTER);
|
||||||
|
applet.init();
|
||||||
|
applet.start();
|
||||||
|
frame.setSize(400,320);
|
||||||
|
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
|
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
|
||||||
|
frame.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,292 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.contrib.view;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.table.*;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class presents the sheets to the user.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Andrew C. Oliver
|
||||||
|
* @author Jason Height
|
||||||
|
*/
|
||||||
|
public class SViewerPanel extends JPanel {
|
||||||
|
/** This field is the magic number to convert from a Character width to a
|
||||||
|
* java pixel width.
|
||||||
|
*
|
||||||
|
* When the "normal" font size in a workbook changes, this effects all
|
||||||
|
* of the heights and widths. Unfortunately there is no way to retrieve this
|
||||||
|
* information, hence the MAGIC number.
|
||||||
|
*
|
||||||
|
* This number may only work for the normal style font size of Arial size 10.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final int magicCharFactor = 7;
|
||||||
|
/** Reference to the wookbook that is being displayed*/
|
||||||
|
/* package */ HSSFWorkbook wb;
|
||||||
|
/** Reference to the tabs component*/
|
||||||
|
/* package */ JTabbedPane sheetPane;
|
||||||
|
/** Reference to the cell renderer that is used to render all cells*/
|
||||||
|
private SVTableCellRenderer cellRenderer;
|
||||||
|
/** Reference to the cell editor that is used to edit all cells.
|
||||||
|
* Only constructed if editing is allowed
|
||||||
|
*/
|
||||||
|
private SVTableCellEditor cellEditor;
|
||||||
|
/** Flag indicating if editing is allowed. Otherwise the viewer is in
|
||||||
|
* view only mode.
|
||||||
|
*/
|
||||||
|
private boolean allowEdits;
|
||||||
|
|
||||||
|
/**Construct the representation of the workbook*/
|
||||||
|
public SViewerPanel(HSSFWorkbook wb, boolean allowEdits) {
|
||||||
|
this.wb = wb;
|
||||||
|
this.allowEdits = allowEdits;
|
||||||
|
|
||||||
|
initialiseGui();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initialiseGui() {
|
||||||
|
cellRenderer = new SVTableCellRenderer(this.wb);
|
||||||
|
if (allowEdits)
|
||||||
|
cellEditor = new SVTableCellEditor(this.wb);
|
||||||
|
|
||||||
|
//Initialise the Panel
|
||||||
|
sheetPane = new JTabbedPane(JTabbedPane.BOTTOM);
|
||||||
|
|
||||||
|
if (allowEdits)
|
||||||
|
sheetPane.addMouseListener(createTabListener());
|
||||||
|
int sheetCount = wb.getNumberOfSheets();
|
||||||
|
for (int i=0; i<sheetCount;i++) {
|
||||||
|
String sheetName = wb.getSheetName(i);
|
||||||
|
//Add the new sheet to the tabbed pane
|
||||||
|
sheetPane.addTab(sheetName, makeSheetView(wb.getSheetAt(i)));
|
||||||
|
}
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
add(sheetPane, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected JComponent makeSheetView(HSSFSheet sheet) {
|
||||||
|
JTable sheetView = new JTable(new SVTableModel(sheet));
|
||||||
|
sheetView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
|
||||||
|
sheetView.setDefaultRenderer(HSSFCell.class, cellRenderer);
|
||||||
|
if (allowEdits)
|
||||||
|
sheetView.setDefaultEditor(HSSFCell.class, cellEditor);
|
||||||
|
JTableHeader header = sheetView.getTableHeader();
|
||||||
|
//Dont allow column reordering
|
||||||
|
header.setReorderingAllowed(false);
|
||||||
|
//Only allow column resizing if editing is allowed
|
||||||
|
header.setResizingAllowed(allowEdits);
|
||||||
|
|
||||||
|
//Set the columns the correct size
|
||||||
|
TableColumnModel columns = sheetView.getColumnModel();
|
||||||
|
for (int i=0; i< columns.getColumnCount(); i++) {
|
||||||
|
TableColumn column = columns.getColumn(i);
|
||||||
|
int width = sheet.getColumnWidth(i);
|
||||||
|
//256 is because the width is in 256ths of a character
|
||||||
|
column.setPreferredWidth(width/256*magicCharFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set the rows to the correct size
|
||||||
|
int rows = sheet.getPhysicalNumberOfRows();
|
||||||
|
Insets insets = cellRenderer.getInsets();
|
||||||
|
//Need to include the insets in the calculation of the row height to use.
|
||||||
|
int extraHeight = insets.bottom+insets.top;
|
||||||
|
for (int i=0; i< rows; i++) {
|
||||||
|
HSSFRow row = sheet.getRow(i);
|
||||||
|
if (row == null) {
|
||||||
|
sheetView.setRowHeight(i, (int)sheet.getDefaultRowHeightInPoints()+extraHeight);
|
||||||
|
} else {
|
||||||
|
sheetView.setRowHeight(i, (int)row.getHeightInPoints()+extraHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add the row header to the sheet
|
||||||
|
SVRowHeader rowHeader = new SVRowHeader(sheet, sheetView, extraHeight);
|
||||||
|
JScrollPane scroll = new JScrollPane( sheetView );
|
||||||
|
scroll.setRowHeaderView(rowHeader);
|
||||||
|
return scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g) {
|
||||||
|
//JMH I am only overriding this to get a picture of the time taken to paint
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
super.paint(g);
|
||||||
|
long elapsed = System.currentTimeMillis()-start;
|
||||||
|
System.out.println("Paint time = "+elapsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected MouseListener createTabListener() {
|
||||||
|
return new TabListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This class defines the default MouseListener that listens to
|
||||||
|
* mouse events in the tabbed pane
|
||||||
|
*
|
||||||
|
* The default is to popup a menu when the event occurs over a tab
|
||||||
|
*/
|
||||||
|
private class TabListener implements MouseListener {
|
||||||
|
public JPopupMenu popup;
|
||||||
|
public TabListener() {
|
||||||
|
popup = new JPopupMenu("Sheet");
|
||||||
|
popup.add(createInsertSheetAction());
|
||||||
|
popup.add(createDeleteSheetAction());
|
||||||
|
popup.add(createRenameSheetAction());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Action createInsertSheetAction() {
|
||||||
|
return new InsertSheetAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Action createDeleteSheetAction() {
|
||||||
|
return new DeleteSheetAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Action createRenameSheetAction() {
|
||||||
|
return new RenameSheetAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** This method will display the popup if the mouseevent is a popup event
|
||||||
|
* and the event occurred over a tab
|
||||||
|
*/
|
||||||
|
protected void checkPopup(MouseEvent e) {
|
||||||
|
if (e.isPopupTrigger()) {
|
||||||
|
int tab = sheetPane.getUI().tabForCoordinate(sheetPane, e.getX(), e.getY());
|
||||||
|
if (tab != -1) {
|
||||||
|
popup.show(sheetPane, e.getX(), e.getY());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
checkPopup(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mousePressed(MouseEvent e) {
|
||||||
|
checkPopup(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseReleased(MouseEvent e) {
|
||||||
|
checkPopup(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseEntered(MouseEvent e) {}
|
||||||
|
public void mouseExited(MouseEvent e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This class defines the action that is performed when the sheet is renamed*/
|
||||||
|
private class RenameSheetAction extends AbstractAction {
|
||||||
|
public RenameSheetAction() {
|
||||||
|
super("Rename");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
int tabIndex = sheetPane.getSelectedIndex();
|
||||||
|
if (tabIndex != -1) {
|
||||||
|
String newSheetName = JOptionPane.showInputDialog(sheetPane, "Enter a new Sheetname", "Rename Sheet", JOptionPane.QUESTION_MESSAGE);
|
||||||
|
if (newSheetName != null) {
|
||||||
|
wb.setSheetName(tabIndex, newSheetName);
|
||||||
|
sheetPane.setTitleAt(tabIndex, newSheetName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This class defines the action that is performed when a sheet is inserted*/
|
||||||
|
private class InsertSheetAction extends AbstractAction {
|
||||||
|
public InsertSheetAction() {
|
||||||
|
super("Insert");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
//Create a new sheet then search for the sheet and make sure that the
|
||||||
|
//sheetPane shows it.
|
||||||
|
HSSFSheet newSheet = wb.createSheet();
|
||||||
|
for (int i=0; i<wb.getNumberOfSheets();i++) {
|
||||||
|
HSSFSheet sheet = wb.getSheetAt(i);
|
||||||
|
if (newSheet == sheet) {
|
||||||
|
sheetPane.insertTab(wb.getSheetName(i), null, makeSheetView(sheet), null, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This class defines the action that is performed when the sheet is deleted*/
|
||||||
|
private class DeleteSheetAction extends AbstractAction {
|
||||||
|
public DeleteSheetAction() {
|
||||||
|
super("Delete");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
int tabIndex = sheetPane.getSelectedIndex();
|
||||||
|
if (tabIndex != -1) {
|
||||||
|
if (JOptionPane.showConfirmDialog(sheetPane, "Are you sure that you want to delete the selected sheet", "Delete Sheet?", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
|
||||||
|
wb.removeSheetAt(tabIndex);
|
||||||
|
sheetPane.remove(tabIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEditable() {
|
||||||
|
return allowEdits;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Main method*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if(args.length < 1) {
|
||||||
|
throw new IllegalArgumentException("A filename to view must be supplied as the first argument, but none was given");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
FileInputStream in = new FileInputStream(args[0]);
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook(in);
|
||||||
|
in.close();
|
||||||
|
|
||||||
|
SViewerPanel p = new SViewerPanel(wb, true);
|
||||||
|
JFrame frame;
|
||||||
|
frame = new JFrame() {
|
||||||
|
protected void processWindowEvent(WindowEvent e) {
|
||||||
|
super.processWindowEvent(e);
|
||||||
|
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public synchronized void setTitle(String title) {
|
||||||
|
super.setTitle(title);
|
||||||
|
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
frame.setTitle("Viewer Frame");
|
||||||
|
frame.getContentPane().add(p, BorderLayout.CENTER);
|
||||||
|
frame.setSize(800,640);
|
||||||
|
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
|
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
|
||||||
|
frame.setVisible(true);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,405 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.usermodel.contrib;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFFont;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Various utility functions that make working with a cells and rows easier. The various
|
||||||
|
* methods that deal with style's allow you to create your HSSFCellStyles as you need them.
|
||||||
|
* When you apply a style change to a cell, the code will attempt to see if a style already
|
||||||
|
* exists that meets your needs. If not, then it will create a new style. This is to prevent
|
||||||
|
* creating too many styles. there is an upper limit in Excel on the number of styles that
|
||||||
|
* can be supported.
|
||||||
|
*
|
||||||
|
*@author Eric Pugh epugh@upstate.com
|
||||||
|
*/
|
||||||
|
public final class HSSFCellUtil
|
||||||
|
{
|
||||||
|
|
||||||
|
public static final String ALIGNMENT = "alignment";
|
||||||
|
public static final String BORDER_BOTTOM = "borderBottom";
|
||||||
|
public static final String BORDER_LEFT = "borderLeft";
|
||||||
|
public static final String BORDER_RIGHT = "borderRight";
|
||||||
|
public static final String BORDER_TOP = "borderTop";
|
||||||
|
public static final String BOTTOM_BORDER_COLOR = "bottomBorderColor";
|
||||||
|
public static final String DATA_FORMAT = "dataFormat";
|
||||||
|
public static final String FILL_BACKGROUND_COLOR = "fillBackgroundColor";
|
||||||
|
public static final String FILL_FOREGROUND_COLOR = "fillForegroundColor";
|
||||||
|
public static final String FILL_PATTERN = "fillPattern";
|
||||||
|
public static final String FONT = "font";
|
||||||
|
public static final String HIDDEN = "hidden";
|
||||||
|
public static final String INDENTION = "indention";
|
||||||
|
public static final String LEFT_BORDER_COLOR = "leftBorderColor";
|
||||||
|
public static final String LOCKED = "locked";
|
||||||
|
public static final String RIGHT_BORDER_COLOR = "rightBorderColor";
|
||||||
|
public static final String ROTATION = "rotation";
|
||||||
|
public static final String TOP_BORDER_COLOR = "topBorderColor";
|
||||||
|
public static final String VERTICAL_ALIGNMENT = "verticalAlignment";
|
||||||
|
public static final String WRAP_TEXT = "wrapText";
|
||||||
|
|
||||||
|
private static UnicodeMapping unicodeMappings[];
|
||||||
|
|
||||||
|
private static final class UnicodeMapping {
|
||||||
|
|
||||||
|
public final String entityName;
|
||||||
|
public final String resolvedValue;
|
||||||
|
|
||||||
|
public UnicodeMapping(String pEntityName, String pResolvedValue) {
|
||||||
|
entityName = "&" + pEntityName + ";";
|
||||||
|
resolvedValue = pResolvedValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private HSSFCellUtil() {
|
||||||
|
// no instances of this class
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a row from the spreadsheet, and create it if it doesn't exist.
|
||||||
|
*
|
||||||
|
*@param rowCounter The 0 based row number
|
||||||
|
*@param sheet The sheet that the row is part of.
|
||||||
|
*@return The row indicated by the rowCounter
|
||||||
|
*/
|
||||||
|
public static HSSFRow getRow( int rowCounter, HSSFSheet sheet )
|
||||||
|
{
|
||||||
|
HSSFRow row = sheet.getRow( rowCounter );
|
||||||
|
if ( row == null )
|
||||||
|
{
|
||||||
|
row = sheet.createRow( rowCounter );
|
||||||
|
}
|
||||||
|
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a specific cell from a row. If the cell doesn't exist,
|
||||||
|
* then create it.
|
||||||
|
*
|
||||||
|
*@param row The row that the cell is part of
|
||||||
|
*@param column The column index that the cell is in.
|
||||||
|
*@return The cell indicated by the column.
|
||||||
|
*/
|
||||||
|
public static HSSFCell getCell( HSSFRow row, int column )
|
||||||
|
{
|
||||||
|
HSSFCell cell = row.getCell( column );
|
||||||
|
|
||||||
|
if ( cell == null )
|
||||||
|
{
|
||||||
|
cell = row.createCell(column );
|
||||||
|
}
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a cell, gives it a value, and applies a style if provided
|
||||||
|
*
|
||||||
|
* @param row the row to create the cell in
|
||||||
|
* @param column the column index to create the cell in
|
||||||
|
* @param value The value of the cell
|
||||||
|
* @param style If the style is not null, then set
|
||||||
|
* @return A new HSSFCell
|
||||||
|
*/
|
||||||
|
public static HSSFCell createCell( HSSFRow row, int column, String value, HSSFCellStyle style )
|
||||||
|
{
|
||||||
|
HSSFCell cell = getCell( row, column );
|
||||||
|
|
||||||
|
cell.setCellValue(new HSSFRichTextString(value));
|
||||||
|
if ( style != null )
|
||||||
|
{
|
||||||
|
cell.setCellStyle( style );
|
||||||
|
}
|
||||||
|
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a cell, and give it a value.
|
||||||
|
*
|
||||||
|
*@param row the row to create the cell in
|
||||||
|
*@param column the column index to create the cell in
|
||||||
|
*@param value The value of the cell
|
||||||
|
*@return A new HSSFCell.
|
||||||
|
*/
|
||||||
|
public static HSSFCell createCell( HSSFRow row, int column, String value )
|
||||||
|
{
|
||||||
|
return createCell( row, column, value, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Take a cell, and align it.
|
||||||
|
*
|
||||||
|
*@param cell the cell to set the alignment for
|
||||||
|
*@param workbook The workbook that is being worked with.
|
||||||
|
*@param align the column alignment to use.
|
||||||
|
*
|
||||||
|
* @see HSSFCellStyle for alignment options
|
||||||
|
*/
|
||||||
|
public static void setAlignment( HSSFCell cell, HSSFWorkbook workbook, short align )
|
||||||
|
{
|
||||||
|
setCellStyleProperty( cell, workbook, ALIGNMENT, new Short( align ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Take a cell, and apply a font to it
|
||||||
|
*
|
||||||
|
*@param cell the cell to set the alignment for
|
||||||
|
*@param workbook The workbook that is being worked with.
|
||||||
|
*@param font The HSSFFont that you want to set...
|
||||||
|
*/
|
||||||
|
public static void setFont( HSSFCell cell, HSSFWorkbook workbook, HSSFFont font )
|
||||||
|
{
|
||||||
|
setCellStyleProperty( cell, workbook, FONT, font );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method attempt to find an already existing HSSFCellStyle that matches
|
||||||
|
* what you want the style to be. If it does not find the style, then it
|
||||||
|
* creates a new one. If it does create a new one, then it applies the
|
||||||
|
* propertyName and propertyValue to the style. This is necessary because
|
||||||
|
* Excel has an upper limit on the number of Styles that it supports.
|
||||||
|
*
|
||||||
|
*@param workbook The workbook that is being worked with.
|
||||||
|
*@param propertyName The name of the property that is to be
|
||||||
|
* changed.
|
||||||
|
*@param propertyValue The value of the property that is to be
|
||||||
|
* changed.
|
||||||
|
*@param cell The cell that needs it's style changes
|
||||||
|
*@exception NestableException Thrown if an error happens.
|
||||||
|
*/
|
||||||
|
public static void setCellStyleProperty( HSSFCell cell, HSSFWorkbook workbook, String propertyName, Object propertyValue )
|
||||||
|
{
|
||||||
|
HSSFCellStyle originalStyle = cell.getCellStyle();
|
||||||
|
HSSFCellStyle newStyle = null;
|
||||||
|
Map values = getFormatProperties( originalStyle );
|
||||||
|
values.put( propertyName, propertyValue );
|
||||||
|
|
||||||
|
// index seems like what index the cellstyle is in the list of styles for a workbook.
|
||||||
|
// not good to compare on!
|
||||||
|
short numberCellStyles = workbook.getNumCellStyles();
|
||||||
|
|
||||||
|
for ( short i = 0; i < numberCellStyles; i++ )
|
||||||
|
{
|
||||||
|
HSSFCellStyle wbStyle = workbook.getCellStyleAt( i );
|
||||||
|
Map wbStyleMap = getFormatProperties( wbStyle );
|
||||||
|
|
||||||
|
if ( wbStyleMap.equals( values ) )
|
||||||
|
{
|
||||||
|
newStyle = wbStyle;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( newStyle == null )
|
||||||
|
{
|
||||||
|
newStyle = workbook.createCellStyle();
|
||||||
|
setFormatProperties( newStyle, workbook, values );
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.setCellStyle( newStyle );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a map containing the format properties of the given cell style.
|
||||||
|
*
|
||||||
|
* @param style cell style
|
||||||
|
* @return map of format properties (String -> Object)
|
||||||
|
* @see #setFormatProperties(HSSFCellStyle, Map)
|
||||||
|
*/
|
||||||
|
private static Map getFormatProperties(HSSFCellStyle style) {
|
||||||
|
Map properties = new HashMap();
|
||||||
|
putShort( properties, ALIGNMENT, style.getAlignment() );
|
||||||
|
putShort( properties, BORDER_BOTTOM, style.getBorderBottom() );
|
||||||
|
putShort( properties, BORDER_LEFT, style.getBorderLeft() );
|
||||||
|
putShort( properties, BORDER_RIGHT, style.getBorderRight() );
|
||||||
|
putShort( properties, BORDER_TOP, style.getBorderTop() );
|
||||||
|
putShort( properties, BOTTOM_BORDER_COLOR, style.getBottomBorderColor() );
|
||||||
|
putShort( properties, DATA_FORMAT, style.getDataFormat() );
|
||||||
|
putShort( properties, FILL_BACKGROUND_COLOR, style.getFillBackgroundColor() );
|
||||||
|
putShort( properties, FILL_FOREGROUND_COLOR, style.getFillForegroundColor() );
|
||||||
|
putShort( properties, FILL_PATTERN, style.getFillPattern() );
|
||||||
|
putShort( properties, FONT, style.getFontIndex() );
|
||||||
|
putBoolean( properties, HIDDEN, style.getHidden() );
|
||||||
|
putShort( properties, INDENTION, style.getIndention() );
|
||||||
|
putShort( properties, LEFT_BORDER_COLOR, style.getLeftBorderColor() );
|
||||||
|
putBoolean( properties, LOCKED, style.getLocked() );
|
||||||
|
putShort( properties, RIGHT_BORDER_COLOR, style.getRightBorderColor() );
|
||||||
|
putShort( properties, ROTATION, style.getRotation() );
|
||||||
|
putShort( properties, TOP_BORDER_COLOR, style.getTopBorderColor() );
|
||||||
|
putShort( properties, VERTICAL_ALIGNMENT, style.getVerticalAlignment() );
|
||||||
|
putBoolean( properties, WRAP_TEXT, style.getWrapText() );
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the format properties of the given style based on the given map.
|
||||||
|
*
|
||||||
|
* @param style cell style
|
||||||
|
* @param workbook parent workbook
|
||||||
|
* @param properties map of format properties (String -> Object)
|
||||||
|
* @see #getFormatProperties(HSSFCellStyle)
|
||||||
|
*/
|
||||||
|
private static void setFormatProperties(
|
||||||
|
HSSFCellStyle style, HSSFWorkbook workbook, Map properties) {
|
||||||
|
style.setAlignment( getShort( properties, ALIGNMENT ) );
|
||||||
|
style.setBorderBottom( getShort( properties, BORDER_BOTTOM ) );
|
||||||
|
style.setBorderLeft( getShort( properties, BORDER_LEFT ) );
|
||||||
|
style.setBorderRight( getShort( properties, BORDER_RIGHT ) );
|
||||||
|
style.setBorderTop( getShort( properties, BORDER_TOP ) );
|
||||||
|
style.setBottomBorderColor( getShort( properties, BOTTOM_BORDER_COLOR ) );
|
||||||
|
style.setDataFormat( getShort( properties, DATA_FORMAT ) );
|
||||||
|
style.setFillBackgroundColor( getShort( properties, FILL_BACKGROUND_COLOR ) );
|
||||||
|
style.setFillForegroundColor( getShort( properties, FILL_FOREGROUND_COLOR ) );
|
||||||
|
style.setFillPattern( getShort( properties, FILL_PATTERN ) );
|
||||||
|
style.setFont( workbook.getFontAt( getShort( properties, FONT ) ) );
|
||||||
|
style.setHidden( getBoolean( properties, HIDDEN ) );
|
||||||
|
style.setIndention( getShort( properties, INDENTION ) );
|
||||||
|
style.setLeftBorderColor( getShort( properties, LEFT_BORDER_COLOR ) );
|
||||||
|
style.setLocked( getBoolean( properties, LOCKED ) );
|
||||||
|
style.setRightBorderColor( getShort( properties, RIGHT_BORDER_COLOR ) );
|
||||||
|
style.setRotation( getShort( properties, ROTATION ) );
|
||||||
|
style.setTopBorderColor( getShort( properties, TOP_BORDER_COLOR ) );
|
||||||
|
style.setVerticalAlignment( getShort( properties, VERTICAL_ALIGNMENT ) );
|
||||||
|
style.setWrapText( getBoolean( properties, WRAP_TEXT ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method that returns the named short value form the given map.
|
||||||
|
* Returns zero if the property does not exist, or is not a {@link Short}.
|
||||||
|
*
|
||||||
|
* @param properties map of named properties (String -> Object)
|
||||||
|
* @param name property name
|
||||||
|
* @return property value, or zero
|
||||||
|
*/
|
||||||
|
private static short getShort(Map properties, String name) {
|
||||||
|
Object value = properties.get( name );
|
||||||
|
if ( value instanceof Short ) {
|
||||||
|
return ((Short) value).shortValue();
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method that returns the named boolean value form the given map.
|
||||||
|
* Returns false if the property does not exist, or is not a {@link Boolean}.
|
||||||
|
*
|
||||||
|
* @param properties map of properties (String -> Object)
|
||||||
|
* @param name property name
|
||||||
|
* @return property value, or false
|
||||||
|
*/
|
||||||
|
private static boolean getBoolean(Map properties, String name) {
|
||||||
|
Object value = properties.get( name );
|
||||||
|
if ( value instanceof Boolean ) {
|
||||||
|
return ((Boolean) value).booleanValue();
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method that puts the named short value to the given map.
|
||||||
|
*
|
||||||
|
* @param properties map of properties (String -> Object)
|
||||||
|
* @param name property name
|
||||||
|
* @param value property value
|
||||||
|
*/
|
||||||
|
private static void putShort(Map properties, String name, short value) {
|
||||||
|
properties.put( name, new Short( value ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method that puts the named boolean value to the given map.
|
||||||
|
*
|
||||||
|
* @param properties map of properties (String -> Object)
|
||||||
|
* @param name property name
|
||||||
|
* @param value property value
|
||||||
|
*/
|
||||||
|
private static void putBoolean(Map properties, String name, boolean value) {
|
||||||
|
properties.put( name, new Boolean( value ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Looks for text in the cell that should be unicode, like α and provides the
|
||||||
|
* unicode version of it.
|
||||||
|
*
|
||||||
|
*@param cell The cell to check for unicode values
|
||||||
|
*@return transalted to unicode
|
||||||
|
*/
|
||||||
|
public static HSSFCell translateUnicodeValues( HSSFCell cell )
|
||||||
|
{
|
||||||
|
|
||||||
|
String s = cell.getRichStringCellValue().getString();
|
||||||
|
boolean foundUnicode = false;
|
||||||
|
String lowerCaseStr = s.toLowerCase();
|
||||||
|
|
||||||
|
for (int i = 0; i < unicodeMappings.length; i++) {
|
||||||
|
UnicodeMapping entry = unicodeMappings[i];
|
||||||
|
String key = entry.entityName;
|
||||||
|
if ( lowerCaseStr.indexOf( key ) != -1 )
|
||||||
|
{
|
||||||
|
s = s.replaceAll(key, entry.resolvedValue);
|
||||||
|
foundUnicode = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( foundUnicode )
|
||||||
|
{
|
||||||
|
cell.setCellValue(new HSSFRichTextString(s));
|
||||||
|
}
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
unicodeMappings = new UnicodeMapping[] {
|
||||||
|
um("alpha", "\u03B1" ),
|
||||||
|
um("beta", "\u03B2" ),
|
||||||
|
um("gamma", "\u03B3" ),
|
||||||
|
um("delta", "\u03B4" ),
|
||||||
|
um("epsilon", "\u03B5" ),
|
||||||
|
um("zeta", "\u03B6" ),
|
||||||
|
um("eta", "\u03B7" ),
|
||||||
|
um("theta", "\u03B8" ),
|
||||||
|
um("iota", "\u03B9" ),
|
||||||
|
um("kappa", "\u03BA" ),
|
||||||
|
um("lambda", "\u03BB" ),
|
||||||
|
um("mu", "\u03BC" ),
|
||||||
|
um("nu", "\u03BD" ),
|
||||||
|
um("xi", "\u03BE" ),
|
||||||
|
um("omicron", "\u03BF" ),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static UnicodeMapping um(String entityName, String resolvedValue) {
|
||||||
|
return new UnicodeMapping(entityName, resolvedValue);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,277 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
package org.apache.poi.hssf.usermodel.contrib;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.hssf.util.CellRangeAddress;
|
||||||
|
import org.apache.poi.hssf.util.Region;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Various utility functions that make working with a region of cells easier.
|
||||||
|
*
|
||||||
|
* @author Eric Pugh epugh@upstate.com
|
||||||
|
*/
|
||||||
|
public final class HSSFRegionUtil {
|
||||||
|
|
||||||
|
private HSSFRegionUtil() {
|
||||||
|
// no instances of this class
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* For setting the same property on many cells to the same value
|
||||||
|
*/
|
||||||
|
private static final class CellPropertySetter {
|
||||||
|
|
||||||
|
private final HSSFWorkbook _workbook;
|
||||||
|
private final String _propertyName;
|
||||||
|
private final Short _propertyValue;
|
||||||
|
|
||||||
|
public CellPropertySetter(HSSFWorkbook workbook, String propertyName, int value) {
|
||||||
|
_workbook = workbook;
|
||||||
|
_propertyName = propertyName;
|
||||||
|
_propertyValue = new Short((short)value);
|
||||||
|
}
|
||||||
|
public void setProperty(HSSFRow row, int column) {
|
||||||
|
HSSFCell cell = HSSFCellUtil.getCell(row, column);
|
||||||
|
HSSFCellUtil.setCellStyleProperty(cell, _workbook, _propertyName, _propertyValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static CellRangeAddress toCRA(Region region) {
|
||||||
|
return Region.convertToCellRangeAddress(region);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setBorderLeft(short border, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setBorderLeft(border, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the left border for a region of cells by manipulating the cell style
|
||||||
|
* of the individual cells on the left
|
||||||
|
*
|
||||||
|
* @param border The new border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setBorderLeft(int border, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int rowStart = region.getFirstRow();
|
||||||
|
int rowEnd = region.getLastRow();
|
||||||
|
int column = region.getFirstColumn();
|
||||||
|
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.BORDER_LEFT, border);
|
||||||
|
for (int i = rowStart; i <= rowEnd; i++) {
|
||||||
|
cps.setProperty(HSSFCellUtil.getRow(i, sheet), column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setLeftBorderColor(short color, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setLeftBorderColor(color, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the leftBorderColor attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param color The color of the border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setLeftBorderColor(int color, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int rowStart = region.getFirstRow();
|
||||||
|
int rowEnd = region.getLastRow();
|
||||||
|
int column = region.getFirstColumn();
|
||||||
|
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.LEFT_BORDER_COLOR, color);
|
||||||
|
for (int i = rowStart; i <= rowEnd; i++) {
|
||||||
|
cps.setProperty(HSSFCellUtil.getRow(i, sheet), column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setBorderRight(short border, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setBorderRight(border, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the borderRight attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param border The new border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setBorderRight(int border, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int rowStart = region.getFirstRow();
|
||||||
|
int rowEnd = region.getLastRow();
|
||||||
|
int column = region.getLastColumn();
|
||||||
|
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.BORDER_RIGHT, border);
|
||||||
|
for (int i = rowStart; i <= rowEnd; i++) {
|
||||||
|
cps.setProperty(HSSFCellUtil.getRow(i, sheet), column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setRightBorderColor(short color, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setRightBorderColor(color, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the rightBorderColor attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param color The color of the border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setRightBorderColor(int color, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int rowStart = region.getFirstRow();
|
||||||
|
int rowEnd = region.getLastRow();
|
||||||
|
int column = region.getLastColumn();
|
||||||
|
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.RIGHT_BORDER_COLOR, color);
|
||||||
|
for (int i = rowStart; i <= rowEnd; i++) {
|
||||||
|
cps.setProperty(HSSFCellUtil.getRow(i, sheet), column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setBorderBottom(short border, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setBorderBottom(border, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the borderBottom attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param border The new border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setBorderBottom(int border, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int colStart = region.getFirstColumn();
|
||||||
|
int colEnd = region.getLastColumn();
|
||||||
|
int rowIndex = region.getLastRow();
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.BORDER_BOTTOM, border);
|
||||||
|
HSSFRow row = HSSFCellUtil.getRow(rowIndex, sheet);
|
||||||
|
for (int i = colStart; i <= colEnd; i++) {
|
||||||
|
cps.setProperty(row, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setBottomBorderColor(short color, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setBottomBorderColor(color, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the bottomBorderColor attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param color The color of the border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setBottomBorderColor(int color, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int colStart = region.getFirstColumn();
|
||||||
|
int colEnd = region.getLastColumn();
|
||||||
|
int rowIndex = region.getLastRow();
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.BOTTOM_BORDER_COLOR, color);
|
||||||
|
HSSFRow row = HSSFCellUtil.getRow(rowIndex, sheet);
|
||||||
|
for (int i = colStart; i <= colEnd; i++) {
|
||||||
|
cps.setProperty(row, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setBorderTop(short border, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setBorderTop(border, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the borderBottom attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param border The new border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setBorderTop(int border, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int colStart = region.getFirstColumn();
|
||||||
|
int colEnd = region.getLastColumn();
|
||||||
|
int rowIndex = region.getFirstRow();
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.BORDER_TOP, border);
|
||||||
|
HSSFRow row = HSSFCellUtil.getRow(rowIndex, sheet);
|
||||||
|
for (int i = colStart; i <= colEnd; i++) {
|
||||||
|
cps.setProperty(row, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated (Aug 2008) use {@link CellRangeAddress} instead of {@link Region}
|
||||||
|
*/
|
||||||
|
public static void setTopBorderColor(short color, Region region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
setTopBorderColor(color, toCRA(region), sheet, workbook);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Sets the topBorderColor attribute of the HSSFRegionUtil object
|
||||||
|
*
|
||||||
|
* @param color The color of the border
|
||||||
|
* @param region The region that should have the border
|
||||||
|
* @param workbook The workbook that the region is on.
|
||||||
|
* @param sheet The sheet that the region is on.
|
||||||
|
*/
|
||||||
|
public static void setTopBorderColor(int color, CellRangeAddress region, HSSFSheet sheet,
|
||||||
|
HSSFWorkbook workbook) {
|
||||||
|
int colStart = region.getFirstColumn();
|
||||||
|
int colEnd = region.getLastColumn();
|
||||||
|
int rowIndex = region.getFirstRow();
|
||||||
|
CellPropertySetter cps = new CellPropertySetter(workbook, HSSFCellUtil.TOP_BORDER_COLOR, color);
|
||||||
|
HSSFRow row = HSSFCellUtil.getRow(rowIndex, sheet);
|
||||||
|
for (int i = colStart; i <= colEnd; i++) {
|
||||||
|
cps.setProperty(row, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
src/contrib/testcases/dummy.txt
Normal file
0
src/contrib/testcases/dummy.txt
Normal file
10
src/documentation/README.txt
Normal file
10
src/documentation/README.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
This is the base documentation directory. It usually contains two files:
|
||||||
|
|
||||||
|
skinconf.xml # This file customizes Forrest for your project. In it, you
|
||||||
|
# tell forrest the project name, logo, copyright info, etc
|
||||||
|
|
||||||
|
sitemap.xmap # Optional. This sitemap overrides the default one bundled
|
||||||
|
# with Forrest. Typically, one would copy a sitemap from
|
||||||
|
# xml-forrest/src/resources/conf/sitemap.xmap, and customize
|
||||||
|
# it.
|
||||||
|
|
46
src/documentation/Release-Checklist.txt
Normal file
46
src/documentation/Release-Checklist.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Release Checklist
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
- ensure the changelog is up to date
|
||||||
|
- tag SVN
|
||||||
|
- build distributions as if it was the final release
|
||||||
|
- update any filename dates from today's date, to the date that the
|
||||||
|
vote will end (typically 7 days time)
|
||||||
|
- copy the -redirect pom to a subdirectory of redirect/, and remove
|
||||||
|
-redirect from its name
|
||||||
|
- sign and checksum distributions as per
|
||||||
|
http://www.apache.org/dev/mirror-step-by-step.html
|
||||||
|
- upload to your area of people.apache.org under /<version>-RC-<x>/
|
||||||
|
(eg 3.0.1-RC-2)
|
||||||
|
- add a README.txt to the directory that states the files are a
|
||||||
|
release candidate pending a vote, despite their name being -FINAL
|
||||||
|
- include the URL of this in the release vote (goes to dev, not user)
|
||||||
|
(eg http://people.apache.org/~nick/3.0.1-RC-2/)
|
||||||
|
|
||||||
|
- wait for release vote to pass
|
||||||
|
- send notification of vote passing to private@
|
||||||
|
|
||||||
|
- move distributions from your area of people.apache.org to the
|
||||||
|
distribution directories on www.apache.org/dist/poi/ and
|
||||||
|
people.apache.org/repo/m1-ibiblio-rsync-repository/org.apache.poi/
|
||||||
|
- move the redirection pom from your area of people.apache.org to
|
||||||
|
people.apache.org/repo/m1-ibiblio-rsync-repository/poi/poms/
|
||||||
|
- copy the new distributions to archive.apache.org
|
||||||
|
- remove the old distributions from www.apache.org/dist/
|
||||||
|
- wait for the distributions to appear on your favourite mirror
|
||||||
|
|
||||||
|
- generate announcements
|
||||||
|
- generate www pages and upload
|
||||||
|
- bump release ID in build.xml
|
||||||
|
- send announcements to user and dev lists
|
||||||
|
- send announcements to announcement@apache.org, announcements@jakarta.apache.org
|
||||||
|
- news to newsgroups: comp.lang.java.softwaretools
|
||||||
|
- post stories on
|
||||||
|
*) jakarta news page
|
||||||
|
*) theserverside.com
|
||||||
|
*) freshmeat.net
|
||||||
|
*) www.javaworld.com
|
||||||
|
*) www.javalobby.com
|
||||||
|
*) www.jguru.com
|
||||||
|
*) www.slashdot.org
|
||||||
|
(and follow them up)
|
86
src/documentation/content/xdocs/3rdparty.xml
Normal file
86
src/documentation/content/xdocs/3rdparty.xml
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "./dtd/document-v13.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>Third Party Contributions</title>
|
||||||
|
<authors>
|
||||||
|
<person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<section><title>How to Contribute</title>
|
||||||
|
<p>
|
||||||
|
See <link href="contrib.xml">How to contribute to Poi</link>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section><title>Contributed Components</title>
|
||||||
|
<p>
|
||||||
|
These are not necessarily deemed to be high enough quality to be included in the
|
||||||
|
core distribution, but they have been tested under <link href="contrib.xml">
|
||||||
|
several key environments</link>, they are provided under the same license
|
||||||
|
as Poi, and they are included in the POI distribution under the
|
||||||
|
<code>contrib/</code> directory.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>None as yet!</strong> - although you can expect that some of the links
|
||||||
|
listed below will eventually migrate to the "contributed components" level, and
|
||||||
|
then maybe even into the main distribution.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section><title>Patch Queue</title>
|
||||||
|
<p><link href="patches.html">Submissions of modifications</link>
|
||||||
|
to POI which are awaiting review. Anyone can
|
||||||
|
comment on them on the dev mailing list - code reviewers are needed!
|
||||||
|
<strong>Use these at your own risk</strong> - although POI has no guarantee
|
||||||
|
either, these patches have not been reviewed, let alone accepted.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section><title>Other Extensions</title>
|
||||||
|
<p>The other extensions listed here are <strong>not endorsed</strong> by the POI
|
||||||
|
project either - they are provided as a convenience only. They may or may not work,
|
||||||
|
they may or may not be open source, etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>To have a link added to this table, see <link href="contrib.xml">How to contribute
|
||||||
|
to POI</link>.</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Name and Link</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th>Licensing</th>
|
||||||
|
<th>Contact</th>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
92
src/documentation/content/xdocs/book.xml
Normal file
92
src/documentation/content/xdocs/book.xml
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "./dtd/book-cocoon-v10.dtd">
|
||||||
|
|
||||||
|
<book software="POI"
|
||||||
|
title="POI Project Documentation"
|
||||||
|
copyright="@year@ POI Project"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<menu label="Apache POI">
|
||||||
|
<menu-item label="TOP" href="index.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Marketing">
|
||||||
|
<menu-item label="Case Studies" href="casestudies.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Project">
|
||||||
|
<menu-item label="Overview" href="overview.html"/>
|
||||||
|
<menu-item label="POIFS" href="poifs/index.html"/>
|
||||||
|
<menu-item label="HSSF" href="hssf/index.html"/>
|
||||||
|
<menu-item label="HWPF" href="hwpf/index.html"/>
|
||||||
|
<menu-item label="HPSF" href="hpsf/index.html"/>
|
||||||
|
<menu-item label="HSLF" href="hslf/index.html"/>
|
||||||
|
<menu-item label="HSMF" href="hsmf/index.html"/>
|
||||||
|
<menu-item label="HDGF" href="hdgf/index.html"/>
|
||||||
|
<menu-item label="HPBF" href="hpbf/index.html"/>
|
||||||
|
<menu-item label="POI-Ruby" href="poi-ruby.html"/>
|
||||||
|
<menu-item label="POI-Utils" href="utils/index.html"/>
|
||||||
|
<menu-item label="Text Extraction" href="text-extraction.html"/>
|
||||||
|
<menu-item label="Download" href="ext:download"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Community">
|
||||||
|
<menu-item label="News" href="news.html"/>
|
||||||
|
<menu-item label="Mirrors" href="mirrors.html"/>
|
||||||
|
<menu-item label="Changes" href="changes.html"/>
|
||||||
|
<menu-item label="To Do" href="todo.html"/>
|
||||||
|
<menu-item label="Get Involved" href="getinvolved/index.html"/>
|
||||||
|
<menu-item label="Mailing Lists" href="mailinglists.html"/>
|
||||||
|
<menu-item label="Vision" href="plan/POI20Vision.html"/>
|
||||||
|
<menu-item label="History and Future" href="historyandfuture.html"/>
|
||||||
|
<menu-item label="Who We Are" href="who.html"/>
|
||||||
|
<menu-item label="Resolutions" href="resolutions/index.html"/>
|
||||||
|
<menu-item label="Sponsors" href="http://www.apache.org/foundation/thanks.html" />
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Docs">
|
||||||
|
<menu-item label="Javadocs" href="ext:javadoc"/>
|
||||||
|
<menu-item label="FAQ" href="faq.html"/>
|
||||||
|
<menu-item label="Legal" href="legal.html"/>
|
||||||
|
<menu-item label="References" href="references/index.html"/>
|
||||||
|
<menu-item label="How to Build" href="howtobuild.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Translations">
|
||||||
|
<menu-item label="Index" href="trans/index.html"/>
|
||||||
|
<menu-item label="Guidelines" href="trans/guidelines.html"/>
|
||||||
|
<menu-item label="German (DE)" href="trans/de/index.html"/>
|
||||||
|
<menu-item label="Spanish (ES)" href="trans/es/index.html"/>
|
||||||
|
<menu-item label="Japanese (Web)" href="http://jakarta.terra-intl.com/poi/"/>
|
||||||
|
<menu-item label="Korean (Web)" href="http://jakarta.apache-korea.org/poi/"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Code">
|
||||||
|
<menu-item label="Subversion (current source code)" href="subversion.html"/>
|
||||||
|
<menu-item label="Top Voted Bugs" href="http://issues.apache.org/bugzilla/buglist.cgi?votes=1&product=POI&order=bugs.votes"/>
|
||||||
|
<menu-item label="Bug Database" href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI"/>
|
||||||
|
<menu-item label="Patches" href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI&short_desc=%5BPATCH%5D&short_desc_type=allwordssubstr"/>
|
||||||
|
<menu-item label="Junit Test Results" href="ext:junit"/>
|
||||||
|
<menu-item label="Dependency Metrics" href="ext:jdepend"/>
|
||||||
|
<!-- <menu-item label="Checkstyle Metrics" href="http://jakarta.apache.org/poi/metrics/checkstyle/"/> -->
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
</book>
|
211
src/documentation/content/xdocs/casestudies.xml
Normal file
211
src/documentation/content/xdocs/casestudies.xml
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "./dtd/document-v13.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>Apache POI - Case Studies</title>
|
||||||
|
<authors>
|
||||||
|
<person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
|
||||||
|
<person id="CR" name="Cameron Riley" email="crileyNO@SPAMekmail.com"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<section>
|
||||||
|
<title>Introduction</title>
|
||||||
|
<p>
|
||||||
|
A number of people are using POI for a variety of purposes. As with
|
||||||
|
any new API or technology, the first question people generally ask
|
||||||
|
is not "how can I" but rather "Who else is doing what I'm about to
|
||||||
|
do?" This is understandable with the abysmal success rate in the
|
||||||
|
software business. These case statements are meant to help create
|
||||||
|
confidence and understanding.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>Submitting a Case Study</title>
|
||||||
|
<p>
|
||||||
|
We are actively seeking case studies for this page (after all it
|
||||||
|
just started). Andrew C. Oliver (acoliver at apache dot org) has
|
||||||
|
agreed to have a few T-Shirts printed with the POI logo (once its
|
||||||
|
chosen) for the first
|
||||||
|
few best submissions. To submit a case study, either
|
||||||
|
<link href="getinvolved/index.html">
|
||||||
|
submit a patch for this page</link> or email it to the
|
||||||
|
<link href="mailinglists.html">mailing list
|
||||||
|
</link> (with [PATCH] prefixed subject, please).
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>Case Studies</title>
|
||||||
|
<section><title>QuestionPro</title>
|
||||||
|
<p>
|
||||||
|
<link href="http://www.questionpro.com">QuestionPro</link> is an online service allowing businesses and individuals to create, deploy and do in-depth analysis of Online Surveys. The technology is build on open-source frameworks like Struts, Velocity, POI, Lucene ... the List goes on. The application deployment is on a Linux Application Cluster farm with a Mysql database.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
There are quite a few competitors delivering similar solutions using Microsoft Technologies like asp and .net. One of the distinct advantages our competitors had over us was the ability to generate Excel Spreadsheets, Access Databases (MDB) etc. on the fly using the Component Object Model (COM) - since their servers were running IIS and they had access to the COM registry and such.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
QuestionPro's initial solution was to generate CSV files. This was easy however it was a cumbersome process for our clients to download the CSV files and then import them into Excel. Moreover, formatting information could not be preserved or captured using the CSV format. This is where POI came to our rescue. With a POI based solution, we could generate a full report with multiple sheets and all the analytical reports. To keep the solution scalable, we had a dedicated cluster for generating out the reports.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
The Apache-POI project has helped QuestionPro compete with the other players in the marketplace with proprietary technology. It leveled the playing field with respect to reporting and data analysis solutions. It helped in opening doors into closed solutions like Microsoft's CDF. Today about 100 excel reports are generated daily, each with about 10-30 sheets in them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Vivek Bhaskaran
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<link href="http://www.questionpro.com">QuestionPro, Inc</link>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
POI In Action - <link href="http://www.questionpro.com/marketing/SurveyReport-289.xls">http://www.questionpro.com/marketing/SurveyReport-289.xls</link>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section><title>Sunshine Systems</title>
|
||||||
|
<p>
|
||||||
|
<link href="http://www.sunshinesys.com/">Sunshine Systems</link> deveveloped a
|
||||||
|
POI based reporting solution for a price optimization software package which
|
||||||
|
is used by major retail chains.
|
||||||
|
</p>
|
||||||
|
<p>The solution allowed the retailer's merchandise planners and managers to request a
|
||||||
|
markdown decision support reports and price change reports using a standard browser
|
||||||
|
The users could specify report type, report options, as well as company,
|
||||||
|
division,
|
||||||
|
and department filter criteria. Report generation took place in the
|
||||||
|
multi-threaded
|
||||||
|
application server and was capable of supporting many simultaneous report requests.
|
||||||
|
</p>
|
||||||
|
<p>The reporting application collected business information from the price
|
||||||
|
optimization
|
||||||
|
application's Oracle database. The data was aggregated and summarized
|
||||||
|
based upon the
|
||||||
|
specific report type and filter criteria requested by the user. The
|
||||||
|
final report was
|
||||||
|
rendered as a Microsoft Excel spreadsheet using the POI HSSF API and
|
||||||
|
was stored on
|
||||||
|
the report database server for that specific user as a BLOB. Reports
|
||||||
|
could be
|
||||||
|
seamlessly and easily viewed using the same browser.
|
||||||
|
</p>
|
||||||
|
<p>The retailers liked the solution because they had instantaneous access
|
||||||
|
to critical
|
||||||
|
business data through an extremely easy to use browser interface. They
|
||||||
|
did not need
|
||||||
|
to train the broader user community on all the complexities of the optimization
|
||||||
|
application. Furthermore, the reports were generated in an Excel spreadsheet
|
||||||
|
format,
|
||||||
|
which everyone was familiar with and which also allowed further data
|
||||||
|
analysis using
|
||||||
|
standard Excel features.
|
||||||
|
</p>
|
||||||
|
<p>Rob Stevenson (rstevenson at sunshinesys dot com)
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>Bank of Lithuania</title>
|
||||||
|
<p>
|
||||||
|
The
|
||||||
|
<link href="http://www.lbank.lt/">Bank of Lithuania</link>
|
||||||
|
reports financial statistical data to Excel format using the
|
||||||
|
<link href="http://poi.apache.org/">Apache POI</link>
|
||||||
|
project's
|
||||||
|
<link href="hssf/">
|
||||||
|
HSSF</link> API. The system is based on Oracle JServer and
|
||||||
|
utilizes a Java stored procedure that outputs to XLS format
|
||||||
|
using the HSSF API. - Arian Lashkov (alaskov at lbank.lt)
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<!-- <section>-->
|
||||||
|
<!-- <title>Bit Tracker by Tracker Inc., and ThinkVirtual</title>-->
|
||||||
|
<!-- <p>-->
|
||||||
|
<!-- Bit Tracker (http://www.bittracker.com/) is the world's first and only web-based drill bit tracking system to manage your company's critical bit information and use that data to its full potential. It manages all bit related data, including their usage, locations, how they were used, and results such as rate of penetration and dull grade after use. This data needs to be available in Excel format for backwards compatibility and other uses in the industry. After using CSV and HTML formats, we needed something better for creating the spreadsheets and POI is the answer. It works great and was easy to implement. Kudos to the POI team.-->
|
||||||
|
<!-- </p>-->
|
||||||
|
<!-- <p>-->
|
||||||
|
<!-- Travis Reeder (travis at thinkvirtual dot com)-->
|
||||||
|
<!-- </p>-->
|
||||||
|
<!-- </section>-->
|
||||||
|
<section>
|
||||||
|
<title>Edwards And Kelcey Technology</title>
|
||||||
|
<p>
|
||||||
|
Edwards and Kelcey Technology (http://www.ekcorp.com/) developed a
|
||||||
|
Facility
|
||||||
|
Managament and Maintenance System for the Telecommunications industry
|
||||||
|
based
|
||||||
|
on Turbine and Velocity. Originally the invoicing was done with a simple
|
||||||
|
CSV
|
||||||
|
sheet which was then marked up by accounts and customized for each client.
|
||||||
|
As growth has been consistent with the application, the requirement for
|
||||||
|
invoices that need not be touched by hand increased. POI provided the
|
||||||
|
solution to this issue, integrating easily and transparently into the
|
||||||
|
system. POI HSSF was used to create the invoices directly from the server
|
||||||
|
in
|
||||||
|
Excel 97 format and now services over 150 unique invoices per month.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Cameron Riley (crileyNO@ SPAMekmail.com)
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>ClickFind</title>
|
||||||
|
<p>
|
||||||
|
<link href="http://www.clickfind.com/">ClickFind Inc.</link> used the POI
|
||||||
|
projects HSSF API to provide their medical
|
||||||
|
research clients with an Excel export from their electronic data
|
||||||
|
collection web service Data Collector 3.0. The POI team's assistance
|
||||||
|
allowed ClickFind to give their clients a data format that requires less
|
||||||
|
technical expertise than the XML format used by the Data Collector
|
||||||
|
application. This was important to ClickFind as many of their current
|
||||||
|
and potential clients are already using Excel in their day-to-day
|
||||||
|
operations and in established procedures for handling their generated
|
||||||
|
clinical data. - Jared Walker (jared.walker at clickfind.com)
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>IKAN Software NV</title>
|
||||||
|
<p>In addition to Change Management and Database Modelling, IKAN Software NV
|
||||||
|
(http://www.ikan.be/) develops and supports its own ETL
|
||||||
|
(Extract/Transform/Load) tools.</p>
|
||||||
|
|
||||||
|
<p>IKAN's latest product is this domain is called ETL4ALL
|
||||||
|
(http://www.ikan.be/etl4all/). ETL4ALL is an open source tool
|
||||||
|
allowing data transfer from and to virtually any data source. Users can
|
||||||
|
combine and examine data stored in relational databases, XML databases, PDF
|
||||||
|
files, EDI, CSV files, etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>It is obvious that Microsoft Excel files are also supported.
|
||||||
|
POI has been used to successfully implement this support in ETL4ALL.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
<footer>
|
||||||
|
<legal>
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation All rights reserved.
|
||||||
|
$Revision$ $Date$
|
||||||
|
</legal>
|
||||||
|
</footer>
|
||||||
|
</document>
|
558
src/documentation/content/xdocs/changes.xml
Normal file
558
src/documentation/content/xdocs/changes.xml
Normal file
@ -0,0 +1,558 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE changes PUBLIC "-//APACHE//DTD Changes V1.3//EN" "./dtd/changes-v13.dtd">
|
||||||
|
|
||||||
|
<changes>
|
||||||
|
<title>History of Changes</title> <!-- this breaks dtd validation -->
|
||||||
|
|
||||||
|
<devs>
|
||||||
|
<!-- in strict alphabetical order -->
|
||||||
|
<person id="AO" name="Andrew C. Oliver" email="acoliver2@users.sourceforge.net"/>
|
||||||
|
<person id="GJS" name="Glen Stampoultzis" email="user@poi.apache.org"/>
|
||||||
|
<person id="JM" name="Josh Micich" email="josh@apache.org"/>
|
||||||
|
<person id="MJ" name="Marc Johnson" email="mjohnson@apache.org"/>
|
||||||
|
<person id="NKB" name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
|
||||||
|
<person id="NB" name="Nick Burch" email="nick@torchbox.com"/>
|
||||||
|
<person id="POI-DEVELOPERS" name="POI Developers" email="dev@poi.apache.org"/>
|
||||||
|
<person id="RK" name="Rainer Klute" email="klute@apache.org"/>
|
||||||
|
<person id="YK" name="Yegor Kozlov" email="yegor@apache.org"/>
|
||||||
|
</devs>
|
||||||
|
|
||||||
|
<!-- Don't forget to update status.xml too! -->
|
||||||
|
<release version="3.2-FINAL" date="2008-10-19">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45866 - allowed for change of unicode compression across Continue records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45964 - support for link formulas in Text Objects</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43354 - support for evalating formulas with missing args</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45912 - fixed ArrayIndexOutOfBoundsException in EmbeddedObjectRefSubRecord</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45889 - fixed ArrayIndexOutOfBoundsException when constructing HSLF Table with a single row </action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial support for creating hyperlinks in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45876 - fixed BoundSheetRecord to allow sheet names longer than 31 chars</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45890 - fixed HSSFSheet.shiftRows to also update conditional formats</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45865 modified Formula Parser/Evaluator to handle cross-worksheet formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Optimised the FormulaEvaluator to take cell dependencies into account</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">16936 - Initial support for whole-row cell styling</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Update hssf.extractor.ExcelExtractor to optionally output blank cells too</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Include the sheet name in the output of examples.XLS2CSVmra</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45784 - Support long chart titles in SeriesTextRecords</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45777 - Throw an exception if HSSF Footer or Header is attemped to be set too long, rather than having it break during writing out</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45844 - Addtional diagnostics for HSLF SlideShowRecordDumper</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45829 - HSSFPicture.getImageDimension() failed when DPI of image is zero</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45815 - Bit mask values in StyleTextPropAtom were not preserved across read-write</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45814 - Specify RecordType for slide show Handout (4041)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45805 - Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45780 - Fixed HSSFSheet.shiftRows to also update Area refs</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45804 - Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45978 - Fixed IOOBE in Ref3DPtg.toFormulaString() due eager initialisation of SheetReferences</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Made HSSFFormulaEvaluator no longer require initialisation with sheet or row</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Extended support for cached results of formula cells</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45639 - Fixed AIOOBE due to bad index logic in ColumnInfoRecordsAggregate</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fixed special cases of INDEX function (single column/single row, errors)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45761 - Support for Very Hidden excel sheets in HSSF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45738 - Initial HWPF support for Office Art Shapes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45720 - Fixed HSSFWorkbook.cloneSheet to correctly clone sheets with drawings</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45728 - Fix for SlideShow.reorderSlide in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial support for embedded movies and controls in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45358 - signed/unsigned error when parsing 3-d area refs, performance problem evaluating area refs, and ClassCastExcecption in IF()</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for HPBF Publisher hyperlinks, including during text extraction</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">26321 and 44958 - preserve position of ArrayRecords and TableRecords among cell value records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Impove empty header or footer handling in HWPF HeaderStories</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Avoid NPE in hssf.usermodel.HeaderFooter when stripping fields out</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Avoid NPE in EscherBSERecord on older escher records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Basic text extractraction support in HPBF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial, low level support for Publisher files, in the form of HPBF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45699 - Fix RowRecordsAggregate to tolerate intervening MERGEDCELLS records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45698 - Fix LinkTable to tolerate multiple EXTERNSHEET records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45682 - Fix for cloning of CFRecordsAggregate</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial support for evaluating external add-in functions like YEARFRAC</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45672 - Fix for MissingRecordAwareHSSFListener to prevent multiple LastCellOfRowDummyRecords when shared formulas are present</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45645 - Fix for HSSFSheet.autoSizeColumn() for widths exceeding Short.MAX_VALUE</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45623 - Support for additional HSSF header and footer fields, including bold and full file path</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45623 - Support stripping HSSF header and footer fields (eg page number) out of header and footer text if required</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45622 - Support stripping HWPF fields (eg macros) out of text, via Range.stripFields(text)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">New HPSF based TextExtractor for document metadata, org.apache.poi.hpsf.extractor.HPSFPropertiesExtractor</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Properly update the array of Slide's text runs in HSLF when new text shapes are added</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45590 - Fix for Header/footer extraction for .ppt files saved in Office 2007</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Big improvement in how HWPF handles unicode text, and more sanity checking of text ranges within HWPF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Include headers and footers int he extracted text from HWPF's WordExtractor</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Added support to HWPF for headers and footers</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Improve how HWPF deals with unicode internally. Should avoid some odd behaviour when manipulating unicode text</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45577 - Added implementations for Excel functions NOW and TODAY</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45582 - Fix for workbook streams with extra bytes trailing the EOFRecord</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45537 - Include headers and footers (of slides and notes) in the extracted text from HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45472 - Fixed incorrect default row height in OpenOffice 2.3</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44692 - HSSFPicture.resize() stretched image when there was a text next to it</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45543 - Optionally extract comment text with PowerPointExtractor, and initial hslf model support for comments</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45538 - Include excel headers and footers in the output of ExcelExtractor</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44894 - refactor duplicate logic from EventRecordFactory to RecordFactory</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for Headers / Footers in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44953 - Extensive fixes for data validation</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45519 - Fixed to keep datavalidation records together</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for creating new HSLF CurrentUserAtoms</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45466 - Partial support for removing excel comments (won't work for all excel versions yet)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45437 - Detect encrypted word documents, and throw an EncryptedDocumentException instead of a OOM</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45404 - New class, hssf.usermodel.HSSFDataFormatter, for formatting numbers and dates in the same way that Excel does</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45414 - Don't add too many UncalcedRecords to sheets with charts in them</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45398 - Support detecting date formats containing "am/pm" as date times</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45410 - Removed dependency from contrib on commons beanutils,collections and lang</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">New helper, HSSFOptimiser, which handles removing duplicated font and style records, to avoid going over the limits in Excel</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45322 - Fixed NPE in HSSFSheet.autoSizeColumn() when cell number format was not found</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45380 - Missing return keyword in ArrayPtg.toFormulaString()</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44958 - Record level support for Data Tables. (No formula parser support though)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">35583 - Include a version class, org.apache.poi.Version, to allow easy introspection of the POI version</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Allow the cloning of one HSSFCellStyle onto another, including cloning styles from one HSSFWorkbook onto another</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45289 - finished support for special comparison operators in COUNTIF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45126 - Avoid generating multiple NamedRanges with the same name, which Excel dislikes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fix cell.getRichStringCellValue() for formula cells with string results</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45365 - Handle more excel number formatting rules in FormatTrackingHSSFListener / XLS2CSVmra</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45373 - Improve the performance of HSSFSheet.shiftRows</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45367 - Fixed bug when last row removed from sheet is row zero</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45348 - Tweaks to RVA formula logic</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45354 - Fixed recognition of named ranges within formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45338 - Fix HSSFWorkbook to give you the same HSSFFont every time, and then fix it to find newly added fonts</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45336 - Fix HSSFColor.getTripletHash()</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45334 - Fixed formula parser to handle dots in identifiers</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45252 - Improvement for HWPF Range.replaceText()</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45001 - Further fix for HWPF Range.delete() and unicode characters</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45175 - Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Avoid spurious missing lines with the MissingRecordAware event code, and odd files that contain RowRecords in the middle of the cell Records.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for parsing formulas during EventUserModel processing, via the new EventWorkbookBuilder</action>
|
||||||
|
</release>
|
||||||
|
<release version="3.1-final" date="2008-06-29">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">30978 - Fixed re-serialization of tRefErr3d and tAreaErr3d</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45234 - Removed incorrect shared formula conversion in CFRuleRecord</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45001 - Improved HWPF Range.replaceText()</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44692 - Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support custom image renderers in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Correctly increment the reference count of a blip when a picture is inserted</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45110 - Fixed TextShape.resizeToFitText() to properly resize TextShape</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45091 - Fixed serialization of RefN~ tokens. Simplified Ptg class hierarchy</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45133 - Fixed OBJ Record (5Dh) to pad the sub-record data to a 4-byte boundary</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45145 - Fixed Sheet to always enforce RowRecordsAggregate before ValueRecordsAggregate</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45123 - Fixed SharedFormulaRecord.convertSharedFormulas() to propagate token operand classes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45087 - Correctly detect date formats like [Black]YYYY as being date based</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45060 - Improved token class transformation during formula parsing</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44840 - Improved handling of HSSFObjectData, especially for entries with data held not in POIFS</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45043 - Support for getting excel cell comments when extracting text</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Extend the support for specifying a policy to HSSF on missing / blank cells when fetching, to be able to specify the policy at the HSSFWorkbook level</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45025 - improved FormulaParser parse error messages</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45046 - allowed EXTERNALBOOK(0x01AE) to be optional in the LinkTable</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45066 - fixed sheet encoding size mismatch problems</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">45003 - Support embeded HDGF visio documents</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45001 - Partial fix for HWPF Range.insertBefore() and Range.delete() with unicode characters</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44977 - Support for AM/PM in excel date formats</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for specifying a policy to HSSF on missing / blank cells when fetching</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44937 - Partial support for extracting Escher images from HWPF files</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44824 - Avoid an infinite loop when reading some HWPF pictures</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44898 - Correctly handle short last blocks in POIFS</action>
|
||||||
|
</release>
|
||||||
|
<release version="3.1-beta2" date="2008-05-26">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44306 - fixed reading/writing of AttrPtg(type=choose) and method toFormulaString() for CHOOSE formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">24207 - added HSSFName.isDeleted() to check if the name points to cell that no longer exists</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">40414 - fixed selected/active sheet after removing sheet from workbook</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44523 - fixed workbook sheet selection and focus</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">45000 - Fixed NPE in ListLevel when numberText is null</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44985 - Properly update TextSpecInfoAtom when the parent text is changed</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">41187 - fixed HSSFSheet to properly read xls files without ROW records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44950 - fixed HSSFFormulaEvaluator.evaluateInCell() and Area3DEval.getValue() also added validation for number of elements in AreaEvals</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42570 - fixed LabelRecord to use empty string instead of null when the length is zero.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42564 - fixed ArrayPtg to use ConstantValueParser. Fixed a few other ArrayPtg encoding issues.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Follow-on from 28754 - StringPtg.toFormulaString() should escape double quotes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44929 - Improved error handling in HSSFWorkbook when attempting to read a BIFF5 file</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44675 - Parameter operand classes (function metadata) required to encode SUM() etc properly. Added parse validation for number of parameters</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44921 - allow Ptg.writeBytes() to be called on relative ref Ptgs (RefN* and AreaN*)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44914 - Fix/suppress warning message "WARN. Unread n bytes of record 0xNN"</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44892 - made HSSFWorkbook.getSheet(String) case insensitive</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44886] - Correctly process PICT metafile in EscherMetafileBlip</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44893 - Take into account indentation in HSSFSheet.autoSizeColumn</action>
|
||||||
|
</release>
|
||||||
|
<release version="3.1-beta1" date="2008-04-28">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting embedded sounds from slide show </action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSLF: Initial support for rendering slides into images</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting OLE object data from slide show </action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSLF: Implemented more methods in PPGraphics2D</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSLF: Added Freeform shape which can contain both lines and Bezier curves</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">41071 - Improved text extraction in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">30311 - Conditional Formatting - improved API, added HSSFSheetConditionalFormatting</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Update the formula parser code to use a HSSFWorkbook, rather than the low level model.Workbook, to make things cleaner and make supporting XSSF formulas in future much easier</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fix the logger used by POIFSFileSystem, so that commons-logging isn't required when not used</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embeded documents</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embeded word document</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial support for getting and changing chart and series titles</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Implement a proxy HSSFListener which tracks the format records, and lets you lookup the format string for a given cell. Convert the xls to csv example to use it</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44792 - fixed encode/decode problems in ExternalNameRecord and CRNRecord.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43670, 44501 - Fix how HDGF deals with trailing data in the list of chunk headers</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">30311 - More work on Conditional Formatting</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">refactored all junits' usage of HSSF.testdata.path to one place</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44739 - Small fixes for conditional formatting (regions with max row/col index)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Implement Sheet.removeShape(Shape shape) in HSLF</action>
|
||||||
|
<action dev="RK" type="add">44694 - HPSF: Support for property sets without sections</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Various fixes: Recognising var-arg built-in functions #44675, ExternalNameRecord serialisation bug #44695, PMT() bug #44691</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">30311 - More work on Conditional Formatting</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Move the Formula Evaluator code out of scratchpad</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Move the missing record aware eventusermodel code out of scratchpad</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44652 / 44603 - Improved handling of Pictures in Word Documents</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44636 - Fix formula parsing of RefVPtg, which was causing #VALUE to be shown on subsequent edits</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44627 - Improve the thread safety of POILogFactory</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">30311 - Initial support for Conditional Formatting</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44609 - Handle leading spaces in formulas, such as '= 4'</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44608 - Support for PercentPtg in the formula evaluator</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44606 - Support calculated string values for evaluated formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Add accessors to horizontal and vertical alignment in HSSFTextbox</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44593 - Improved handling of short DVRecords</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44539 - Support for area references in formulas of rows >= 32768</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44536 - Improved support for detecting read-only recommended files</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43901 - Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">28231 - For apparently truncated files, which are somehow still valid, now issue a truncation warning but carry on, rather than giving an exception as before</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44504 - Added initial support for recognising external functions like YEARFRAC and ISEVEN (using NameXPtg), via LinkTable support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44504 - Improvements to FormulaParser - operators, precedence, error literals, quotes in string literals, range checking on IntPtg, formulas with extra un-parsed stuff at the end, improved parse error handling</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44504 - Fixed number conversion inconsistencies in many functions, and improved RefEval</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44508 - Fix formula evaluation with evaluateInCell on boolean formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44510 - Fix how DVALRecord works with dropdowns</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44495 - Handle named cell ranges in formulas that have lower case parts</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44491 - Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44471 - Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44450 - Support for Lookup, HLookup and VLookup functions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44449 - Avoid getting confused when two sheets have shared formulas for the same areas, and when the shared formula is set incorrectly</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44366 - InputStreams passed to POIFSFileSystem are now automatically closed. A warning is generated for people who might've relied on them not being closed before, and a wrapper to restore the old behaviour is supplied</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44371 - Support for the Offset function</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">38921 - Have HSSFPalette.findSimilar() work properly</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44456 - Fix the contrib SViewer / SViewerPanel to not fail on sheets with missing rows</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44403 - Further support for unusual, but valid, arguments to the Mid function</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44410 - Support for whole-column ranges, such as C:C, in formula strings and the formula evaluator</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44421 - Update Match function to properly support Area references</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44417 - Improved handling of references for the need to quote the sheet name for some formulas, but not when fetching a sheet by name</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44413 - Fix for circular references in INDEX, OFFSET, VLOOKUP formulas, where a cell is actually allowed to reference itself</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44403 - Fix for Mid function handling its arguments wrong</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44364 - Support for Match, NA and SumProduct functions, as well as initial function error support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44375 - Cope with a broken dictionary in Document Summary Information stream. RuntimeExceptions that occured when trying to read bogus data are now caught. Dictionary entries up to but not including the bogus one are preserved, the rest is ignored.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">38641 - Handle timezones better with cell.setCellValue(Calendar), so now 20:00-03:00, 20:00+00:00 and 20:00+03:00 will all be recorded as 20:00, and not 17:00 / 20:00 / 23:00 (pass a Date not a Calendar for old behaviour)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44373 - Have HSSFDateUtil.isADateFormat recognize more formats as being dates</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">37923 - Support for Excel hyperlinks</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Implement hashCode() and equals(obj) on HSSFFont and HSSFCellStyle</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44345 - Implement CountA, CountIf, Index, Rows and Columns functions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44336 - Properly escape sheet names as required when figuring out the text of formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44326 - Improvements to how SystemOutLogger and CommonsLogger log messages with exceptions, and avoid an infinite loop with certain log messages with exceptions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for a completed Record based "pull" stream, via org.apache.poi.hssf.eventusermodel.HSSFRecordStream, to complement the existing "push" Event User Model listener stuff</action>
|
||||||
|
</release>
|
||||||
|
<release version="3.0.2-FINAL" date="2008-02-04">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44297 - IntPtg must operate with unsigned short. Reading signed short results in incorrect formula calculation</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44296 - Fix for reading slide background images</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Add another formula evaluation method, evaluateFormulaCell(cell), which will re-calculate the value for a formula, without affecting the formula itself.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">41726 - Fix how we handle signed cell offsets in relative areas and references</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44233 - Support for getting and setting a flag on the sheet, which tells excel to re-calculate all formulas on it at next reload</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44201 - Enable cloning of sheets with data validation rules</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44200 - Enable cloning of sheets with notes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43008 - Add a moveCell method to HSSFRow, and deprecate setCellNum(), which didn't update things properly</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43058 - Support setting row grouping on files from CR IX, which lack GutsRecords</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">31795 - Support cloning of sheets with certain drawing objects on them</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43902 - Don't consider merged regions when auto-sizing columns</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42464 - Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">42033 - Add support for named ranges with unicode names</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">34023 - When shifting rows, update formulas on that sheet to point to the new location of those rows</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support getting all the cells referenced by an AreaReference, not just the corner ones</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43510 - Add support for named ranges in formulas, including non-contiguous named ranges</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43937 - Add support for hiding and un-hiding sheets, and checking their current hidden status</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44167 - Fix for non-contiguous named ranges</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44070 - Fix for shifting comments when shifting rows</action>
|
||||||
|
</release>
|
||||||
|
<release version="3.0.2-BETA2" date="2008-01-12">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for tables in HSLF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43781 - Fix for extracting text from TextBoxes HSLF in</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Improve JavaDocs relating to hssf font and fill colourings</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44095, 44097, 44099 - [PATCH] Support for Mid, Replace and Substitute excel functions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">44055 - [PATCH] Support for getting the from field from HSMF messages</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43551 - [PATCH] Support for 1904 date windowing in HSSF (previously only supported 1900 date windowing)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">41064 - [PATCH] Support for String continue records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">27511 - [PATCH] Support for data validation, via DVRecord and DVALRecord</action>
|
||||||
|
</release>
|
||||||
|
<release version="3.0.2-BETA1" date="2007-12-04">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43877 and 39512 - Fix for handling mixed OBJ and CONTINUE records.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43807 - Throw an IllegalArgumentException if asked to create a merged region with invalid columns or rows, rather than writing out a corrupt file</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43837 - [PATCH] Support for unicode NameRecords</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43721 - [PATCH] Support for Chart Title Format records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42794 - [PATCH] Fix for BOF records from things like Access</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43648 - Fix for IntPtg and short vs int</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43751 - [PATCH] - Fix for handling rotated text in HSSFSheet.autoSizeColumn</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Include an Excel text extractor, and put all existing text extractors under a common superclass</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Improvements to the LZW compression engine used by HDGF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSSFPicture.resize() - a handy method to reset a picture to its original width and height</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Add a getSheetIndex(HSSFSheet) method to HSSFWorkbook, and allow a HSSFSheet to get at its parent HSSFWorkbook</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43399 - [PATCH] - Fix for Cell References for rows > 32678</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43410 - [PATCH] - Improved Formula Parser support for numbers and ranges</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">When writing HSLF files out, optionally preserve all OLE2 nodes (default is just the HSLF related nodes)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43323 - [PATCH] - Support for adding Pictures to ShapeGroups in HSLF.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43222 - [PATCH] - Support for getting OLE object data from HSSFWorkbook.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43247 - [PATCH] - Support for getting OLE object data from slideshows.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">43125 - [PATCH] - Support for reading EMF, WMF and PICT images via HSSFWorkbook.getAllPictures()</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43088 - [PATCH] - Fix for reading files with long cell comments and text boxes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42844 - [PATCH] - Fix for the EventUserModel and records that aren't immediately followed by their ContinueRecords</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43055 - [PATCH] - Fix for saving Crystal Reports xls files when preserving nodes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43116 - [PATCH] - Fix for Escher layer handling of embeded OLE2 documents</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43108 - [PATCH] - Where permissions deny fetching System Properties, use sensible defaults</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">43093 - [PATCH] - Fix formula evaluator support for Area3D references to other sheets</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Improvements to HSSFDateUtils.isADateFormat, and have HSSFDateUtil.isCellDateFormatted use this</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42999 - [PATCH] - Fix for HSSFPatriarch positioning problems</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for write-protecting a HSSF workbook</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for querying, setting and un-setting protection on sheets in a HSSF workbook</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial HSMF (outlook) support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Tidy up the javadocs</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="3.0.1-FINAL" date="2007-07-05">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Administrative updates to the Maven POMs, and the release artificat build process</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">23951 - [PATCH] Fix for HSSF setSheetOrder and tab names</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42524 - [PATCH] Better HSLF support for problem shape groups</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42520 - [PATCH] Better HSLF support for corrupt picture records</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial support for a "missing record aware" HSSF event model</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Additional HSLF support for Title and Slide Master Sheets</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42474 - [PATCH] Improved HSLF note to slide matching, and a NPE</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42481 - [PATCH] Tweak some HSLF exceptions, to make it clearer what you're catching</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">42667 - [PATCH] Fix for HSLF writing of files with tables</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Improved way of detecting HSSF cells that contain dates, isADateFormat</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial, read-only support for Visio documents, as HDGF</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="3.0-FINAL" date="2007-05-18">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">39977 - [PATCH] Fix POM for Maven users</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">38976 - [PATCH] Add createPicture to HSSFShapeGroup</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Detect Office 2007 XML documents, and throw a meaningful exception</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Additional HSLF support for PowerPoint</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial support for HWPF image extraction</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="3.0-alpha3" date="2006-12-12">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Additional HSLF support for PowerPoint</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="3.0-alpha2" date="2006-06-16">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HSSF Formula support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Additional HSLF support for PowerPoint</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">39389 - [PATCH] Extended Ascii support for WingDings</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="3.0-alpha1" date="2005-07-04">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Bugzilla Bug 29976 [PATCH] HSSF hyperlink formula size problem</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Image writing support</action>
|
||||||
|
<action dev="NB" type="add">HSLF - Initial PowerPoint support</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.5.1-FINAL" date="2004-02-29">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Outlining support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">27574 - [PATCH] HSSFDateUtil.getExcelDate() is one hour off when DST changes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">26465 - [PATCH] wrong lastrow entry</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">28203 - [PATCH] Unable to open read-write excel file including forms</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.5-FINAL" date="2004-02-29">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Add support for the Escher file format</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">27005 java.lang.IndexOutOfBoundsException during Workbook.cloneSheet()</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.0-FINAL" date="2004-01-26">
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">No changes</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.0-RC2" date="2004-01-11">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Bug 25695 - HSSFCell.getStringCellValue() on cell which has string formula will return swap bye unicode characters.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Updated website for upcoming release</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Formula Parser fixes with tests, by Peter M Murray Bug 25457</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fixed cloning merge regions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">The cloned reference for merged cells did not create a new collection, so deletes cascaded to the original.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fix to 24519 call to getCustomPalette() from a newly created workbook now works</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fix supplied for bug 24397 where some compilation got ambiguous classes. Explicitly imports the classes. Patch supplied by Jean-Pierre Paris.</action>
|
||||||
|
</release>
|
||||||
|
<release version="2.0-RC1" date="2003-11-02">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">12561 (Min) HSSFWorkbook throws Exceptions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">12730 (Nor) values dont get copied to another sheet.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">13224 (Maj) Exception thrown when cell has =Names call</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">13796 (Nor) Error Reading Formula Record (optimized if, external link)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">13921 (Nor) Sheet name cannot exceed 31 characters and cannot contain :</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">14330 (Nor) Error reading FormulaRecord</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">14460 (Nor) Name in Formula - ArrayOutOfBoundsException</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">15228 (Cri) [Urgent] ArrayIndexoutofbounds Exception. POI - Version 1.8</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">16488 (Maj) Unable to open written spreadsheet in Excel, but can in Open</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">16559 (Nor) testCustomPalette.xls crashes Excel 97</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">16560 (Nor) testBoolErr.xls crashes Excel '97</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">17374 (Min) HSSFFont - BOLDWEIGHT_NORMAL</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">18800 (Maj) The sheet made by HSSFWorkbook#cloneSheet() doesn't work cor</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">18846 (Min) [PATCH][RFE]Refactor the transformation between byte array a</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">19599 (Min) java.lang.IllegalArgumentException</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">19961 (Nor) [PATCH] Sheet.getColumnWidth() returns wrong value</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">21066 (Blo) Can not modify a blank spreadsheet</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">21444 (Enh) [PATCH] Macro functions</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">21447 (Nor) [RFE]String Formula Cells</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">21674 (Enh) [PATCH] Documentation changes for @(Greater|Less|Not)EqualPt</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">21863 (Enh) [PATCH] build.xml fixes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">22195 (Nor) [RFE] [PATCH] Support for Storage Class ID</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">22742 (Cri) Failed to create HSSFWorkbook!</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">22922 (Cri) HSSFSheet.shiftRows() throws java.lang.IndexOutOfBoundsExcep</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">22963 (Nor) org.apache.poi.hpsf.SummaryInformation.getEditTime() should</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">24149 (Maj) Error passing inputstream to POIFSFileSystem</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">21722 (Nor) [PATCH] Add a ProtectRecord to Sheets and give control over</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">9576 (Nor) [PATCH] DBCELL, INDEX EXTSST (was Acess 97 import)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">13478 (Blo) [PATCH] [RFE] POIFS, RawDataBlock: Missing workaround for lo</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">14824 (Nor) Unable to modify empty sheets</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">12843 (Cri) [PATCH] Make POI handle chinese better</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">15353 (Nor) [RFE] creating a cell with a hyperlink</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">15375 (Blo) Post 1.5.1 POI causes spreadsheet to become unopenable.</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.0-pre3" date="2003-07-29">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">HPSF is now able to read properties which are given in the property set stream but which don't have a value ("variant" type VT_EMPTY). The getXXX() methods of the PropertySet class return null if their return type is a reference (like a string) or 0 if the return type is numeric. Details about the return types and about how to distinguish between a property value of zero and a property value that is not present can be found in the API documentation.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Gridlines can now be turned on and off</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">NamePTG refactoring/fixes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">minor fixes to ExternSheet and formula strings</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Sheet comparisons now ignore case</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.0-pre2" date="2003-07-06">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">A nasty concurrency problem has been fixed. Any users working in a multithreaded environment should seriously consider upgrading to this release.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">The EXTSST record has been implemented. This record is used by excel for optimized reading of strings.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">When rows are shifted, the merged regions now move with them. If a row contains 2 merged cells, the resulting shifted row should have those cells merged as well.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">There were some issues when removing merged
|
||||||
|
regions (specifically, removing all of them and then adding some more) and have been resolved.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">When a sheet contained shared formulas (when a formula is
|
||||||
|
dragged across greater than 6 cells), the clone would fail. We now support cloning of
|
||||||
|
sheets that contain this Excel optimization. </action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support added for reading formulas with UnaryPlus and UnaryMinus operators.</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.0-pre1" date="2003-05-17">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Patch applied for deep cloning of worksheets was provided</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Patch applied to allow sheet reordering</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Added additional print area setting methods using row/column numbers</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">HDF: Negative Array size fix</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Added argument pointers to support the IF formula</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Formulas: Added special character support for string literals, specifically for SUMIF formula support and addresses a bug as well</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">BlockingInputStream committed to help ensure reads</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Fixed problem with NaN values differing from the investigated value from file reads in FormulaRecords</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Patch for getColumnWidth in HSSF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Patch for dealing with mult-level numbered lists in HDF</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Due to named reference work, several named-ranged bugs were closed</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Patch applied to prevent sheet corruption after a template modification</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Shared Formulas now Supported</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Added GreaterEqual, LessEqual and NotEqual to Formula Parser</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Added GreaterThan and LessThan functionality to formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Patches for i10n</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">POI Build System Updated</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">font names can now be null</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="1.10-dev" date="2003-02-19">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for zoom level</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Freeze and split pane support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Row and column headers on printouts</action>
|
||||||
|
</release>
|
||||||
|
<release version="1.8-dev" date="2002-09-20">
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Custom Data Format Support</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Enhanced Unicode Support for Russian and Japanese</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Enhanced formula support including read-only for
|
||||||
|
"optimized if" statements.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for cloning objects</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Fixes for header/footer</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Spanish Documentation translations</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Support for preserving VBA macros</action>
|
||||||
|
</release>
|
||||||
|
<release version="1.7-dev" date="Release date not recorded">
|
||||||
|
<action dev="NKB" type="update">Removed runtime dependency on commons logging.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Formula support</action>
|
||||||
|
</release>
|
||||||
|
<release version="1.5.1" date="2002-06-16">
|
||||||
|
<action dev="GJS" type="update">Removed depedency on commons logging. Now define poi.logging system property to enable logging to standard out.</action>
|
||||||
|
<action dev="GJS" type="fix">Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly.</action>
|
||||||
|
</release>
|
||||||
|
<release version="1.5" date="2002-05-06">
|
||||||
|
<action dev="NKB" type="update">New project build.</action>
|
||||||
|
<action dev="NKB" type="update">New project documentation system based on Cocoon.</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="update">Package rename</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">Various bug fixes</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Early stages of HSF development (not ready for development)</action>
|
||||||
|
<action dev="POI-DEVELOPERS" type="add">Initial low level record support for charting (not complete)</action>
|
||||||
|
</release>
|
||||||
|
<release version="1.1.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Created new event model</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Optimizations made to HSSF including aggregate records for
|
||||||
|
values, rows, etc.</action>
|
||||||
|
<action dev="POI-DEVELOPERS">predictive sizing, offset based writing (instead of lots of
|
||||||
|
array copies)</action>
|
||||||
|
<action dev="POI-DEVELOPERS">minor re-factoring and bug fixes.</action>
|
||||||
|
</release>
|
||||||
|
<release version="1.0.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Minor documentation updates.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.14.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Added DataFormat helper class and exposed set and get format
|
||||||
|
on HSSFCellStyle</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Fixed column width apis (unit wise) and various javadoc on
|
||||||
|
the subject</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Fix for Dimensions record (again)... (one of these days I'll
|
||||||
|
write a unit test for this ;-p).</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Some optimization on sheet creation.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.13.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Changes not recorded.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.12.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Added MulBlank, Blank, ColInfo</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Added log4j facility and removed all sys.out type logging</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Added support for adding font's, styles and corresponding
|
||||||
|
high level api for styling cells</action>
|
||||||
|
<action dev="POI-DEVELOPERS">added support for changing row height, cell width and default
|
||||||
|
row height/cell width.</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Added fixes for internationalization (UTF-16 should work now
|
||||||
|
from HSSFCell.setStringValue, etc when the encoding is set)</action>
|
||||||
|
<action dev="POI-DEVELOPERS">added support for adding/removing and naming sheets.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.11.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Bugfix release. We were throwing an exception when reading
|
||||||
|
RKRecord objects.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.10.0" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Got continuation records to work (read/write)</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Added various pre-support for formulas</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Massive API reorganization, repackaging.</action>
|
||||||
|
<action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF & POI and/or
|
||||||
|
HSSF Output.</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Better API support for modification.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.7 (and interim releases)" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Added encoding flag to high and low level api to use utf-16
|
||||||
|
when needed (HSSFCell.setEncoding())</action>
|
||||||
|
<action dev="POI-DEVELOPERS">added read only support for Label records (which are
|
||||||
|
reinterpreted as LabelSST when written)</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Broken continuation record implementation (oops)</action>
|
||||||
|
<action dev="POI-DEVELOPERS">BiffViewer class added for validating HSSF & POI and/or
|
||||||
|
HSSF Output.</action>
|
||||||
|
</release>
|
||||||
|
<release version="0.6 (release)" date="Release date not recorded">
|
||||||
|
<action dev="POI-DEVELOPERS">Support for read/write and modify.</action>
|
||||||
|
<action dev="POI-DEVELOPERS">Read only support for MulRK records (converted to Number when
|
||||||
|
writing)
|
||||||
|
</action>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
</changes>
|
34
src/documentation/content/xdocs/dtd/ISOdia.pen
Normal file
34
src/documentation/content/xdocs/dtd/ISOdia.pen
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOdia PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML">
|
||||||
|
%ISOdia;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY acute "´" ><!--=acute accent-->
|
||||||
|
<!ENTITY breve "˘" ><!--=breve-->
|
||||||
|
<!ENTITY caron "ˇ" ><!--=caron-->
|
||||||
|
<!ENTITY cedil "¸" ><!--=cedilla-->
|
||||||
|
<!ENTITY circ "^" ><!--=circumflex accent-->
|
||||||
|
<!ENTITY dblac "˝" ><!--=double acute accent-->
|
||||||
|
<!ENTITY die "¨" ><!--=dieresis-->
|
||||||
|
<!ENTITY dot "˙" ><!--=dot above-->
|
||||||
|
<!ENTITY grave "`" ><!--=grave accent-->
|
||||||
|
<!ENTITY macr "¯" ><!--=macron-->
|
||||||
|
<!ENTITY ogon "˛" ><!--=ogonek-->
|
||||||
|
<!ENTITY ring "˚" ><!--=ring-->
|
||||||
|
<!ENTITY tilde "˜" ><!--=tilde-->
|
||||||
|
<!ENTITY uml "¨" ><!--=umlaut mark-->
|
79
src/documentation/content/xdocs/dtd/ISOlat1.pen
Normal file
79
src/documentation/content/xdocs/dtd/ISOlat1.pen
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOlat1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML">
|
||||||
|
%ISOlat1;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 8859-1 or ISO 10646 as its document character
|
||||||
|
set. This includes XML documents and ISO HTML documents.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY Agrave "À" ><!-- capital A, grave accent -->
|
||||||
|
<!ENTITY Aacute "Á" ><!-- capital A, acute accent -->
|
||||||
|
<!ENTITY Acirc "Â" ><!-- capital A, circumflex accent -->
|
||||||
|
<!ENTITY Atilde "Ã" ><!-- capital A, tilde -->
|
||||||
|
<!ENTITY Auml "Ä" ><!-- capital A, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Aring "Å" ><!-- capital A, ring -->
|
||||||
|
<!ENTITY AElig "Æ" ><!-- capital AE diphthong (ligature) -->
|
||||||
|
<!ENTITY Ccedil "Ç" ><!-- capital C, cedilla -->
|
||||||
|
<!ENTITY Egrave "È" ><!-- capital E, grave accent -->
|
||||||
|
<!ENTITY Eacute "É" ><!-- capital E, acute accent -->
|
||||||
|
<!ENTITY Ecirc "Ê" ><!-- capital E, circumflex accent -->
|
||||||
|
<!ENTITY Euml "Ë" ><!-- capital E, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Igrave "Ì" ><!-- capital I, grave accent -->
|
||||||
|
<!ENTITY Iacute "Í" ><!-- capital I, acute accent -->
|
||||||
|
<!ENTITY Icirc "Î" ><!-- capital I, circumflex accent -->
|
||||||
|
<!ENTITY Iuml "Ï" ><!-- capital I, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY ETH "Ð" ><!-- capital Eth, Icelandic -->
|
||||||
|
<!ENTITY Ntilde "Ñ" ><!-- capital N, tilde -->
|
||||||
|
<!ENTITY Ograve "Ò" ><!-- capital O, grave accent -->
|
||||||
|
<!ENTITY Oacute "Ó" ><!-- capital O, acute accent -->
|
||||||
|
<!ENTITY Ocirc "Ô" ><!-- capital O, circumflex accent -->
|
||||||
|
<!ENTITY Otilde "Õ" ><!-- capital O, tilde -->
|
||||||
|
<!ENTITY Ouml "Ö" ><!-- capital O, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Oslash "Ø" ><!-- capital O, slash -->
|
||||||
|
<!ENTITY Ugrave "Ù" ><!-- capital U, grave accent -->
|
||||||
|
<!ENTITY Uacute "Ú" ><!-- capital U, acute accent -->
|
||||||
|
<!ENTITY Ucirc "Û" ><!-- capital U, circumflex accent -->
|
||||||
|
<!ENTITY Uuml "Ü" ><!-- capital U, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Yacute "Ý" ><!-- capital Y, acute accent -->
|
||||||
|
<!ENTITY THORN "Þ" ><!-- capital THORN, Icelandic -->
|
||||||
|
<!ENTITY szlig "ß" ><!-- small sharp s, German (sz ligature) -->
|
||||||
|
<!ENTITY agrave "à" ><!-- small a, grave accent -->
|
||||||
|
<!ENTITY aacute "á" ><!-- small a, acute accent -->
|
||||||
|
<!ENTITY acirc "â" ><!-- small a, circumflex accent -->
|
||||||
|
<!ENTITY atilde "ã" ><!-- small a, tilde -->
|
||||||
|
<!ENTITY auml "ä" ><!-- small a, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY aring "å" ><!-- small a, ring -->
|
||||||
|
<!ENTITY aelig "æ" ><!-- small ae diphthong (ligature) -->
|
||||||
|
<!ENTITY ccedil "ç" ><!-- small c, cedilla -->
|
||||||
|
<!ENTITY egrave "è" ><!-- small e, grave accent -->
|
||||||
|
<!ENTITY eacute "é" ><!-- small e, acute accent -->
|
||||||
|
<!ENTITY ecirc "ê" ><!-- small e, circumflex accent -->
|
||||||
|
<!ENTITY euml "ë" ><!-- small e, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY igrave "ì" ><!-- small i, grave accent -->
|
||||||
|
<!ENTITY iacute "í" ><!-- small i, acute accent -->
|
||||||
|
<!ENTITY icirc "î" ><!-- small i, circumflex accent -->
|
||||||
|
<!ENTITY iuml "ï" ><!-- small i, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY eth "ð" ><!-- small eth, Icelandic -->
|
||||||
|
<!ENTITY ntilde "ñ" ><!-- small n, tilde -->
|
||||||
|
<!ENTITY ograve "ò" ><!-- small o, grave accent -->
|
||||||
|
<!ENTITY oacute "ó" ><!-- small o, acute accent -->
|
||||||
|
<!ENTITY ocirc "ô" ><!-- small o, circumflex accent -->
|
||||||
|
<!ENTITY otilde "õ" ><!-- small o, tilde -->
|
||||||
|
<!ENTITY ouml "ö" ><!-- small o, dieresis or umlaut mark -->
|
||||||
|
|
||||||
|
<!ENTITY oslash "ø" ><!-- small o, slash -->
|
||||||
|
<!ENTITY ugrave "ù" ><!-- small u, grave accent -->
|
||||||
|
<!ENTITY uacute "ú" ><!-- small u, acute accent -->
|
||||||
|
<!ENTITY ucirc "û" ><!-- small u, circumflex accent -->
|
||||||
|
<!ENTITY uuml "ü" ><!-- small u, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY yacute "ý" ><!-- small y, acute accent -->
|
||||||
|
<!ENTITY thorn "þ" ><!-- small thorn, Icelandic -->
|
||||||
|
<!ENTITY yuml "ÿ" ><!-- small y, dieresis or umlaut mark -->
|
||||||
|
|
109
src/documentation/content/xdocs/dtd/ISOnum.pen
Normal file
109
src/documentation/content/xdocs/dtd/ISOnum.pen
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOnum PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML">
|
||||||
|
%ISOnum;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY half "½" ><!--=fraction one-half-->
|
||||||
|
<!ENTITY frac12 "½" ><!--=fraction one-half-->
|
||||||
|
<!ENTITY frac14 "¼" ><!--=fraction one-quarter-->
|
||||||
|
<!ENTITY frac34 "¾" ><!--=fraction three-quarters-->
|
||||||
|
<!ENTITY frac18 "⅛" >
|
||||||
|
<!-- or "±Ȃ⁄₈" --><!--=fraction one-eighth-->
|
||||||
|
<!ENTITY frac38 "⅜" >
|
||||||
|
<!-- or "³⁄₈" --><!--=fraction three-eighths-->
|
||||||
|
<!ENTITY frac58 "⅝" >
|
||||||
|
<!-- or "⁵⁄₈" --><!--=fraction five-eighths-->
|
||||||
|
<!ENTITY frac78 "⅞" >
|
||||||
|
<!-- or "⁷⁄₈" --><!--=fraction seven-eighths-->
|
||||||
|
|
||||||
|
<!ENTITY sup1 "¹" ><!--=superscript one-->
|
||||||
|
<!ENTITY sup2 "²" ><!--=superscript two-->
|
||||||
|
<!ENTITY sup3 "³" ><!--=superscript three-->
|
||||||
|
|
||||||
|
<!ENTITY plus "+" ><!--=plus sign B:-->
|
||||||
|
<!ENTITY plusmn "±" ><!--/pm B: =plus-or-minus sign-->
|
||||||
|
<!ENTITY lt "&#60;" ><!--=less-than sign R:-->
|
||||||
|
<!ENTITY equals "=" ><!--=equals sign R:-->
|
||||||
|
<!ENTITY gt ">" ><!--=greater-than sign R:-->
|
||||||
|
<!ENTITY divide "÷" ><!--/div B: =divide sign-->
|
||||||
|
<!ENTITY times "×" ><!--/times B: =multiply sign-->
|
||||||
|
|
||||||
|
<!ENTITY curren "¤" ><!--=general currency sign-->
|
||||||
|
<!ENTITY pound "£" ><!--=pound sign-->
|
||||||
|
<!ENTITY dollar "$" ><!--=dollar sign-->
|
||||||
|
<!ENTITY cent "¢" ><!--=cent sign-->
|
||||||
|
<!ENTITY yen "¥" ><!--/yen =yen sign-->
|
||||||
|
|
||||||
|
<!ENTITY num "#" ><!--=number sign-->
|
||||||
|
<!ENTITY percnt "%" ><!--=percent sign-->
|
||||||
|
<!ENTITY amp "&#38;" ><!--=ampersand-->
|
||||||
|
<!ENTITY ast "*" ><!--/ast B: =asterisk-->
|
||||||
|
<!ENTITY commat "@" ><!--=commercial at-->
|
||||||
|
<!ENTITY lsqb "[" ><!--/lbrack O: =left square bracket-->
|
||||||
|
<!ENTITY bsol "\" ><!--/backslash =reverse solidus-->
|
||||||
|
<!ENTITY rsqb "]" ><!--/rbrack C: =right square bracket-->
|
||||||
|
<!ENTITY lcub "{" ><!--/lbrace O: =left curly bracket-->
|
||||||
|
<!ENTITY horbar "―" ><!--=horizontal bar-->
|
||||||
|
<!ENTITY verbar "|" ><!--/vert =vertical bar-->
|
||||||
|
<!ENTITY rcub "}" ><!--/rbrace C: =right curly bracket-->
|
||||||
|
<!ENTITY micro "µ" ><!--=micro sign-->
|
||||||
|
<!ENTITY ohm "ࡎ" ><!--=ohm sign-->
|
||||||
|
<!ENTITY deg "°" ><!--=degree sign-->
|
||||||
|
<!ENTITY ordm "º" ><!--=ordinal indicator, masculine-->
|
||||||
|
<!ENTITY ordf "ª" ><!--=ordinal indicator, feminine-->
|
||||||
|
<!ENTITY sect "§" ><!--=section sign-->
|
||||||
|
<!ENTITY para "¶" ><!--=pilcrow (paragraph sign)-->
|
||||||
|
<!ENTITY middot "·" ><!--/centerdot B: =middle dot-->
|
||||||
|
<!ENTITY larr "←" ><!--/leftarrow /gets A: =leftward arrow-->
|
||||||
|
<!ENTITY rarr "→" ><!--/rightarrow /to A: =rightward arrow-->
|
||||||
|
<!ENTITY uarr "↑" ><!--/uparrow A: =upward arrow-->
|
||||||
|
<!ENTITY darr "↓" ><!--/downarrow A: =downward arrow-->
|
||||||
|
<!ENTITY copy "©" ><!--=copyright sign-->
|
||||||
|
<!ENTITY reg "®" ><!--/circledR =registered sign-->
|
||||||
|
<!ENTITY trade "™" ><!--=trade mark sign-->
|
||||||
|
<!ENTITY brvbar "¦" ><!--=bren (vertical) bar-->
|
||||||
|
<!ENTITY not "¬" ><!--/neg /lnot =not sign-->
|
||||||
|
<!ENTITY sung "♪" ><!--=music note (sung text sign)-->
|
||||||
|
|
||||||
|
<!ENTITY excl "!" ><!--=exclamation mark-->
|
||||||
|
<!ENTITY iexcl "¡" ><!--=inverted exclamation mark-->
|
||||||
|
<!ENTITY quot '"' ><!--=quotation mark-->
|
||||||
|
<!ENTITY apos "'" ><!--=apostrophe-->
|
||||||
|
<!ENTITY lpar "(" ><!--O: =left parenthesis-->
|
||||||
|
<!ENTITY rpar ")" ><!--C: =right parenthesis-->
|
||||||
|
<!ENTITY comma "," ><!--P: =comma-->
|
||||||
|
<!ENTITY lowbar "_" ><!--=low line-->
|
||||||
|
<!ENTITY hyphen "‐" ><!--=hyphen-->
|
||||||
|
<!ENTITY period "." ><!--=full stop, period-->
|
||||||
|
<!ENTITY sol "/" ><!--=solidus-->
|
||||||
|
<!ENTITY colon ":" ><!--/colon P:-->
|
||||||
|
<!ENTITY semi ";" ><!--=semicolon P:-->
|
||||||
|
<!ENTITY quest "?" ><!--=question mark-->
|
||||||
|
<!ENTITY iquest "¿" ><!--=inverted question mark-->
|
||||||
|
<!ENTITY laquo "‹" ><!--=angle quotation mark, left
|
||||||
|
But note that Unicode 1 & Maler & el Andaloussi give « -->
|
||||||
|
<!ENTITY raquo "›" ><!--=angle quotation mark, right
|
||||||
|
But note that Unicode 1 & Maler & el Andaloussi give » -->
|
||||||
|
<!ENTITY lsquo "‘" ><!--=single quotation mark, left-->
|
||||||
|
<!ENTITY rsquo "’" ><!--=single quotation mark, right-->
|
||||||
|
<!ENTITY ldquo "“" ><!--=double quotation mark, left-->
|
||||||
|
<!ENTITY rdquo "”" ><!--=double quotation mark, right-->
|
||||||
|
<!ENTITY nbsp " " ><!--=no break (required) space-->
|
||||||
|
<!ENTITY shy "­" ><!--=soft hyphen-->
|
||||||
|
|
||||||
|
|
110
src/documentation/content/xdocs/dtd/ISOpub.pen
Normal file
110
src/documentation/content/xdocs/dtd/ISOpub.pen
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOpub PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Publishing//EN//XML">
|
||||||
|
%ISOpub;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
<!ENTITY emsp " " ><!--=em space-->
|
||||||
|
<!ENTITY ensp " " ><!--=en space (1/2-em)-->
|
||||||
|
<!ENTITY emsp13 " " ><!--=1/3-em space-->
|
||||||
|
<!ENTITY emsp14 " " ><!--=1/4-em space-->
|
||||||
|
<!ENTITY numsp " " ><!--=digit space (width of a number)-->
|
||||||
|
<!ENTITY puncsp " " ><!--=punctuation space (width of comma)-->
|
||||||
|
<!ENTITY thinsp " " ><!--=thin space (1/6-em)-->
|
||||||
|
<!ENTITY hairsp " " ><!--=hair space-->
|
||||||
|
<!ENTITY mdash "—" ><!--=em dash-->
|
||||||
|
<!ENTITY ndash "–" ><!--=en dash-->
|
||||||
|
<!ENTITY dash "‐" ><!--=hyphen (true graphic)-->
|
||||||
|
<!ENTITY blank "␣" ><!--=significant blank symbol-->
|
||||||
|
<!ENTITY hellip "…" ><!--=ellipsis (horizontal)-->
|
||||||
|
<!ENTITY nldr "‥" ><!--=double baseline dot (en leader)-->
|
||||||
|
<!ENTITY frac13 "⅓" ><!--=fraction one-third-->
|
||||||
|
<!ENTITY frac23 "⅔" ><!--=fraction two-thirds-->
|
||||||
|
<!ENTITY frac15 "⅕" ><!--=fraction one-fifth-->
|
||||||
|
<!ENTITY frac25 "⅖" ><!--=fraction two-fifths-->
|
||||||
|
<!ENTITY frac35 "⅗" ><!--=fraction three-fifths-->
|
||||||
|
<!ENTITY frac45 "⅘" ><!--=fraction four-fifths-->
|
||||||
|
<!ENTITY frac16 "⅙" ><!--=fraction one-sixth-->
|
||||||
|
<!ENTITY frac56 "⅚" ><!--=fraction five-sixths-->
|
||||||
|
<!ENTITY incare "℅" ><!--=in-care-of symbol-->
|
||||||
|
<!ENTITY block "█" ><!--=full block-->
|
||||||
|
<!ENTITY uhblk "▀" ><!--=upper half block-->
|
||||||
|
<!ENTITY lhblk "▄" ><!--=lower half block-->
|
||||||
|
<!ENTITY blk14 "░" ><!--=25% shaded block-->
|
||||||
|
<!ENTITY blk12 "▒" ><!--=50% shaded block-->
|
||||||
|
<!ENTITY blk34 "▓" ><!--=75% shaded block-->
|
||||||
|
<!ENTITY marker "▮" ><!--=histogram marker-->
|
||||||
|
<!ENTITY cir "○" ><!--/circ B: =circle, open-->
|
||||||
|
<!ENTITY squ "□" ><!--=square, open-->
|
||||||
|
<!ENTITY rect "▭" ><!--=rectangle, open-->
|
||||||
|
<!ENTITY utri "▵" ><!--/triangle =up triangle, open-->
|
||||||
|
<!ENTITY dtri "▿" ><!--/triangledown =down triangle, open-->
|
||||||
|
<!ENTITY star "☆" ><!--=star, open-->
|
||||||
|
<!ENTITY bull "•" ><!--/bullet B: =round bullet, filled-->
|
||||||
|
<!ENTITY squf "▪" ><!--/blacksquare =sq bullet, filled-->
|
||||||
|
<!ENTITY utrif "▴" ><!--/blacktriangle =up tri, filled-->
|
||||||
|
<!ENTITY dtrif "▾" ><!--/blacktriangledown =dn tri, filled-->
|
||||||
|
<!ENTITY ltrif "◂" ><!--/blacktriangleleft R: =l tri, filled-->
|
||||||
|
<!ENTITY rtrif "▸" ><!--/blacktriangleright R: =r tri, filled-->
|
||||||
|
<!ENTITY clubs "♣" ><!--/clubsuit =club suit symbol-->
|
||||||
|
<!ENTITY diams "♢" ><!--/diamondsuit =diamond suit symbol-->
|
||||||
|
<!ENTITY hearts "♡" ><!--/heartsuit =heart suit symbol-->
|
||||||
|
<!ENTITY spades "♠" ><!--/spadesuit =spades suit symbol-->
|
||||||
|
<!ENTITY malt "✠" ><!--/maltese =maltese cross-->
|
||||||
|
<!ENTITY dagger "†" ><!--/dagger B: =dagger-->
|
||||||
|
<!ENTITY Dagger "‡" ><!--/ddagger B: =double dagger-->
|
||||||
|
<!ENTITY check "✓" ><!--/checkmark =tick, check mark-->
|
||||||
|
<!ENTITY cross "✗" ><!--=ballot cross-->
|
||||||
|
<!ENTITY sharp "♯" ><!--/sharp =musical sharp-->
|
||||||
|
<!ENTITY flat "♭" ><!--/flat =musical flat-->
|
||||||
|
<!ENTITY male "♂" ><!--=male symbol-->
|
||||||
|
<!ENTITY female "♀" ><!--=female symbol-->
|
||||||
|
<!ENTITY phone "⛠" ><!--=telephone symbol-->
|
||||||
|
<!ENTITY telrec "⌕" ><!--=telephone recorder symbol-->
|
||||||
|
<!ENTITY copysr "℗" ><!--=sound recording copyright sign-->
|
||||||
|
<!ENTITY caret "⁁" ><!--=caret (insertion mark)-->
|
||||||
|
<!ENTITY lsquor "‚" ><!--=rising single quote, left (low)-->
|
||||||
|
<!ENTITY ldquor "„" ><!--=rising dbl quote, left (low)-->
|
||||||
|
|
||||||
|
<!ENTITY fflig "ff" ><!--small ff ligature-->
|
||||||
|
<!ENTITY filig "fi" ><!--small fi ligature-->
|
||||||
|
<!ENTITY fjlig "fj" ><!--small fj ligature-->
|
||||||
|
<!ENTITY ffilig "ffi" ><!--small ffi ligature-->
|
||||||
|
<!ENTITY ffllig "ffl" ><!--small ffl ligature-->
|
||||||
|
<!ENTITY fllig "fl" ><!--small fl ligature-->
|
||||||
|
|
||||||
|
<!ENTITY mldr "‥" ><!--em leader-->
|
||||||
|
<!ENTITY rdquor "”" ><!--rising dbl quote, right (high)-->
|
||||||
|
<!ENTITY rsquor "’" ><!--rising single quote, right (high)-->
|
||||||
|
<!ENTITY vellip "⋮" ><!--vertical ellipsis-->
|
||||||
|
|
||||||
|
<!ENTITY hybull "⁃" ><!--rectangle, filled (hyphen bullet)-->
|
||||||
|
<!ENTITY loz "✧" ><!--/lozenge - lozenge or total mark-->
|
||||||
|
<!ENTITY lozf "✦" ><!--/blacklozenge - lozenge, filled-->
|
||||||
|
<!ENTITY ltri "◃" ><!--/triangleleft B: l triangle, open-->
|
||||||
|
<!ENTITY rtri "▹" ><!--/triangleright B: r triangle, open-->
|
||||||
|
<!ENTITY starf "★" ><!--/bigstar - star, filled-->
|
||||||
|
|
||||||
|
<!ENTITY natur "♮" ><!--/natural - music natural-->
|
||||||
|
<!ENTITY rx "℞" ><!--pharmaceutical prescription (Rx)-->
|
||||||
|
<!ENTITY sext "✶" ><!--sextile (6-pointed star)-->
|
||||||
|
|
||||||
|
<!ENTITY target "⌖" ><!--register mark or target-->
|
||||||
|
<!ENTITY dlcrop "⌍" ><!--downward left crop mark -->
|
||||||
|
<!ENTITY drcrop "⌌" ><!--downward right crop mark -->
|
||||||
|
<!ENTITY ulcrop "⌏" ><!--upward left crop mark -->
|
||||||
|
<!ENTITY urcrop "⌎" ><!--upward right crop mark -->
|
||||||
|
|
85
src/documentation/content/xdocs/dtd/ISOtech.pen
Normal file
85
src/documentation/content/xdocs/dtd/ISOtech.pen
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOtech PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
"ISOtech.pen">
|
||||||
|
%ISOtech;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
<!ENTITY aleph "ℵ" ><!--/aleph =aleph, Hebrew-->
|
||||||
|
<!ENTITY and "∧" ><!--/wedge /land B: =logical and-->
|
||||||
|
<!ENTITY ang90 "∟" ><!--=right (90 degree) angle-->
|
||||||
|
<!ENTITY angsph "∢" ><!--/sphericalangle =angle-spherical-->
|
||||||
|
<!ENTITY ap "≉" ><!--/approx R: =approximate-->
|
||||||
|
<!ENTITY becaus "∵" ><!--/because R: =because-->
|
||||||
|
<!ENTITY bottom "⊥" ><!--/bot B: =perpendicular-->
|
||||||
|
<!ENTITY cap "∩" ><!--/cap B: =intersection-->
|
||||||
|
<!ENTITY cong "≅" ><!--/cong R: =congruent with-->
|
||||||
|
<!ENTITY conint "∮" ><!--/oint L: =contour integral operator-->
|
||||||
|
<!ENTITY cup "∪" ><!--/cup B: =union or logical sum-->
|
||||||
|
<!ENTITY equiv "≡" ><!--/equiv R: =identical with-->
|
||||||
|
<!ENTITY exist "∃" ><!--/exists =at least one exists-->
|
||||||
|
<!ENTITY forall "∀" ><!--/forall =for all-->
|
||||||
|
<!ENTITY fnof "ƒ" ><!--=function of (italic small f)-->
|
||||||
|
<!ENTITY ge "≥" ><!--/geq /ge R: =greater-than-or-equal-->
|
||||||
|
<!ENTITY iff "⇔" ><!--/iff =if and only if-->
|
||||||
|
<!ENTITY infin "∞" ><!--/infty =infinity-->
|
||||||
|
<!ENTITY int "∫" ><!--/int L: =integral operator-->
|
||||||
|
<!ENTITY isin "∈" ><!--/in R: =set membership-->
|
||||||
|
<!ENTITY lang "〈" ><!--/langle O: =left angle bracket-->
|
||||||
|
<!ENTITY lArr "⇐" ><!--/Leftarrow A: =is implied by-->
|
||||||
|
<!ENTITY le "≤" ><!--/leq /le R: =less-than-or-equal-->
|
||||||
|
<!ENTITY minus "-" ><!--B: =minus sign-->
|
||||||
|
<!ENTITY mnplus "∓" ><!--/mp B: =minus-or-plus sign-->
|
||||||
|
<!ENTITY nabla "∇" ><!--/nabla =del, Hamilton operator-->
|
||||||
|
<!ENTITY ne "≠" ><!--/ne /neq R: =not equal-->
|
||||||
|
<!ENTITY ni "∋" ><!--/ni /owns R: =contains-->
|
||||||
|
<!ENTITY or "∨" ><!--/vee /lor B: =logical or-->
|
||||||
|
<!ENTITY par "∥" ><!--/parallel R: =parallel-->
|
||||||
|
<!ENTITY part "∂" ><!--/partial =partial differential-->
|
||||||
|
<!ENTITY permil "‰" ><!--=per thousand-->
|
||||||
|
<!ENTITY perp "⊥" ><!--/perp R: =perpendicular-->
|
||||||
|
<!ENTITY prime "′" ><!--/prime =prime or minute-->
|
||||||
|
<!ENTITY Prime "″" ><!--=double prime or second-->
|
||||||
|
<!ENTITY prop "∝" ><!--/propto R: =is proportional to-->
|
||||||
|
<!ENTITY radic "√" ><!--/surd =radical-->
|
||||||
|
<!ENTITY rang "〉" ><!--/rangle C: =right angle bracket-->
|
||||||
|
<!ENTITY rArr "⇒" ><!--/Rightarrow A: =implies-->
|
||||||
|
<!ENTITY sim "∼" ><!--/sim R: =similar-->
|
||||||
|
<!ENTITY sime "≃" ><!--/simeq R: =similar, equals-->
|
||||||
|
<!ENTITY square "□" ><!--/square B: =square-->
|
||||||
|
<!ENTITY sub "⊂" ><!--/subset R: =subset or is implied by-->
|
||||||
|
<!ENTITY sube "⊆" ><!--/subseteq R: =subset, equals-->
|
||||||
|
<!ENTITY sup "⊃" ><!--/supset R: =superset or implies-->
|
||||||
|
<!ENTITY supe "⊇" ><!--/supseteq R: =superset, equals-->
|
||||||
|
<!ENTITY there4 "∴" ><!--/therefore R: =therefore-->
|
||||||
|
<!ENTITY Verbar "‖" ><!--/Vert =dbl vertical bar-->
|
||||||
|
|
||||||
|
<!ENTITY angst "Å" ><!--Angstrom =capital A, ring-->
|
||||||
|
<!ENTITY bernou "ℬ" ><!--Bernoulli function (script capital B)-->
|
||||||
|
<!ENTITY compfn "∘" ><!--B: composite function (small circle)-->
|
||||||
|
<!ENTITY Dot "¨" ><!--=dieresis or umlaut mark-->
|
||||||
|
<!ENTITY DotDot "⃜" ><!--four dots above-->
|
||||||
|
<!ENTITY hamilt "ℋ" ><!--Hamiltonian (script capital H)-->
|
||||||
|
<!ENTITY lagran "ℒ" ><!--Lagrangian (script capital L)-->
|
||||||
|
<!ENTITY lowast "∗" ><!--low asterisk-->
|
||||||
|
<!ENTITY notin "∉" ><!--N: negated set membership-->
|
||||||
|
<!ENTITY order "ℴ" ><!--order of (script small o)-->
|
||||||
|
<!ENTITY phmmat "ℳ" ><!--physics M-matrix (script capital M)-->
|
||||||
|
<!ENTITY tdot "⃛" ><!--three dots above-->
|
||||||
|
<!ENTITY tprime "‴" ><!--triple prime-->
|
||||||
|
<!ENTITY wedgeq "≙" ><!--R: corresponds to (wedge, equals)-->
|
||||||
|
|
70
src/documentation/content/xdocs/dtd/book-cocoon-v10.dtd
Normal file
70
src/documentation/content/xdocs/dtd/book-cocoon-v10.dtd
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Cocoon Documentation Book DTD (Version 1.0)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD defines the */book.xml documentation configuration files.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE book PUBLIC
|
||||||
|
"-//APACHE//DTD Cocoon Documentation Book Vx.yz//EN"
|
||||||
|
"book-cocoon-vxyz.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
z := status identifier (optional)
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
We need to replace this DTD with the proper one.
|
||||||
|
We are only using this DTD to enable validation during "build docs"
|
||||||
|
because every XML instance must declare its ruleset.
|
||||||
|
|
||||||
|
This initial minimal DTD has been reverse-engineered from the structure
|
||||||
|
of the current documents, e.g.
|
||||||
|
documentation/xdocs/book.xml
|
||||||
|
|
||||||
|
AUTHORS:
|
||||||
|
David Crossley <crossley@apache.org>
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
- find the proper DTD for book.xml
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
20011031 Initial version. (DC)
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation.
|
||||||
|
|
||||||
|
Permission to copy in any form is granted provided this notice is
|
||||||
|
included in all copies. Permission to redistribute is granted
|
||||||
|
provided this file is distributed untouched in all its parts and
|
||||||
|
included files.
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT book (menu+)>
|
||||||
|
<!ELEMENT menu (menu-item|external)*>
|
||||||
|
<!ELEMENT menu-item EMPTY>
|
||||||
|
<!ELEMENT external EMPTY>
|
||||||
|
<!ATTLIST book software CDATA #REQUIRED
|
||||||
|
title CDATA #REQUIRED
|
||||||
|
copyright CDATA #REQUIRED
|
||||||
|
xmlns:xlink CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
<!ATTLIST menu label CDATA #REQUIRED
|
||||||
|
>
|
||||||
|
<!ATTLIST menu-item label CDATA #REQUIRED
|
||||||
|
href CDATA #REQUIRED
|
||||||
|
type (visible|hidden) "visible"
|
||||||
|
>
|
||||||
|
<!ATTLIST external label CDATA #REQUIRED
|
||||||
|
href CDATA #REQUIRED
|
||||||
|
type (visible|hidden) "visible"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
93
src/documentation/content/xdocs/dtd/changes-v11.dtd
Normal file
93
src/documentation/content/xdocs/dtd/changes-v11.dtd
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Changes DTD (Version 1.1)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software development changes for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD Changes Vx.y//EN"
|
||||||
|
"changes-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
It is important, expecially in open developped software projects, to keep
|
||||||
|
track of software changes both to give users indications of bugs that might
|
||||||
|
have been resolved, as well, and not less important, to provide credits
|
||||||
|
for the support given to the project. It is considered vital to provide
|
||||||
|
adequate payback using recognition and credits to let users and developers
|
||||||
|
feel part of the community, thus increasing development power.
|
||||||
|
|
||||||
|
AUTHORS:
|
||||||
|
Stefano Mazzocchi <stefano@apache.org>
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
20000316 Added bugfixing attribute. (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation.
|
||||||
|
|
||||||
|
Permission to copy in any form is granted provided this notice is
|
||||||
|
included in all copies. Permission to redistribute is granted
|
||||||
|
provided this file is distributed untouched in all its parts and
|
||||||
|
included files.
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//DTD Documentation V1.1//EN"
|
||||||
|
"document-v11.dtd">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common entities -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % types "add|remove|update|fix|unknown">
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document Type Definition -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT changes (devs, release*)>
|
||||||
|
<!ATTLIST changes %common.att;
|
||||||
|
%title.att;>
|
||||||
|
|
||||||
|
<!ELEMENT devs (person+)>
|
||||||
|
<!ATTLIST devs %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT release (action+)>
|
||||||
|
<!ATTLIST release %common.att;
|
||||||
|
version CDATA #REQUIRED
|
||||||
|
date CDATA #REQUIRED>
|
||||||
|
|
||||||
|
<!ELEMENT action (%content.mix;)*>
|
||||||
|
<!ATTLIST action %common.att;
|
||||||
|
dev IDREF #REQUIRED
|
||||||
|
type (%types;) #IMPLIED
|
||||||
|
due-to CDATA #IMPLIED
|
||||||
|
due-to-email CDATA #IMPLIED
|
||||||
|
fixes-bug CDATA #IMPLIED>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
71
src/documentation/content/xdocs/dtd/changes-v11.mod
Normal file
71
src/documentation/content/xdocs/dtd/changes-v11.mod
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 1999-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Changes Module (Version 1.1)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software development changes for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!ENTITY % changes PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Changes Vxy//EN"
|
||||||
|
"changes-vxy.mod">
|
||||||
|
%changes;
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
It is important, expecially in open developped software projects, to keep
|
||||||
|
track of software changes both to give users indications of bugs that might
|
||||||
|
have been resolved, as well, and not less important, to provide credits
|
||||||
|
for the support given to the project. It is considered vital to provide
|
||||||
|
adequate payback using recognition and credits to let users and developers
|
||||||
|
feel part of the community, thus increasing development power.
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
20000316 Added bugfixing attribute. (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document Type Definition -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT changes (title?, devs?, release+)>
|
||||||
|
<!ATTLIST changes %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT release (action+)>
|
||||||
|
<!ATTLIST release %common.att;
|
||||||
|
version CDATA #REQUIRED
|
||||||
|
date CDATA #REQUIRED>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
95
src/documentation/content/xdocs/dtd/changes-v13.dtd
Normal file
95
src/documentation/content/xdocs/dtd/changes-v13.dtd
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2002-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Changes DTD (Version 1.2)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software development changes for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD Changes Vx.y//EN"
|
||||||
|
"changes-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
It is important, expecially in open developped software projects, to keep
|
||||||
|
track of software changes both to give users indications of bugs that might
|
||||||
|
have been resolved, as well, and not less important, to provide credits
|
||||||
|
for the support given to the project. It is considered vital to provide
|
||||||
|
adequate payback using recognition and credits to let users and developers
|
||||||
|
feel part of the community, thus increasing development power.
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
20020611 Initial version. (SN)
|
||||||
|
20020613 Include the module of ISO character entity sets (DC)
|
||||||
|
[Version 1.2]
|
||||||
|
20030424 Adopt the loosened content model from document-v12 (JT)
|
||||||
|
20040614 Stay current with latest document-v13 (class attribute)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Documentation V1.3//EN"
|
||||||
|
"document-v13.mod">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common ISO Character Entity Sets -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common-charents PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
|
||||||
|
"common-charents-v10.mod">
|
||||||
|
%common-charents;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common elements -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Elements V1.0//EN"
|
||||||
|
"common-elems-v10.mod">
|
||||||
|
%common;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Changes module -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % changes PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Changes V1.1//EN"
|
||||||
|
"changes-v11.mod">
|
||||||
|
%changes;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
74
src/documentation/content/xdocs/dtd/common-charents-v10.mod
Normal file
74
src/documentation/content/xdocs/dtd/common-charents-v10.mod
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2002-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Common Character Entity Sets (Version 1.0)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
Common elements across all DTDs.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!ENTITY % common-charents PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Character Entity Sets Vx.y//EN"
|
||||||
|
"common-charents-vxy.mod">
|
||||||
|
%common-charents;
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
20020613 Initial version. (DC)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common ISO character entity sets -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % ISOlat1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||||
|
"../entity/ISOlat1.pen">
|
||||||
|
%ISOlat1;
|
||||||
|
|
||||||
|
<!ENTITY % ISOpub PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||||
|
"../entity/ISOpub.pen">
|
||||||
|
%ISOpub;
|
||||||
|
|
||||||
|
<!ENTITY % ISOtech PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
"../entity/ISOtech.pen">
|
||||||
|
%ISOtech;
|
||||||
|
|
||||||
|
<!ENTITY % ISOnum PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||||
|
"../entity/ISOnum.pen">
|
||||||
|
%ISOnum;
|
||||||
|
|
||||||
|
<!ENTITY % ISOdia PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||||
|
"../entity/ISOdia.pen">
|
||||||
|
%ISOdia;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
68
src/documentation/content/xdocs/dtd/common-elems-v10.mod
Normal file
68
src/documentation/content/xdocs/dtd/common-elems-v10.mod
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2002-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Common Elements (Version 1.0)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
Common elements across DTDs
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!ENTITY % common PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common elements Vx.y//EN"
|
||||||
|
"common-elems-vxy.mod">
|
||||||
|
%common;
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
20020611 Initial version. (SN)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common entities -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % types "add|remove|update|fix">
|
||||||
|
<!ENTITY % contexts "build|docs|code|admin|design">
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common elements -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT devs (person+)>
|
||||||
|
<!ATTLIST devs %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT action (%content.mix;)*>
|
||||||
|
<!ATTLIST action %common.att;
|
||||||
|
dev IDREF #REQUIRED
|
||||||
|
type (%types;) #IMPLIED
|
||||||
|
context (%contexts;) #IMPLIED
|
||||||
|
due-to CDATA #IMPLIED
|
||||||
|
due-to-email CDATA #IMPLIED
|
||||||
|
fixes-bug CDATA #IMPLIED>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
541
src/documentation/content/xdocs/dtd/document-v11.dtd
Normal file
541
src/documentation/content/xdocs/dtd/document-v11.dtd
Normal file
@ -0,0 +1,541 @@
|
|||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Documentation DTD (Version 1.1)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software documentation for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD Documentation Vx.y//EN"
|
||||||
|
"document-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
Many of the design patterns used in this DTD were take from the
|
||||||
|
W3C XML Specification DTD edited by Eve Maler <elm@arbortext.com>.
|
||||||
|
|
||||||
|
Where possible, great care has been used to reuse HTML tag
|
||||||
|
names to reduce learning efforts and to allow HTML editors to be
|
||||||
|
used for complex authorings like tables and lists.
|
||||||
|
|
||||||
|
EXTENSIBILITY:
|
||||||
|
This DTD includes several empty placeholders that can be used to
|
||||||
|
extend it. These placeholders are implemented with empty entities. Here
|
||||||
|
is the list of those empty entities and what they are used for:
|
||||||
|
|
||||||
|
- local.inline: this entity should contain extended definitions of
|
||||||
|
elements that can be used 'inline', or directly inside
|
||||||
|
the content. An example for this entity could be
|
||||||
|
|
||||||
|
<!ENTITY % local.inline "|citation">
|
||||||
|
|
||||||
|
- local.blocks: this entity should contain extended definitions of
|
||||||
|
elements that behave as 'blocks', thus can be visually
|
||||||
|
rendered as areas on the canvas. An example for this
|
||||||
|
entity could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.blocks "|poem">
|
||||||
|
|
||||||
|
- local.sections: this entity should contain extended definitions of
|
||||||
|
elements that behave as 'sections', thus can be considered
|
||||||
|
containers of block-level elements. An example for
|
||||||
|
this entity could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.sections "|chapter">
|
||||||
|
|
||||||
|
- local.headers: this entity should contain extended definitions of
|
||||||
|
elements that behave as parts of the document header.
|
||||||
|
An example for this header could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.headers ", notes?">
|
||||||
|
|
||||||
|
- local.footers: this entity should contain extended definitions of
|
||||||
|
elements that behave as parts of the document footer.
|
||||||
|
An example for this header could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.footers ", annotations*">
|
||||||
|
|
||||||
|
|
||||||
|
AUTHORS:
|
||||||
|
Stefano Mazzocchi <stefano@apache.org>
|
||||||
|
Steven Noels <stevenn@outerthought.org>
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
- should "form" tags be included?
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991121 Initial version. (SM)
|
||||||
|
19991123 Replaced "res" with more standard "strong" for emphasis. (SM)
|
||||||
|
19991124 Added "fork" element for window forking behavior. (SM)
|
||||||
|
19991124 Added "img-inline" element to separate from "img". (SM)
|
||||||
|
19991129 Removed "affiliation" from "author". (SM)
|
||||||
|
19991129 Made "author" empty and moved "name|email" as attributes. (SM)
|
||||||
|
19991215 Simplified table section. (SM)
|
||||||
|
19991215 Changed "img-block" in more friendly "figure". (SM)
|
||||||
|
20000125 Added the "icon" image. (SM)
|
||||||
|
20000126 Allowed "anchor" in all levels. (SM)
|
||||||
|
20000404 Removed the "role" attribute from common-xxx.att. (SM)
|
||||||
|
20000815 Allowed "code" inside "strong" and "em". (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities. (SM)
|
||||||
|
20011212 Removed xlink attributes since not used. (SM)
|
||||||
|
20011212 Removed "connect" since not required at this level. (SM)
|
||||||
|
20011218 Added "warning" as a block level object. (SM)
|
||||||
|
20011218 Removed explicitly numbered sections ("s1|s2|s3|s4"). (SM)
|
||||||
|
20011218 Added "section" element. (SM)
|
||||||
|
20011218 Allowed "body" to have blocks without a section. (SM)
|
||||||
|
20011218 Removed "sl" since not really different from "ul". (SM)
|
||||||
|
20020214 Moved empty placeholder entity declarations up front (SNS)
|
||||||
|
20020214 Corrected content model of content.mix parameter entity (SNS)
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation.
|
||||||
|
|
||||||
|
Permission to copy in any form is granted provided this notice is
|
||||||
|
included in all copies. Permission to redistribute is granted
|
||||||
|
provided this file is distributed untouched in all its parts and
|
||||||
|
included files.
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common character entities (included from external file) -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % ISOlat1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||||
|
"ISOlat1.pen">
|
||||||
|
%ISOlat1;
|
||||||
|
|
||||||
|
<!ENTITY % ISOpub PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||||
|
"ISOpub.pen">
|
||||||
|
%ISOpub;
|
||||||
|
|
||||||
|
<!ENTITY % ISOtech PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
"ISOtech.pen">
|
||||||
|
%ISOtech;
|
||||||
|
|
||||||
|
<!ENTITY % ISOnum PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||||
|
"ISOnum.pen">
|
||||||
|
%ISOnum;
|
||||||
|
|
||||||
|
<!ENTITY % ISOdia PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||||
|
"ISOdia.pen">
|
||||||
|
%ISOdia;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Useful entities for increased DTD readability -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % text "#PCDATA">
|
||||||
|
|
||||||
|
<!-- Entities referred to later on are defined up front -->
|
||||||
|
|
||||||
|
<!ENTITY % markup "strong|em|code|sub|sup">
|
||||||
|
<!ENTITY % special-inline "br|img|icon">
|
||||||
|
<!ENTITY % links "link|jump|fork">
|
||||||
|
<!ENTITY % paragraphs "p|source|note|warning|fixme">
|
||||||
|
<!ENTITY % tables "table">
|
||||||
|
<!ENTITY % lists "ol|ul|dl">
|
||||||
|
<!ENTITY % special-blocks "figure|anchor">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Entities for general XML compliance -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!-- Common attributes
|
||||||
|
Every element has an ID attribute (sometimes required,
|
||||||
|
but usually optional) for links. %common.att;
|
||||||
|
is for common attributes where the ID is optional, and
|
||||||
|
%common-idreq.att; is for common attributes where the
|
||||||
|
ID is required.
|
||||||
|
-->
|
||||||
|
<!ENTITY % common.att
|
||||||
|
'id ID #IMPLIED
|
||||||
|
xml:lang NMTOKEN #IMPLIED'>
|
||||||
|
<!ENTITY % common-idreq.att
|
||||||
|
'id ID #REQUIRED
|
||||||
|
xml:lang NMTOKEN #IMPLIED'>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- xml:space attribute ===============================================
|
||||||
|
Indicates that the element contains white space
|
||||||
|
that the formatter or other application should retain,
|
||||||
|
as appropriate to its function.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % xmlspace.att
|
||||||
|
'xml:space (default|preserve) #FIXED "preserve"'>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- def attribute =====================================================
|
||||||
|
Points to the element where the relevant definition can be
|
||||||
|
found, using the IDREF mechanism. %def.att; is for optional
|
||||||
|
def attributes, and %def-req.att; is for required def
|
||||||
|
attributes.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % def.att
|
||||||
|
'def IDREF #IMPLIED'>
|
||||||
|
<!ENTITY % def-req.att
|
||||||
|
'def IDREF #REQUIRED'>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ref attribute =====================================================
|
||||||
|
Points to the element where more information can be found,
|
||||||
|
using the IDREF mechanism. %ref.att; is for optional
|
||||||
|
ref attributes, and %ref-req.att; is for required ref
|
||||||
|
attributes.
|
||||||
|
================================================================== -->
|
||||||
|
<!ENTITY % ref.att
|
||||||
|
'ref IDREF #IMPLIED'>
|
||||||
|
<!ENTITY % ref-req.att
|
||||||
|
'ref IDREF #REQUIRED'>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Entities for general usage -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Key attribute =====================================================
|
||||||
|
Optionally provides a sorting or indexing key, for cases when
|
||||||
|
the element content is inappropriate for this purpose.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % key.att
|
||||||
|
'key CDATA #IMPLIED'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Title attributes ==================================================
|
||||||
|
Indicates that the element requires to have a title attribute.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % title.att
|
||||||
|
'title CDATA #REQUIRED'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Name attributes ==================================================
|
||||||
|
Indicates that the element requires to have a name attribute.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % name.att
|
||||||
|
'name CDATA #REQUIRED'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Email attributes ==================================================
|
||||||
|
Indicates that the element requires to have an email attribute.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % email.att
|
||||||
|
'email CDATA #REQUIRED'>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Link attributes ===================================================
|
||||||
|
Indicates that the element requires to have hyperlink attributes.
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % link.att
|
||||||
|
'href CDATA #IMPLIED
|
||||||
|
role CDATA #IMPLIED
|
||||||
|
title CDATA #IMPLIED '>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- General definitions -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!-- A person is a general human entity -->
|
||||||
|
<!ELEMENT person EMPTY>
|
||||||
|
<!ATTLIST person %common.att;
|
||||||
|
%name.att;
|
||||||
|
%email.att;>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Content definitions -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % local.inline "">
|
||||||
|
|
||||||
|
<!ENTITY % link-content.mix "%text;|%markup;|%special-inline; %local.inline;">
|
||||||
|
|
||||||
|
<!ENTITY % content.mix "%link-content.mix;|%links;">
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Phrase Markup -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- Strong (typically bold) -->
|
||||||
|
<!ELEMENT strong (%text;|code)*>
|
||||||
|
<!ATTLIST strong %common.att;>
|
||||||
|
|
||||||
|
<!-- Emphasis (typically italic) -->
|
||||||
|
<!ELEMENT em (%text;|code)*>
|
||||||
|
<!ATTLIST em %common.att;>
|
||||||
|
|
||||||
|
<!-- Code (typically monospaced) -->
|
||||||
|
<!ELEMENT code (%text;)>
|
||||||
|
<!ATTLIST code %common.att;>
|
||||||
|
|
||||||
|
<!-- Superscript (typically smaller and higher) -->
|
||||||
|
<!ELEMENT sup (%text;)>
|
||||||
|
<!ATTLIST sup %common.att;>
|
||||||
|
|
||||||
|
<!-- Subscript (typically smaller and lower) -->
|
||||||
|
<!ELEMENT sub (%text;)>
|
||||||
|
<!ATTLIST sub %common.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Hypertextual Links -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- hyperlink (equivalent of <a ...>) -->
|
||||||
|
<!ELEMENT link (%link-content.mix;)*>
|
||||||
|
<!ATTLIST link %common.att;
|
||||||
|
%link.att;>
|
||||||
|
|
||||||
|
<!-- windows-replacing link (equivalent of <a ... target="_top">) -->
|
||||||
|
<!ELEMENT jump (%link-content.mix;)*>
|
||||||
|
<!ATTLIST jump %common.att;
|
||||||
|
%link.att;>
|
||||||
|
|
||||||
|
<!-- window-forking link (equivalent of <a ... target="_new">) -->
|
||||||
|
<!ELEMENT fork (%link-content.mix;)*>
|
||||||
|
<!ATTLIST fork %common.att;
|
||||||
|
%link.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Specials -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- Breakline Object (typically forces line break) -->
|
||||||
|
<!ELEMENT br EMPTY>
|
||||||
|
<!ATTLIST br %common.att;>
|
||||||
|
|
||||||
|
<!-- Image Object (typically an inlined image) -->
|
||||||
|
<!ELEMENT img EMPTY>
|
||||||
|
<!ATTLIST img src CDATA #REQUIRED
|
||||||
|
alt CDATA #REQUIRED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
usemap CDATA #IMPLIED
|
||||||
|
ismap (ismap) #IMPLIED
|
||||||
|
%common.att;>
|
||||||
|
|
||||||
|
<!-- Image Icon (typically an inlined image placed as graphical item) -->
|
||||||
|
<!ELEMENT icon EMPTY>
|
||||||
|
<!ATTLIST icon src CDATA #REQUIRED
|
||||||
|
alt CDATA #REQUIRED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
%common.att;>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Blocks definitions -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % local.blocks "">
|
||||||
|
|
||||||
|
<!ENTITY % blocks "%paragraphs;|%tables;|%lists;|%special-blocks; %local.blocks;">
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Paragraphs -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- Text Paragraph (normally vertically space delimited) -->
|
||||||
|
<!ELEMENT p (%content.mix;)*>
|
||||||
|
<!ATTLIST p %common.att;>
|
||||||
|
|
||||||
|
<!-- Source Paragraph (normally space is preserved) -->
|
||||||
|
<!ELEMENT source (%content.mix;)*>
|
||||||
|
<!ATTLIST source %common.att;
|
||||||
|
%xmlspace.att;>
|
||||||
|
|
||||||
|
<!-- Note Paragraph (normally shown encapsulated) -->
|
||||||
|
<!ELEMENT note (%content.mix;)*>
|
||||||
|
<!ATTLIST note %common.att;>
|
||||||
|
|
||||||
|
<!-- Warning Paragraph (normally shown with eye-catching colors) -->
|
||||||
|
<!ELEMENT warning (%content.mix;)*>
|
||||||
|
<!ATTLIST warning %common.att;>
|
||||||
|
|
||||||
|
<!-- Fixme Paragraph (normally not shown) -->
|
||||||
|
<!ELEMENT fixme (%content.mix;)*>
|
||||||
|
<!ATTLIST fixme author CDATA #REQUIRED
|
||||||
|
%common.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Tables -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- Attributes that indicate the spanning of the table cell -->
|
||||||
|
<!ENTITY % cell.span
|
||||||
|
'colspan CDATA "1"
|
||||||
|
rowspan CDATA "1"'>
|
||||||
|
|
||||||
|
<!-- Table element -->
|
||||||
|
<!ELEMENT table (caption?, tr+)>
|
||||||
|
<!ATTLIST table %common.att;>
|
||||||
|
|
||||||
|
<!-- The table title -->
|
||||||
|
<!ELEMENT caption (%content.mix;)*>
|
||||||
|
<!ATTLIST caption %common.att;>
|
||||||
|
|
||||||
|
<!-- The table row element -->
|
||||||
|
<!ELEMENT tr (th|td)+>
|
||||||
|
<!ATTLIST tr %common.att;>
|
||||||
|
|
||||||
|
<!-- The table row header element -->
|
||||||
|
<!ELEMENT th (%content.mix;)*>
|
||||||
|
<!ATTLIST th %common.att;
|
||||||
|
%cell.span;>
|
||||||
|
|
||||||
|
<!-- The table row description element -->
|
||||||
|
<!ELEMENT td (%content.mix;)*>
|
||||||
|
<!ATTLIST td %common.att;
|
||||||
|
%cell.span;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Lists -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- List item -->
|
||||||
|
<!ELEMENT li (%content.mix;|%lists;)*>
|
||||||
|
<!ATTLIST li %common.att;>
|
||||||
|
|
||||||
|
<!-- Unordered list (typically bulleted) -->
|
||||||
|
<!ELEMENT ul (li|%lists;)+>
|
||||||
|
<!-- spacing attribute:
|
||||||
|
Use "normal" to get normal vertical spacing for items;
|
||||||
|
use "compact" to get less spacing. The default is dependent
|
||||||
|
on the stylesheet. -->
|
||||||
|
<!ATTLIST ul
|
||||||
|
%common.att;
|
||||||
|
spacing (normal|compact) #IMPLIED>
|
||||||
|
|
||||||
|
<!-- Ordered list (typically numbered) -->
|
||||||
|
<!ELEMENT ol (li|%lists;)+>
|
||||||
|
<!-- spacing attribute:
|
||||||
|
Use "normal" to get normal vertical spacing for items;
|
||||||
|
use "compact" to get less spacing. The default is dependent
|
||||||
|
on the stylesheet. -->
|
||||||
|
<!ATTLIST ol
|
||||||
|
%common.att;
|
||||||
|
spacing (normal|compact) #IMPLIED>
|
||||||
|
|
||||||
|
<!-- Definition list (typically two-column) -->
|
||||||
|
<!ELEMENT dl (dt,dd)+>
|
||||||
|
<!ATTLIST dl %common.att;>
|
||||||
|
|
||||||
|
<!-- Definition term -->
|
||||||
|
<!ELEMENT dt (%content.mix;)*>
|
||||||
|
<!ATTLIST dt %common.att;>
|
||||||
|
|
||||||
|
<!-- Definition description -->
|
||||||
|
<!ELEMENT dd (%content.mix;)*>
|
||||||
|
<!ATTLIST dd %common.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Special Blocks -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!-- Image Block (typically a separated and centered image) -->
|
||||||
|
<!ELEMENT figure EMPTY>
|
||||||
|
<!ATTLIST figure src CDATA #REQUIRED
|
||||||
|
alt CDATA #REQUIRED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
usemap CDATA #IMPLIED
|
||||||
|
ismap (ismap) #IMPLIED
|
||||||
|
%common.att;>
|
||||||
|
|
||||||
|
<!-- anchor point (equivalent of <a name="...">, typically not rendered) -->
|
||||||
|
<!ELEMENT anchor EMPTY>
|
||||||
|
<!ATTLIST anchor %common-idreq.att;>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT document (header?, body, footer?)>
|
||||||
|
<!ATTLIST document %common.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Header -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % local.headers "">
|
||||||
|
|
||||||
|
<!ELEMENT header (title, subtitle?, version?, type?, authors,
|
||||||
|
notice*, abstract? %local.headers;)>
|
||||||
|
<!ATTLIST header %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT title (%text;)>
|
||||||
|
<!ATTLIST title %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT subtitle (%text;)>
|
||||||
|
<!ATTLIST subtitle %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT version (%text;)>
|
||||||
|
<!ATTLIST version %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT type (%text;)>
|
||||||
|
<!ATTLIST type %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT authors (person+)>
|
||||||
|
<!ATTLIST authors %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT notice (%content.mix;)*>
|
||||||
|
<!ATTLIST notice %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT abstract (%content.mix;)*>
|
||||||
|
<!ATTLIST abstract %common.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Body -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % local.sections "">
|
||||||
|
|
||||||
|
<!ENTITY % sections "section %local.sections;">
|
||||||
|
|
||||||
|
<!ELEMENT body (%sections;|%blocks;)+>
|
||||||
|
<!ATTLIST body %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT section (%sections;|%blocks;)*>
|
||||||
|
<!ATTLIST section %title.att; %common.att;>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Footer -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % local.footers "">
|
||||||
|
|
||||||
|
<!ELEMENT footer (legal %local.footers;)>
|
||||||
|
|
||||||
|
<!ELEMENT legal (%content.mix;)*>
|
||||||
|
<!ATTLIST legal %common.att;>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
145
src/documentation/content/xdocs/dtd/document-v13.dtd
Normal file
145
src/documentation/content/xdocs/dtd/document-v13.dtd
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 1999-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Documentation DTD (Version 1.2)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software documentation for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD Documentation Vx.y//EN"
|
||||||
|
"document-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
Many of the design patterns used in this DTD were take from the
|
||||||
|
W3C XML Specification DTD edited by Eve Maler <elm@arbortext.com>.
|
||||||
|
|
||||||
|
Where possible, great care has been used to reuse HTML tag
|
||||||
|
names to reduce learning efforts and to allow HTML editors to be
|
||||||
|
used for complex authorings like tables and lists.
|
||||||
|
|
||||||
|
EXTENSIBILITY:
|
||||||
|
This DTD includes several empty placeholders that can be used to
|
||||||
|
extend it. These placeholders are implemented with empty entities. Here
|
||||||
|
is the list of those empty entities and what they are used for:
|
||||||
|
|
||||||
|
- local.inline: this entity should contain extended definitions of
|
||||||
|
elements that can be used 'inline', or directly inside
|
||||||
|
the content. An example for this entity could be
|
||||||
|
|
||||||
|
<!ENTITY % local.inline "|citation">
|
||||||
|
|
||||||
|
- local.blocks: this entity should contain extended definitions of
|
||||||
|
elements that behave as 'blocks', thus can be visually
|
||||||
|
rendered as areas on the canvas. An example for this
|
||||||
|
entity could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.blocks "|poem">
|
||||||
|
|
||||||
|
- local.sections: this entity should contain extended definitions of
|
||||||
|
elements that behave as 'sections', thus can be considered
|
||||||
|
containers of block-level elements. An example for
|
||||||
|
this entity could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.sections "|chapter">
|
||||||
|
|
||||||
|
- local.headers: this entity should contain extended definitions of
|
||||||
|
elements that behave as parts of the document header.
|
||||||
|
An example for this header could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.headers ", notes?">
|
||||||
|
|
||||||
|
- local.footers: this entity should contain extended definitions of
|
||||||
|
elements that behave as parts of the document footer.
|
||||||
|
An example for this header could be:
|
||||||
|
|
||||||
|
<!ENTITY % local.footers ", annotations*">
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
- should "form" tags be included?
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991121 Initial version. (SM)
|
||||||
|
19991123 Replaced "res" with more standard "strong" for emphasis. (SM)
|
||||||
|
19991124 Added "fork" element for window forking behavior. (SM)
|
||||||
|
19991124 Added "img-inline" element to separate from "img". (SM)
|
||||||
|
19991129 Removed "affiliation" from "author". (SM)
|
||||||
|
19991129 Made "author" empty and moved "name|email" as attributes. (SM)
|
||||||
|
19991215 Simplified table section. (SM)
|
||||||
|
19991215 Changed "img-block" in more friendly "figure". (SM)
|
||||||
|
20000125 Added the "icon" image. (SM)
|
||||||
|
20000126 Allowed "anchor" in all levels. (SM)
|
||||||
|
20000404 Removed the "role" attribute from common-xxx.att. (SM)
|
||||||
|
20000815 Allowed "code" inside "strong" and "em". (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities. (SM)
|
||||||
|
20011212 Removed xlink attributes since not used. (SM)
|
||||||
|
20011212 Removed "connect" since not required at this level. (SM)
|
||||||
|
20011218 Added "warning" as a block level object. (SM)
|
||||||
|
20011218 Removed explicitly numbered sections ("s1|s2|s3|s4"). (SM)
|
||||||
|
20011218 Added "section" element. (SM)
|
||||||
|
20011218 Allowed "body" to have blocks without a section. (SM)
|
||||||
|
20011218 Removed "sl" since not really different from "ul". (SM)
|
||||||
|
20020214 Moved empty placeholder entity declarations up front (SNS)
|
||||||
|
20020214 Corrected content model of content.mix parameter entity (SNS)
|
||||||
|
20020519 The DTDs are now modular so various parts can be re-used (SNS)
|
||||||
|
20020606 Made title into an child element of its parent instead of an attribute (SNS)
|
||||||
|
20020613 Move the declarations of ISO character entity sets to module (DC)
|
||||||
|
[Version 1.2]
|
||||||
|
20030320 Make @href required for link elements. (SNS)
|
||||||
|
20030320 Allow links (link|jump|fork) and inline elements (br|img|icon|acronym) inside title. (SNS)
|
||||||
|
20030419 Allow inline content (strong|em|code|sub|sup|br|img|icon|acronym|link|jump|fork) in strong and em. (JT)
|
||||||
|
20030419 Allow paragraphs (p|source|note|warning|fixme), table and figure|anchor inside li. (JT)
|
||||||
|
20030419 Allow paragraphs (p|source|note|warning|fixme), lists (ol|ul|dl), table, figure|anchor inside dd. (JT)
|
||||||
|
20030419 Allow paragraphs (p|source|note|warning|fixme), lists (ol|ul|dl), table, figure|anchor inside tables (td|dh). (JT)
|
||||||
|
20040614 The attribute "class" is now defined on every element. (RT)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common ISO Character Entity Sets -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common-charents PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
|
||||||
|
"common-charents-v10.mod">
|
||||||
|
%common-charents;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Documentation V1.3//EN"
|
||||||
|
"document-v13.mod">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
432
src/documentation/content/xdocs/dtd/document-v13.mod
Normal file
432
src/documentation/content/xdocs/dtd/document-v13.mod
Normal file
@ -0,0 +1,432 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2002-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Common Documentation elements (Version 1.2)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software documentation for use with the Apache projects.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Documentation Vxy//EN"
|
||||||
|
"document-vxy.mod">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
20020608 Initial version. (SN)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Useful entities for increased DTD readability -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!ENTITY % text "#PCDATA">
|
||||||
|
<!-- Entities referred to later on are defined up front -->
|
||||||
|
<!ENTITY % markup "strong|em|code|sub|sup">
|
||||||
|
<!ENTITY % special-inline "br|img|icon|acronym">
|
||||||
|
<!ENTITY % links "link|jump|fork">
|
||||||
|
<!ENTITY % paragraphs "p|source|note|warning|fixme">
|
||||||
|
<!ENTITY % tables "table">
|
||||||
|
<!ENTITY % lists "ol|ul|dl">
|
||||||
|
<!ENTITY % special-blocks "figure|anchor">
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Entities for general XML compliance -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common attributes
|
||||||
|
Every element has an ID attribute (sometimes required,
|
||||||
|
but usually optional) for links. %common.att;
|
||||||
|
is for common attributes where the ID is optional, and
|
||||||
|
%common-idreq.att; is for common attributes where the
|
||||||
|
ID is required.
|
||||||
|
-->
|
||||||
|
<!ENTITY % common.att 'id ID #IMPLIED
|
||||||
|
class NMTOKEN #IMPLIED
|
||||||
|
xml:lang NMTOKEN #IMPLIED'>
|
||||||
|
<!ENTITY % common-idreq.att 'id ID #REQUIRED
|
||||||
|
class NMTOKEN #IMPLIED
|
||||||
|
xml:lang NMTOKEN #IMPLIED'>
|
||||||
|
<!-- xml:space attribute ===============================================
|
||||||
|
Indicates that the element contains white space
|
||||||
|
that the formatter or other application should retain,
|
||||||
|
as appropriate to its function.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % xmlspace.att 'xml:space (default|preserve) #FIXED "preserve"'>
|
||||||
|
<!-- def attribute =====================================================
|
||||||
|
Points to the element where the relevant definition can be
|
||||||
|
found, using the IDREF mechanism. %def.att; is for optional
|
||||||
|
def attributes, and %def-req.att; is for required def
|
||||||
|
attributes.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % def.att 'def IDREF #IMPLIED'>
|
||||||
|
<!ENTITY % def-req.att 'def IDREF #REQUIRED'>
|
||||||
|
<!-- ref attribute =====================================================
|
||||||
|
Points to the element where more information can be found,
|
||||||
|
using the IDREF mechanism. %ref.att; is for optional
|
||||||
|
ref attributes, and %ref-req.att; is for required ref
|
||||||
|
attributes.
|
||||||
|
================================================================== -->
|
||||||
|
<!ENTITY % ref.att 'ref IDREF #IMPLIED'>
|
||||||
|
<!ENTITY % ref-req.att 'ref IDREF #REQUIRED'>
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Entities for general usage -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Key attribute =====================================================
|
||||||
|
Optionally provides a sorting or indexing key, for cases when
|
||||||
|
the element content is inappropriate for this purpose.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % key.att 'key CDATA #IMPLIED'>
|
||||||
|
<!-- Title attributes ==================================================
|
||||||
|
Indicates that the element requires to have a title attribute.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % title.att 'title CDATA #REQUIRED'>
|
||||||
|
<!-- Name attributes ==================================================
|
||||||
|
Indicates that the element requires to have a name attribute.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % name.att 'name CDATA #REQUIRED'>
|
||||||
|
<!-- Email attributes ==================================================
|
||||||
|
Indicates that the element requires to have an email attribute.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % email.att 'email CDATA #REQUIRED'>
|
||||||
|
<!-- Link attributes ===================================================
|
||||||
|
Indicates that the element requires to have hyperlink attributes.
|
||||||
|
==================================================================== -->
|
||||||
|
<!ENTITY % link.att 'href CDATA #REQUIRED
|
||||||
|
role CDATA #IMPLIED
|
||||||
|
title CDATA #IMPLIED '>
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- General definitions -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- A person is a general unparsed human entity -->
|
||||||
|
<!ELEMENT person EMPTY>
|
||||||
|
<!ATTLIST person
|
||||||
|
%common.att;
|
||||||
|
%name.att;
|
||||||
|
%email.att;
|
||||||
|
>
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Content definitions -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!ENTITY % local.inline "">
|
||||||
|
<!ENTITY % link-content.mix "%text;|%markup;|%special-inline; %local.inline;">
|
||||||
|
<!ENTITY % content.mix "%link-content.mix;|%links;">
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Phrase Markup -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Strong (typically bold) -->
|
||||||
|
<!ELEMENT strong (%content.mix;)*>
|
||||||
|
<!ATTLIST strong
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Emphasis (typically italic) -->
|
||||||
|
<!ELEMENT em (%content.mix;)*>
|
||||||
|
<!ATTLIST em
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Code (typically monospaced) -->
|
||||||
|
<!ELEMENT code (%text;)>
|
||||||
|
<!ATTLIST code
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Superscript (typically smaller and higher) -->
|
||||||
|
<!ELEMENT sup (%text;)>
|
||||||
|
<!ATTLIST sup
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Subscript (typically smaller and lower) -->
|
||||||
|
<!ELEMENT sub (%text;)>
|
||||||
|
<!ATTLIST sub
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Hypertextual Links -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- hyperlink (equivalent of <a ...>) -->
|
||||||
|
<!ELEMENT link (%link-content.mix;)*>
|
||||||
|
<!ATTLIST link
|
||||||
|
%common.att;
|
||||||
|
%link.att;
|
||||||
|
>
|
||||||
|
<!-- windows-replacing link (equivalent of <a ... target="_top">) -->
|
||||||
|
<!ELEMENT jump (%link-content.mix;)*>
|
||||||
|
<!ATTLIST jump
|
||||||
|
%common.att;
|
||||||
|
%link.att;
|
||||||
|
>
|
||||||
|
<!-- window-forking link (equivalent of <a ... target="_blank">) -->
|
||||||
|
<!ELEMENT fork (%link-content.mix;)*>
|
||||||
|
<!ATTLIST fork
|
||||||
|
%common.att;
|
||||||
|
%link.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Specials -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Breakline Object (typically forces line break) -->
|
||||||
|
<!ELEMENT br EMPTY>
|
||||||
|
<!ATTLIST br
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Image Object (typically an inlined image) -->
|
||||||
|
<!ELEMENT img EMPTY>
|
||||||
|
<!ATTLIST img
|
||||||
|
src CDATA #REQUIRED
|
||||||
|
alt CDATA #REQUIRED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
usemap CDATA #IMPLIED
|
||||||
|
ismap (ismap) #IMPLIED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Image Icon (typically an inlined image placed as graphical item) -->
|
||||||
|
<!ELEMENT icon EMPTY>
|
||||||
|
<!ATTLIST icon
|
||||||
|
src CDATA #REQUIRED
|
||||||
|
alt CDATA #REQUIRED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Acronym (in modern browsers, will have rollover text) -->
|
||||||
|
<!ELEMENT acronym (%text;)*>
|
||||||
|
<!ATTLIST acronym
|
||||||
|
title CDATA #REQUIRED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Blocks definitions -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!ENTITY % local.blocks "">
|
||||||
|
<!ENTITY % blocks "%paragraphs;|%tables;|%lists;|%special-blocks; %local.blocks;">
|
||||||
|
|
||||||
|
<!-- Flow mixes block and inline -->
|
||||||
|
<!ENTITY % flow "%content.mix;|%blocks;">
|
||||||
|
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Paragraphs -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Text Paragraph (normally vertically space delimited. Space can be preserved.) -->
|
||||||
|
<!ELEMENT p (%content.mix;)*>
|
||||||
|
<!ATTLIST p
|
||||||
|
%common.att;
|
||||||
|
xml:space (default|preserve) #IMPLIED
|
||||||
|
>
|
||||||
|
<!-- Source Paragraph (normally space is preserved) -->
|
||||||
|
<!ELEMENT source (%content.mix;)*>
|
||||||
|
<!ATTLIST source
|
||||||
|
%common.att;
|
||||||
|
%xmlspace.att;
|
||||||
|
>
|
||||||
|
<!-- Note Paragraph (normally shown encapsulated) -->
|
||||||
|
<!ELEMENT note (%content.mix;)*>
|
||||||
|
<!ATTLIST note
|
||||||
|
label CDATA #IMPLIED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Warning Paragraph (normally shown with eye-catching colors) -->
|
||||||
|
<!ELEMENT warning (%content.mix;)*>
|
||||||
|
<!ATTLIST warning
|
||||||
|
label CDATA #IMPLIED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Fixme Paragraph (normally not shown) -->
|
||||||
|
<!ELEMENT fixme (%content.mix;)*>
|
||||||
|
<!ATTLIST fixme
|
||||||
|
author CDATA #REQUIRED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Tables -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Attributes that indicate the spanning of the table cell -->
|
||||||
|
<!ENTITY % cell.span 'colspan CDATA "1"
|
||||||
|
rowspan CDATA "1"'>
|
||||||
|
<!-- Table element -->
|
||||||
|
<!ELEMENT table (caption?, tr+)>
|
||||||
|
<!ATTLIST table
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- The table title -->
|
||||||
|
<!ELEMENT caption (%content.mix;)*>
|
||||||
|
<!ATTLIST caption
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- The table row element -->
|
||||||
|
<!ELEMENT tr (th | td)+>
|
||||||
|
<!ATTLIST tr
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- The table row header element -->
|
||||||
|
<!ELEMENT th (%flow;)*>
|
||||||
|
<!ATTLIST th
|
||||||
|
%common.att;
|
||||||
|
%cell.span;
|
||||||
|
>
|
||||||
|
<!-- The table row description element -->
|
||||||
|
<!ELEMENT td (%flow;)*>
|
||||||
|
<!ATTLIST td
|
||||||
|
%common.att;
|
||||||
|
%cell.span;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Lists -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- List item -->
|
||||||
|
<!ELEMENT li (%flow;)*>
|
||||||
|
<!ATTLIST li
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Unordered list (typically bulleted) -->
|
||||||
|
<!ELEMENT ul (li | %lists;)+>
|
||||||
|
<!-- spacing attribute:
|
||||||
|
Use "normal" to get normal vertical spacing for items;
|
||||||
|
use "compact" to get less spacing. The default is dependent
|
||||||
|
on the stylesheet. -->
|
||||||
|
<!ATTLIST ul
|
||||||
|
%common.att;
|
||||||
|
spacing (normal | compact) #IMPLIED
|
||||||
|
>
|
||||||
|
<!-- Ordered list (typically numbered) -->
|
||||||
|
<!ELEMENT ol (li | %lists;)+>
|
||||||
|
<!-- spacing attribute:
|
||||||
|
Use "normal" to get normal vertical spacing for items;
|
||||||
|
use "compact" to get less spacing. The default is dependent
|
||||||
|
on the stylesheet. -->
|
||||||
|
<!ATTLIST ol
|
||||||
|
%common.att;
|
||||||
|
spacing (normal | compact) #IMPLIED
|
||||||
|
>
|
||||||
|
<!-- Definition list (typically two-column) -->
|
||||||
|
<!ELEMENT dl (dt, dd)+>
|
||||||
|
<!ATTLIST dl
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Definition term -->
|
||||||
|
<!ELEMENT dt (%content.mix;)*>
|
||||||
|
<!ATTLIST dt
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- Definition description -->
|
||||||
|
<!ELEMENT dd (%flow; )*>
|
||||||
|
<!ATTLIST dd
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Special Blocks -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Image Block (typically a separated and centered image) -->
|
||||||
|
<!ELEMENT figure EMPTY>
|
||||||
|
<!ATTLIST figure
|
||||||
|
src CDATA #REQUIRED
|
||||||
|
alt CDATA #REQUIRED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
usemap CDATA #IMPLIED
|
||||||
|
ismap (ismap) #IMPLIED
|
||||||
|
align CDATA #IMPLIED
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- anchor point (equivalent of <a name="...">, typically not rendered) -->
|
||||||
|
<!ELEMENT anchor EMPTY>
|
||||||
|
<!ATTLIST anchor
|
||||||
|
%common-idreq.att;
|
||||||
|
>
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!ELEMENT document (header, body, footer?)>
|
||||||
|
<!ATTLIST document
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Header -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!ENTITY % local.headers "">
|
||||||
|
<!ELEMENT header (title, subtitle?, version?, type?, authors?,
|
||||||
|
notice*, abstract? %local.headers;)>
|
||||||
|
<!ATTLIST header
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT title (%text; | %markup; | %links; | %special-inline;)*>
|
||||||
|
<!ATTLIST title
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT subtitle (%text; | %markup;)*>
|
||||||
|
<!ATTLIST subtitle
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT version (%text;)>
|
||||||
|
<!ATTLIST version
|
||||||
|
%common.att;
|
||||||
|
major CDATA #IMPLIED
|
||||||
|
minor CDATA #IMPLIED
|
||||||
|
fix CDATA #IMPLIED
|
||||||
|
tag CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
<!ELEMENT type (%text;)>
|
||||||
|
<!ATTLIST type
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT authors (person+)>
|
||||||
|
<!ATTLIST authors
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT notice (%content.mix;)*>
|
||||||
|
<!ATTLIST notice
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT abstract (%content.mix;)*>
|
||||||
|
<!ATTLIST abstract
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Body -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!ENTITY % local.sections "">
|
||||||
|
<!ENTITY % sections "section %local.sections;">
|
||||||
|
<!ELEMENT body (%sections; | %blocks;)+>
|
||||||
|
<!ATTLIST body
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!ELEMENT section (title, (%sections; | %blocks;)*)>
|
||||||
|
<!ATTLIST section
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!-- Footer -->
|
||||||
|
<!-- ==================================================== -->
|
||||||
|
<!ENTITY % local.footers "">
|
||||||
|
<!ELEMENT footer (legal %local.footers;)>
|
||||||
|
<!ELEMENT legal (%content.mix;)*>
|
||||||
|
<!ATTLIST legal
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
76
src/documentation/content/xdocs/dtd/faq-v11.dtd
Normal file
76
src/documentation/content/xdocs/dtd/faq-v11.dtd
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache FAQ DTD (Version 1.1)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software FAQ's for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD FAQ Vx.y//EN"
|
||||||
|
"faq-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
FAQs represent a powerful knowledge base and a very good way of solving
|
||||||
|
common user problems reducing messages on mail lists and reducing the effort
|
||||||
|
required for software installation and usage. Thid DTD want to be a common
|
||||||
|
format for FAQ interchange to allow FAQ-O-Matic-type workgroup services to
|
||||||
|
be published in other formats as well as enhancing data interchange.
|
||||||
|
|
||||||
|
AUTHORS:
|
||||||
|
Stefano Mazzocchi <stefano@apache.org>
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation.
|
||||||
|
|
||||||
|
Permission to copy in any form is granted provided this notice is
|
||||||
|
included in all copies. Permission to redistribute is granted
|
||||||
|
provided this file is distributed untouched in all its parts and
|
||||||
|
included files.
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//DTD Documentation V1.1//EN"
|
||||||
|
"document-v11.dtd">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document Type Definition -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT faqs (authors?, faq)+>
|
||||||
|
<!ATTLIST faqs %common.att;
|
||||||
|
%title.att;>
|
||||||
|
|
||||||
|
<!ELEMENT faq (question, answer)>
|
||||||
|
<!ATTLIST faq %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT question (%content.mix;)*>
|
||||||
|
<!ATTLIST question %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT answer (%blocks;)*>
|
||||||
|
<!ATTLIST answer author IDREF #IMPLIED>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
69
src/documentation/content/xdocs/dtd/faq-v12.mod
Normal file
69
src/documentation/content/xdocs/dtd/faq-v12.mod
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 2002-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Faq module (Version 1.1)
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!ENTITY % faq PUBLIC
|
||||||
|
"-//APACHE//ENTITIES FAQ Vxy//EN"
|
||||||
|
"faq-vxy.mod">
|
||||||
|
%faq;
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
20020608 Initial version. (SN)
|
||||||
|
[Version 1.2]
|
||||||
|
20030505 Allow mixed content in <answer>, to match <question> (JT)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Element declarations -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT faqs (authors?, (faq|part)+)>
|
||||||
|
<!ATTLIST faqs %common.att;
|
||||||
|
%title.att;>
|
||||||
|
|
||||||
|
<!ELEMENT part (title, (faq | part)+) >
|
||||||
|
<!ATTLIST part %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT faq (question, answer)>
|
||||||
|
<!ATTLIST faq %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT question (%content.mix;|elaboration)*>
|
||||||
|
<!ATTLIST question %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT elaboration (%content.mix;)*>
|
||||||
|
<!ATTLIST elaboration %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT answer (%flow;)*>
|
||||||
|
<!ATTLIST answer author IDREF #IMPLIED>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
86
src/documentation/content/xdocs/dtd/faq-v13.dtd
Normal file
86
src/documentation/content/xdocs/dtd/faq-v13.dtd
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 1999-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache FAQ DTD (Version 1.2)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software FAQ's for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE faqs PUBLIC
|
||||||
|
"-//APACHE//DTD FAQ Vx.y//EN"
|
||||||
|
"faq-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
FAQs represent a powerful knowledge base and a very good way of solving
|
||||||
|
common user problems reducing messages on mail lists and reducing the effort
|
||||||
|
required for software installation and usage. Thid DTD want to be a common
|
||||||
|
format for FAQ interchange to allow FAQ-O-Matic-type workgroup services to
|
||||||
|
be published in other formats as well as enhancing data interchange.
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
20020418 Added an (optional) 'part' element to create sections in a faq (SN)
|
||||||
|
20020613 Include the module of ISO character entity sets (DC)
|
||||||
|
[Version 1.2]
|
||||||
|
20030424 Adopt the loosened content model from document-v12 (JT)
|
||||||
|
20040614 Stay current with latest document-v13 (class attribute)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Documentation V1.3//EN"
|
||||||
|
"document-v13.mod">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common ISO Character Entity Sets -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common-charents PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
|
||||||
|
"common-charents-v10.mod">
|
||||||
|
%common-charents;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document Type Definition -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % faq PUBLIC
|
||||||
|
"-//APACHE//ENTITIES FAQ V1.1//EN"
|
||||||
|
"faq-v12.mod">
|
||||||
|
%faq;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
254
src/documentation/content/xdocs/dtd/javadoc-v04draft.dtd
Normal file
254
src/documentation/content/xdocs/dtd/javadoc-v04draft.dtd
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache JavaDoc DTD (version 0.4-draft)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD is designed to capture the output of JavaDoc as an XML document
|
||||||
|
through the use of the JavaDocXML Doclet. The hope is that by having the
|
||||||
|
JavaDoc documentation in an XML format, it will be easier for application
|
||||||
|
developers working with XML to treat their java source documentation in the
|
||||||
|
same way they treat any other XML document within their publication framework.
|
||||||
|
|
||||||
|
This DTD should reflect the information contained within the RootDoc object
|
||||||
|
passed to the JavaDocXML Doclet by JavaDoc. The RootDoc object and the rest
|
||||||
|
of the javaDoc Doclet API is specified at
|
||||||
|
|
||||||
|
http://java.sun.com/products/jdk/1.2/docs/tooldocs/javadoc/doclet/index.html
|
||||||
|
|
||||||
|
The only information that appears to be difficult to derive from this DTD
|
||||||
|
that is easy to obtain from the RootDoc object is the information about
|
||||||
|
serialization. However, this information should be derivable by manually
|
||||||
|
looking for the correct serialization methods and other related structures.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD JavaDoc Vx.yz//EN"
|
||||||
|
"javadoc-vxyz.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
z := status identifier (optional)
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
The authors would like to thank the Cocoon's mail list subscribers for
|
||||||
|
providing such great support and feedback for this DTD.
|
||||||
|
|
||||||
|
AUTHORS:
|
||||||
|
Kenneth Murphy <murphyk@umsystem.edu>
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
199909?? Original idea of XML doclet. (KM)
|
||||||
|
199910?? Initial version of this DTD. (KM)
|
||||||
|
19991129 Cleaned up DTD. (SM)
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation.
|
||||||
|
|
||||||
|
Permission to copy in any form is granted provided this notice is
|
||||||
|
included in all copies. Permission to redistribute is granted
|
||||||
|
provided this file is distributed untouched in all its parts and
|
||||||
|
included files.
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common Attribute Entities -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % name 'name CDATA #REQUIRED'>
|
||||||
|
<!ENTITY % dimension 'dimension CDATA #REQUIRED'>
|
||||||
|
|
||||||
|
<!ENTITY % abstract 'abstract (true | false) "false"'>
|
||||||
|
<!ENTITY % anonymous 'anonymous (true | false) "false"'>
|
||||||
|
<!ENTITY % synthetic 'synthetic (true | false) "false"'>
|
||||||
|
<!ENTITY % static 'static (true | false) "false"'>
|
||||||
|
<!ENTITY % final 'final (true | false) "false"'>
|
||||||
|
<!ENTITY % transient 'transient (true | false) "false"'>
|
||||||
|
<!ENTITY % volatile 'volatile (true | false) "false"'>
|
||||||
|
<!ENTITY % native 'native (true | false) "false"'>
|
||||||
|
<!ENTITY % synchronized 'synchronized (true | false) "false"'>
|
||||||
|
|
||||||
|
<!ENTITY % access 'access (private | package | protected | public) "package"'>
|
||||||
|
<!ENTITY % class.access 'access (package | public) "package"'>
|
||||||
|
|
||||||
|
<!ENTITY % extensibility 'extensibility (abstract | final | default) "default"'>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Javadoc -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT javadoc (package*, class*, interface*)>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Package -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT package (doc?, package*, class*, interface*)>
|
||||||
|
<!ATTLIST package %name;>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Class -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT class (doc?,
|
||||||
|
extends_class?,
|
||||||
|
implements?,
|
||||||
|
field*,
|
||||||
|
constructor*,
|
||||||
|
method*,
|
||||||
|
innerclass*)>
|
||||||
|
<!ATTLIST class
|
||||||
|
%name;
|
||||||
|
%extensibility;
|
||||||
|
%class.access;>
|
||||||
|
|
||||||
|
<!ELEMENT extends_class (classref+)>
|
||||||
|
|
||||||
|
<!ELEMENT innerclass (doc?,
|
||||||
|
extends?,
|
||||||
|
implements?,
|
||||||
|
field*,
|
||||||
|
constructor*,
|
||||||
|
method*)>
|
||||||
|
<!ATTLIST innerclass
|
||||||
|
%name;
|
||||||
|
%access;
|
||||||
|
%abstract;
|
||||||
|
%anonymous;
|
||||||
|
%final;
|
||||||
|
%static;>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Interface -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT interface (doc?,
|
||||||
|
extends_interface?,
|
||||||
|
field*,
|
||||||
|
method*)>
|
||||||
|
<!ATTLIST interface
|
||||||
|
%name;
|
||||||
|
%access;>
|
||||||
|
|
||||||
|
<!ELEMENT extends_interface (interfaceref+)>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Elements -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT implements (interfaceref+)>
|
||||||
|
|
||||||
|
<!ELEMENT throws (classref)+>
|
||||||
|
|
||||||
|
<!ELEMENT classref EMPTY>
|
||||||
|
<!ATTLIST classref %name;>
|
||||||
|
|
||||||
|
<!ELEMENT interfaceref EMPTY>
|
||||||
|
<!ATTLIST interfaceref %name;>
|
||||||
|
|
||||||
|
<!ELEMENT methodref EMPTY>
|
||||||
|
<!ATTLIST methodref %name;>
|
||||||
|
|
||||||
|
<!ELEMENT packageref EMPTY>
|
||||||
|
<!ATTLIST packageref %name;>
|
||||||
|
|
||||||
|
<!ELEMENT primitive EMPTY>
|
||||||
|
<!ATTLIST primitive
|
||||||
|
type (void | boolean | int | long | byte | short | double | float | char) #REQUIRED>
|
||||||
|
|
||||||
|
<!ELEMENT field (doc?, (classref | interfaceref | primitive))>
|
||||||
|
<!ATTLIST field
|
||||||
|
%name;
|
||||||
|
%access;
|
||||||
|
%dimension;
|
||||||
|
%synthetic;
|
||||||
|
%static;
|
||||||
|
%final;
|
||||||
|
%transient;
|
||||||
|
%volatile;>
|
||||||
|
|
||||||
|
<!ELEMENT constructor (doc?, parameter*, throws*)>
|
||||||
|
<!ATTLIST constructor
|
||||||
|
%name;
|
||||||
|
%access;
|
||||||
|
%synthetic;>
|
||||||
|
|
||||||
|
<!ELEMENT method (doc?, returns, parameter*, throws*)>
|
||||||
|
<!ATTLIST method
|
||||||
|
%name;
|
||||||
|
%access;
|
||||||
|
%extensibility;
|
||||||
|
%native;
|
||||||
|
%synthetic;
|
||||||
|
%static;
|
||||||
|
%synchronized;>
|
||||||
|
|
||||||
|
<!ELEMENT returns (classref | interfaceref | primitive)>
|
||||||
|
<!ATTLIST returns %dimension;>
|
||||||
|
|
||||||
|
<!ELEMENT parameter (classref | interfaceref | primitive)>
|
||||||
|
<!ATTLIST parameter
|
||||||
|
%name;
|
||||||
|
%final;
|
||||||
|
%dimension;>
|
||||||
|
|
||||||
|
<!ELEMENT dimension (#PCDATA)>
|
||||||
|
|
||||||
|
<!ELEMENT doc (#PCDATA |
|
||||||
|
linktag |
|
||||||
|
authortag |
|
||||||
|
versiontag |
|
||||||
|
paramtag |
|
||||||
|
returntag |
|
||||||
|
exceptiontag |
|
||||||
|
throwstag |
|
||||||
|
seetag |
|
||||||
|
sincetag |
|
||||||
|
deprecatedtag |
|
||||||
|
serialtag |
|
||||||
|
serialfieldtag |
|
||||||
|
serialdatatag)*>
|
||||||
|
|
||||||
|
<!ELEMENT linktag (#PCDATA)>
|
||||||
|
<!ATTLIST linktag
|
||||||
|
src CDATA #REQUIRED>
|
||||||
|
|
||||||
|
<!ELEMENT authortag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT versiontag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT paramtag (#PCDATA | linktag)*>
|
||||||
|
<!ATTLIST paramtag %name;>
|
||||||
|
|
||||||
|
<!ELEMENT returntag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT exceptiontag (#PCDATA | classref | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT throwstag (#PCDATA | classref | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT seetag (#PCDATA | linktag)*>
|
||||||
|
<!ATTLIST seetag
|
||||||
|
src CDATA #REQUIRED>
|
||||||
|
|
||||||
|
<!ELEMENT sincetag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT deprecatedtag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT serialtag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!ELEMENT serialfieldtag (#PCDATA | linktag)*>
|
||||||
|
<!ATTLIST serialfieldtag
|
||||||
|
fieldname CDATA #REQUIRED
|
||||||
|
fieldtype CDATA #REQUIRED>
|
||||||
|
|
||||||
|
<!ELEMENT serialdatatag (#PCDATA | linktag)*>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
92
src/documentation/content/xdocs/dtd/specification-v11.dtd
Normal file
92
src/documentation/content/xdocs/dtd/specification-v11.dtd
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Specification DTD (Version 1.1)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software specifications for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE document PUBLIC
|
||||||
|
"-//APACHE//DTD Specification Vx.y//EN"
|
||||||
|
"specification-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
|
||||||
|
AUTHORS:
|
||||||
|
Stefano Mazzocchi <stefano@apache.org>
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation.
|
||||||
|
|
||||||
|
Permission to copy in any form is granted provided this notice is
|
||||||
|
included in all copies. Permission to redistribute is granted
|
||||||
|
provided this file is distributed untouched in all its parts and
|
||||||
|
included files.
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//DTD Documentation V1.1//EN"
|
||||||
|
"document-v11.dtd">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Extend the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!-- extend the local.xxx entities -->
|
||||||
|
<!ENTITY % local.blocks "|bl">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document Type Definition -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ELEMENT specification (header?, body, appendices?, footer?)>
|
||||||
|
<!ATTLIST specification %common.att;>
|
||||||
|
|
||||||
|
<!ELEMENT appendices (%sections;)+>
|
||||||
|
<!ATTLIST appendices %common.att;>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Bibliography List -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!-- Bibliography list -->
|
||||||
|
<!ELEMENT bl (bi)+>
|
||||||
|
<!ATTLIST bl %common.att;>
|
||||||
|
|
||||||
|
<!-- Book item -->
|
||||||
|
<!ELEMENT bi EMPTY>
|
||||||
|
<!ATTLIST bi %common.att;
|
||||||
|
%name.att;
|
||||||
|
%title.att;
|
||||||
|
%link.att;
|
||||||
|
authors CDATA #REQUIRED
|
||||||
|
date CDATA #IMPLIED>
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
96
src/documentation/content/xdocs/dtd/todo-v11.dtd
Normal file
96
src/documentation/content/xdocs/dtd/todo-v11.dtd
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 1999-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Todos DTD (Version 1.1)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software development todo lists for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE todo PUBLIC
|
||||||
|
"-//APACHE//DTD Todo Vx.y//EN"
|
||||||
|
"todo-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
It is important, expecially in open developped software projects, to keep
|
||||||
|
track of software changes that need to be done, planned features, development
|
||||||
|
assignment, etc. in order to allow better work parallelization and create
|
||||||
|
an entry point for people that want to help. This DTD wants to provide
|
||||||
|
a solid foundation to provide such information and to allow it to be
|
||||||
|
published as well as distributed in a common format.
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
- do we need anymore working contexts? (SM)
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
19991225 Added actions element for better structure (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
20020613 Include the module of ISO character entity sets (DC)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Documentation V1.1//EN"
|
||||||
|
"document-v11.mod">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common ISO Character Entity Sets -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common-charents PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
|
||||||
|
"common-charents-v10.mod">
|
||||||
|
%common-charents;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common elements -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Elements V1.0//EN"
|
||||||
|
"common-elems-v10.mod">
|
||||||
|
%common;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Todo module -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % todo PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Todo V1.1//EN"
|
||||||
|
"todo-v11.mod">
|
||||||
|
%todo;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
76
src/documentation/content/xdocs/dtd/todo-v11.mod
Normal file
76
src/documentation/content/xdocs/dtd/todo-v11.mod
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 1999-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Todos module (Version 1.0)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software development todo lists for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!ENTITY % todo PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Todo Vxy//EN"
|
||||||
|
"todo-vxy.mod">
|
||||||
|
%todo;
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
It is important, expecially in open developped software projects, to keep
|
||||||
|
track of software changes that need to be done, planned features, development
|
||||||
|
assignment, etc. in order to allow better work parallelization and create
|
||||||
|
an entry point for people that want to help. This DTD wants to provide
|
||||||
|
a solid foundation to provide such information and to allow it to be
|
||||||
|
published as well as distributed in a common format.
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
- do we need anymore working contexts? (SM)
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
19991225 Added actions element for better structure (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Common entities -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!ENTITY % priorities "showstopper|high|medium|low|wish|dream">
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Document Type Definition -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!ELEMENT todo (title?, devs?, actions+)>
|
||||||
|
<!ATTLIST todo
|
||||||
|
%common.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT actions (action+)>
|
||||||
|
<!ATTLIST actions
|
||||||
|
%common.att;
|
||||||
|
priority (%priorities;) #IMPLIED
|
||||||
|
>
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
99
src/documentation/content/xdocs/dtd/todo-v13.dtd
Normal file
99
src/documentation/content/xdocs/dtd/todo-v13.dtd
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<!--
|
||||||
|
Copyright 1999-2004 The Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<!-- ===================================================================
|
||||||
|
|
||||||
|
Apache Todos DTD (Version 1.2)
|
||||||
|
|
||||||
|
PURPOSE:
|
||||||
|
This DTD was developed to create a simple yet powerful document
|
||||||
|
type for software development todo lists for use with the Apache projects.
|
||||||
|
It is an XML-compliant DTD and it's maintained by the Apache XML
|
||||||
|
project.
|
||||||
|
|
||||||
|
TYPICAL INVOCATION:
|
||||||
|
|
||||||
|
<!DOCTYPE todo PUBLIC
|
||||||
|
"-//APACHE//DTD Todo Vx.y//EN"
|
||||||
|
"todo-vxy.dtd">
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
x := major version
|
||||||
|
y := minor version
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
It is important, expecially in open developped software projects, to keep
|
||||||
|
track of software changes that need to be done, planned features, development
|
||||||
|
assignment, etc. in order to allow better work parallelization and create
|
||||||
|
an entry point for people that want to help. This DTD wants to provide
|
||||||
|
a solid foundation to provide such information and to allow it to be
|
||||||
|
published as well as distributed in a common format.
|
||||||
|
|
||||||
|
FIXME:
|
||||||
|
- do we need anymore working contexts? (SM)
|
||||||
|
|
||||||
|
CHANGE HISTORY:
|
||||||
|
[Version 1.0]
|
||||||
|
19991129 Initial version. (SM)
|
||||||
|
19991225 Added actions element for better structure (SM)
|
||||||
|
[Version 1.1]
|
||||||
|
20011212 Used public identifiers for external entities (SM)
|
||||||
|
20020613 Include the module of ISO character entity sets (DC)
|
||||||
|
[Version 1.2]
|
||||||
|
20030424 Adopt the loosened content model from document-v12 (JT)
|
||||||
|
20040614 Stay current with latest document-v13 (class attribute)
|
||||||
|
|
||||||
|
==================================================================== -->
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Documentation DTD -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % document PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Documentation V1.3//EN"
|
||||||
|
"document-v13.mod">
|
||||||
|
%document;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common ISO Character Entity Sets -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common-charents PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
|
||||||
|
"common-charents-v10.mod">
|
||||||
|
%common-charents;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Common elements -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % common PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Common Elements V1.0//EN"
|
||||||
|
"common-elems-v10.mod">
|
||||||
|
%common;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- Include the Todo module -->
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % todo PUBLIC
|
||||||
|
"-//APACHE//ENTITIES Todo V1.1//EN"
|
||||||
|
"todo-v11.mod">
|
||||||
|
%todo;
|
||||||
|
|
||||||
|
<!-- =============================================================== -->
|
||||||
|
<!-- End of DTD -->
|
||||||
|
<!-- =============================================================== -->
|
34
src/documentation/content/xdocs/entity/ISOdia.pen
Normal file
34
src/documentation/content/xdocs/entity/ISOdia.pen
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOdia PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML">
|
||||||
|
%ISOdia;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY acute "´" ><!--=acute accent-->
|
||||||
|
<!ENTITY breve "˘" ><!--=breve-->
|
||||||
|
<!ENTITY caron "ˇ" ><!--=caron-->
|
||||||
|
<!ENTITY cedil "¸" ><!--=cedilla-->
|
||||||
|
<!ENTITY circ "^" ><!--=circumflex accent-->
|
||||||
|
<!ENTITY dblac "˝" ><!--=double acute accent-->
|
||||||
|
<!ENTITY die "¨" ><!--=dieresis-->
|
||||||
|
<!ENTITY dot "˙" ><!--=dot above-->
|
||||||
|
<!ENTITY grave "`" ><!--=grave accent-->
|
||||||
|
<!ENTITY macr "¯" ><!--=macron-->
|
||||||
|
<!ENTITY ogon "˛" ><!--=ogonek-->
|
||||||
|
<!ENTITY ring "˚" ><!--=ring-->
|
||||||
|
<!ENTITY tilde "˜" ><!--=tilde-->
|
||||||
|
<!ENTITY uml "¨" ><!--=umlaut mark-->
|
74
src/documentation/content/xdocs/entity/ISOgrk1.pen
Normal file
74
src/documentation/content/xdocs/entity/ISOgrk1.pen
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
|
||||||
|
Creator: version from ISO 8879:1986
|
||||||
|
|
||||||
|
Version: 0.21 1992-12-04
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOGRK1 PUBLIC
|
||||||
|
"ISO 9573-15:1993//ENTITIES Greek Letters//EN//XML">
|
||||||
|
%ISOGRK1;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, from HTMLlat1
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY agr "α" ><!--small alpha, Greek, U03B1 -->
|
||||||
|
<!ENTITY Agr "Α" ><!--capital Alpha, Greek, U0391 -->
|
||||||
|
<!ENTITY bgr "β" ><!--small beta, Greek, U03B2 -->
|
||||||
|
<!ENTITY Bgr "Β" ><!--capital Beta, Greek, U0392 -->
|
||||||
|
<!ENTITY ggr "γ" ><!--small gamma, Greek, U03B3 -->
|
||||||
|
<!ENTITY Ggr "Γ" ><!--capital Gamma, Greek, U0393 -->
|
||||||
|
<!ENTITY dgr "δ" ><!--small delta, Greek, U03B4 -->
|
||||||
|
<!ENTITY Dgr "Δ" ><!--capital Delta, Greek, U0394 -->
|
||||||
|
<!ENTITY egr "ε" ><!--small epsilon, Greek, U03B5 -->
|
||||||
|
<!ENTITY Egr "Ε" ><!--capital Epsilon, Greek, U0395 -->
|
||||||
|
<!ENTITY zgr "ζ" ><!--small zeta, Greek, U03B6 -->
|
||||||
|
<!ENTITY Zgr "Ζ" ><!--capital Zeta, Greek, U0396 -->
|
||||||
|
<!ENTITY eegr "η" ><!--small eta, Greek, U03B7 -->
|
||||||
|
<!ENTITY EEgr "Η" ><!--capital Eta, Greek, U0397 -->
|
||||||
|
<!ENTITY thgr "θ" ><!--small theta, Greek, U03B8 -->
|
||||||
|
<!ENTITY THgr "Θ" ><!--capital Theta, Greek, U0398 -->
|
||||||
|
<!ENTITY igr "ι" ><!--small iota, Greek, U03B9 -->
|
||||||
|
<!ENTITY Igr "Ι" ><!--capital Iota, Greek, U0399 -->
|
||||||
|
<!ENTITY kgr "κ" ><!--small kappa, Greek, U03BA -->
|
||||||
|
<!ENTITY Kgr "Κ" ><!--capital Kappa, Greek, U039A -->
|
||||||
|
<!ENTITY lgr "λ" ><!--small lambda, Greek, U03BB -->
|
||||||
|
<!ENTITY Lgr "Λ" ><!--capital Lambda, Greek, U039B -->
|
||||||
|
<!ENTITY mgr "μ" ><!--small mu, Greek, U03BC -->
|
||||||
|
<!ENTITY Mgr "Μ" ><!--capital Mu, Greek, U039C -->
|
||||||
|
<!ENTITY ngr "ν" ><!--small nu, Greek, U03BD -->
|
||||||
|
<!ENTITY Ngr "Ν" ><!--capital Nu, Greek, U039D -->
|
||||||
|
<!ENTITY xgr "ξ" ><!--small xi, Greek, U03BE -->
|
||||||
|
<!ENTITY Xgr "Ξ" ><!--capital Xi, Greek, U039E -->
|
||||||
|
<!ENTITY ogr "ο" ><!--small omicron, Greek, U03BF -->
|
||||||
|
<!ENTITY Ogr "Ο" ><!--capital Omicron, Greek, U039F -->
|
||||||
|
<!ENTITY pgr "π" ><!--small pi, Greek, U03C0 -->
|
||||||
|
<!ENTITY Pgr "Π" ><!--capital Pi, Greek, U03A0 -->
|
||||||
|
<!ENTITY rgr "ρ" ><!--small rho, Greek, U03C1 -->
|
||||||
|
<!ENTITY Rgr "Ρ" ><!--capital Rho, Greek, U03A1 -->
|
||||||
|
<!ENTITY sfgr "ς" ><!--final small sigma, Greek, U03C2 -->
|
||||||
|
<!ENTITY sgr "σ" ><!--small sigma, Greek, U03C3 -->
|
||||||
|
<!ENTITY Sgr "Σ" ><!--capital Sigma, Greek, U03A3 -->
|
||||||
|
<!ENTITY tgr "τ" ><!--small tau, Greek, U03C4 -->
|
||||||
|
<!ENTITY Tgr "Τ" ><!--capital Tau, Greek, U03A4 -->
|
||||||
|
<!ENTITY ugr "υ" ><!--small upsilon, Greek, U03C5 -->
|
||||||
|
<!ENTITY Ugr "Υ" ><!--capital Upsilon, Greek, U03A5 -->
|
||||||
|
<!ENTITY phgr "φ" ><!--small phi, Greek, U03C6 -->
|
||||||
|
<!ENTITY PHgr "Φ" ><!--capital Phi, Greek, U03A6 -->
|
||||||
|
<!ENTITY khgr "χ" ><!--small chi, Greek, U03C7 -->
|
||||||
|
<!ENTITY KHgr "Χ" ><!--capital Chi, Greek, U03A7 -->
|
||||||
|
<!ENTITY psgr "ψ" ><!--small psi, Greek, U03C8 -->
|
||||||
|
<!ENTITY PSgr "Ψ" ><!--capital Psi, Greek, U03A8 -->
|
||||||
|
<!ENTITY ohgr "ω" ><!--small omega, Greek, U03C9 -->
|
||||||
|
<!ENTITY OHgr "Ω" ><!--capital Omega, Greek, U03A9 -->
|
||||||
|
|
||||||
|
|
79
src/documentation/content/xdocs/entity/ISOlat1.pen
Normal file
79
src/documentation/content/xdocs/entity/ISOlat1.pen
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOlat1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML">
|
||||||
|
%ISOlat1;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 8859-1 or ISO 10646 as its document character
|
||||||
|
set. This includes XML documents and ISO HTML documents.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY Agrave "À" ><!-- capital A, grave accent -->
|
||||||
|
<!ENTITY Aacute "Á" ><!-- capital A, acute accent -->
|
||||||
|
<!ENTITY Acirc "Â" ><!-- capital A, circumflex accent -->
|
||||||
|
<!ENTITY Atilde "Ã" ><!-- capital A, tilde -->
|
||||||
|
<!ENTITY Auml "Ä" ><!-- capital A, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Aring "Å" ><!-- capital A, ring -->
|
||||||
|
<!ENTITY AElig "Æ" ><!-- capital AE diphthong (ligature) -->
|
||||||
|
<!ENTITY Ccedil "Ç" ><!-- capital C, cedilla -->
|
||||||
|
<!ENTITY Egrave "È" ><!-- capital E, grave accent -->
|
||||||
|
<!ENTITY Eacute "É" ><!-- capital E, acute accent -->
|
||||||
|
<!ENTITY Ecirc "Ê" ><!-- capital E, circumflex accent -->
|
||||||
|
<!ENTITY Euml "Ë" ><!-- capital E, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Igrave "Ì" ><!-- capital I, grave accent -->
|
||||||
|
<!ENTITY Iacute "Í" ><!-- capital I, acute accent -->
|
||||||
|
<!ENTITY Icirc "Î" ><!-- capital I, circumflex accent -->
|
||||||
|
<!ENTITY Iuml "Ï" ><!-- capital I, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY ETH "Ð" ><!-- capital Eth, Icelandic -->
|
||||||
|
<!ENTITY Ntilde "Ñ" ><!-- capital N, tilde -->
|
||||||
|
<!ENTITY Ograve "Ò" ><!-- capital O, grave accent -->
|
||||||
|
<!ENTITY Oacute "Ó" ><!-- capital O, acute accent -->
|
||||||
|
<!ENTITY Ocirc "Ô" ><!-- capital O, circumflex accent -->
|
||||||
|
<!ENTITY Otilde "Õ" ><!-- capital O, tilde -->
|
||||||
|
<!ENTITY Ouml "Ö" ><!-- capital O, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Oslash "Ø" ><!-- capital O, slash -->
|
||||||
|
<!ENTITY Ugrave "Ù" ><!-- capital U, grave accent -->
|
||||||
|
<!ENTITY Uacute "Ú" ><!-- capital U, acute accent -->
|
||||||
|
<!ENTITY Ucirc "Û" ><!-- capital U, circumflex accent -->
|
||||||
|
<!ENTITY Uuml "Ü" ><!-- capital U, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY Yacute "Ý" ><!-- capital Y, acute accent -->
|
||||||
|
<!ENTITY THORN "Þ" ><!-- capital THORN, Icelandic -->
|
||||||
|
<!ENTITY szlig "ß" ><!-- small sharp s, German (sz ligature) -->
|
||||||
|
<!ENTITY agrave "à" ><!-- small a, grave accent -->
|
||||||
|
<!ENTITY aacute "á" ><!-- small a, acute accent -->
|
||||||
|
<!ENTITY acirc "â" ><!-- small a, circumflex accent -->
|
||||||
|
<!ENTITY atilde "ã" ><!-- small a, tilde -->
|
||||||
|
<!ENTITY auml "ä" ><!-- small a, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY aring "å" ><!-- small a, ring -->
|
||||||
|
<!ENTITY aelig "æ" ><!-- small ae diphthong (ligature) -->
|
||||||
|
<!ENTITY ccedil "ç" ><!-- small c, cedilla -->
|
||||||
|
<!ENTITY egrave "è" ><!-- small e, grave accent -->
|
||||||
|
<!ENTITY eacute "é" ><!-- small e, acute accent -->
|
||||||
|
<!ENTITY ecirc "ê" ><!-- small e, circumflex accent -->
|
||||||
|
<!ENTITY euml "ë" ><!-- small e, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY igrave "ì" ><!-- small i, grave accent -->
|
||||||
|
<!ENTITY iacute "í" ><!-- small i, acute accent -->
|
||||||
|
<!ENTITY icirc "î" ><!-- small i, circumflex accent -->
|
||||||
|
<!ENTITY iuml "ï" ><!-- small i, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY eth "ð" ><!-- small eth, Icelandic -->
|
||||||
|
<!ENTITY ntilde "ñ" ><!-- small n, tilde -->
|
||||||
|
<!ENTITY ograve "ò" ><!-- small o, grave accent -->
|
||||||
|
<!ENTITY oacute "ó" ><!-- small o, acute accent -->
|
||||||
|
<!ENTITY ocirc "ô" ><!-- small o, circumflex accent -->
|
||||||
|
<!ENTITY otilde "õ" ><!-- small o, tilde -->
|
||||||
|
<!ENTITY ouml "ö" ><!-- small o, dieresis or umlaut mark -->
|
||||||
|
|
||||||
|
<!ENTITY oslash "ø" ><!-- small o, slash -->
|
||||||
|
<!ENTITY ugrave "ù" ><!-- small u, grave accent -->
|
||||||
|
<!ENTITY uacute "ú" ><!-- small u, acute accent -->
|
||||||
|
<!ENTITY ucirc "û" ><!-- small u, circumflex accent -->
|
||||||
|
<!ENTITY uuml "ü" ><!-- small u, dieresis or umlaut mark -->
|
||||||
|
<!ENTITY yacute "ý" ><!-- small y, acute accent -->
|
||||||
|
<!ENTITY thorn "þ" ><!-- small thorn, Icelandic -->
|
||||||
|
<!ENTITY yuml "ÿ" ><!-- small y, dieresis or umlaut mark -->
|
||||||
|
|
109
src/documentation/content/xdocs/entity/ISOnum.pen
Normal file
109
src/documentation/content/xdocs/entity/ISOnum.pen
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOnum PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML">
|
||||||
|
%ISOnum;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY half "½" ><!--=fraction one-half-->
|
||||||
|
<!ENTITY frac12 "½" ><!--=fraction one-half-->
|
||||||
|
<!ENTITY frac14 "¼" ><!--=fraction one-quarter-->
|
||||||
|
<!ENTITY frac34 "¾" ><!--=fraction three-quarters-->
|
||||||
|
<!ENTITY frac18 "⅛" >
|
||||||
|
<!-- or "±Ȃ⁄₈" --><!--=fraction one-eighth-->
|
||||||
|
<!ENTITY frac38 "⅜" >
|
||||||
|
<!-- or "³⁄₈" --><!--=fraction three-eighths-->
|
||||||
|
<!ENTITY frac58 "⅝" >
|
||||||
|
<!-- or "⁵⁄₈" --><!--=fraction five-eighths-->
|
||||||
|
<!ENTITY frac78 "⅞" >
|
||||||
|
<!-- or "⁷⁄₈" --><!--=fraction seven-eighths-->
|
||||||
|
|
||||||
|
<!ENTITY sup1 "¹" ><!--=superscript one-->
|
||||||
|
<!ENTITY sup2 "²" ><!--=superscript two-->
|
||||||
|
<!ENTITY sup3 "³" ><!--=superscript three-->
|
||||||
|
|
||||||
|
<!ENTITY plus "+" ><!--=plus sign B:-->
|
||||||
|
<!ENTITY plusmn "±" ><!--/pm B: =plus-or-minus sign-->
|
||||||
|
<!ENTITY lt "&#60;" ><!--=less-than sign R:-->
|
||||||
|
<!ENTITY equals "=" ><!--=equals sign R:-->
|
||||||
|
<!ENTITY gt ">" ><!--=greater-than sign R:-->
|
||||||
|
<!ENTITY divide "÷" ><!--/div B: =divide sign-->
|
||||||
|
<!ENTITY times "×" ><!--/times B: =multiply sign-->
|
||||||
|
|
||||||
|
<!ENTITY curren "¤" ><!--=general currency sign-->
|
||||||
|
<!ENTITY pound "£" ><!--=pound sign-->
|
||||||
|
<!ENTITY dollar "$" ><!--=dollar sign-->
|
||||||
|
<!ENTITY cent "¢" ><!--=cent sign-->
|
||||||
|
<!ENTITY yen "¥" ><!--/yen =yen sign-->
|
||||||
|
|
||||||
|
<!ENTITY num "#" ><!--=number sign-->
|
||||||
|
<!ENTITY percnt "%" ><!--=percent sign-->
|
||||||
|
<!ENTITY amp "&#38;" ><!--=ampersand-->
|
||||||
|
<!ENTITY ast "*" ><!--/ast B: =asterisk-->
|
||||||
|
<!ENTITY commat "@" ><!--=commercial at-->
|
||||||
|
<!ENTITY lsqb "[" ><!--/lbrack O: =left square bracket-->
|
||||||
|
<!ENTITY bsol "\" ><!--/backslash =reverse solidus-->
|
||||||
|
<!ENTITY rsqb "]" ><!--/rbrack C: =right square bracket-->
|
||||||
|
<!ENTITY lcub "{" ><!--/lbrace O: =left curly bracket-->
|
||||||
|
<!ENTITY horbar "―" ><!--=horizontal bar-->
|
||||||
|
<!ENTITY verbar "|" ><!--/vert =vertical bar-->
|
||||||
|
<!ENTITY rcub "}" ><!--/rbrace C: =right curly bracket-->
|
||||||
|
<!ENTITY micro "µ" ><!--=micro sign-->
|
||||||
|
<!ENTITY ohm "ࡎ" ><!--=ohm sign-->
|
||||||
|
<!ENTITY deg "°" ><!--=degree sign-->
|
||||||
|
<!ENTITY ordm "º" ><!--=ordinal indicator, masculine-->
|
||||||
|
<!ENTITY ordf "ª" ><!--=ordinal indicator, feminine-->
|
||||||
|
<!ENTITY sect "§" ><!--=section sign-->
|
||||||
|
<!ENTITY para "¶" ><!--=pilcrow (paragraph sign)-->
|
||||||
|
<!ENTITY middot "·" ><!--/centerdot B: =middle dot-->
|
||||||
|
<!ENTITY larr "←" ><!--/leftarrow /gets A: =leftward arrow-->
|
||||||
|
<!ENTITY rarr "→" ><!--/rightarrow /to A: =rightward arrow-->
|
||||||
|
<!ENTITY uarr "↑" ><!--/uparrow A: =upward arrow-->
|
||||||
|
<!ENTITY darr "↓" ><!--/downarrow A: =downward arrow-->
|
||||||
|
<!ENTITY copy "©" ><!--=copyright sign-->
|
||||||
|
<!ENTITY reg "®" ><!--/circledR =registered sign-->
|
||||||
|
<!ENTITY trade "™" ><!--=trade mark sign-->
|
||||||
|
<!ENTITY brvbar "¦" ><!--=bren (vertical) bar-->
|
||||||
|
<!ENTITY not "¬" ><!--/neg /lnot =not sign-->
|
||||||
|
<!ENTITY sung "♪" ><!--=music note (sung text sign)-->
|
||||||
|
|
||||||
|
<!ENTITY excl "!" ><!--=exclamation mark-->
|
||||||
|
<!ENTITY iexcl "¡" ><!--=inverted exclamation mark-->
|
||||||
|
<!ENTITY quot '"' ><!--=quotation mark-->
|
||||||
|
<!ENTITY apos "'" ><!--=apostrophe-->
|
||||||
|
<!ENTITY lpar "(" ><!--O: =left parenthesis-->
|
||||||
|
<!ENTITY rpar ")" ><!--C: =right parenthesis-->
|
||||||
|
<!ENTITY comma "," ><!--P: =comma-->
|
||||||
|
<!ENTITY lowbar "_" ><!--=low line-->
|
||||||
|
<!ENTITY hyphen "‐" ><!--=hyphen-->
|
||||||
|
<!ENTITY period "." ><!--=full stop, period-->
|
||||||
|
<!ENTITY sol "/" ><!--=solidus-->
|
||||||
|
<!ENTITY colon ":" ><!--/colon P:-->
|
||||||
|
<!ENTITY semi ";" ><!--=semicolon P:-->
|
||||||
|
<!ENTITY quest "?" ><!--=question mark-->
|
||||||
|
<!ENTITY iquest "¿" ><!--=inverted question mark-->
|
||||||
|
<!ENTITY laquo "‹" ><!--=angle quotation mark, left
|
||||||
|
But note that Unicode 1 & Maler & el Andaloussi give « -->
|
||||||
|
<!ENTITY raquo "›" ><!--=angle quotation mark, right
|
||||||
|
But note that Unicode 1 & Maler & el Andaloussi give » -->
|
||||||
|
<!ENTITY lsquo "‘" ><!--=single quotation mark, left-->
|
||||||
|
<!ENTITY rsquo "’" ><!--=single quotation mark, right-->
|
||||||
|
<!ENTITY ldquo "“" ><!--=double quotation mark, left-->
|
||||||
|
<!ENTITY rdquo "”" ><!--=double quotation mark, right-->
|
||||||
|
<!ENTITY nbsp " " ><!--=no break (required) space-->
|
||||||
|
<!ENTITY shy "­" ><!--=soft hyphen-->
|
||||||
|
|
||||||
|
|
110
src/documentation/content/xdocs/entity/ISOpub.pen
Normal file
110
src/documentation/content/xdocs/entity/ISOpub.pen
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOpub PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Publishing//EN//XML">
|
||||||
|
%ISOpub;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
<!ENTITY emsp " " ><!--=em space-->
|
||||||
|
<!ENTITY ensp " " ><!--=en space (1/2-em)-->
|
||||||
|
<!ENTITY emsp13 " " ><!--=1/3-em space-->
|
||||||
|
<!ENTITY emsp14 " " ><!--=1/4-em space-->
|
||||||
|
<!ENTITY numsp " " ><!--=digit space (width of a number)-->
|
||||||
|
<!ENTITY puncsp " " ><!--=punctuation space (width of comma)-->
|
||||||
|
<!ENTITY thinsp " " ><!--=thin space (1/6-em)-->
|
||||||
|
<!ENTITY hairsp " " ><!--=hair space-->
|
||||||
|
<!ENTITY mdash "—" ><!--=em dash-->
|
||||||
|
<!ENTITY ndash "–" ><!--=en dash-->
|
||||||
|
<!ENTITY dash "‐" ><!--=hyphen (true graphic)-->
|
||||||
|
<!ENTITY blank "␣" ><!--=significant blank symbol-->
|
||||||
|
<!ENTITY hellip "…" ><!--=ellipsis (horizontal)-->
|
||||||
|
<!ENTITY nldr "‥" ><!--=double baseline dot (en leader)-->
|
||||||
|
<!ENTITY frac13 "⅓" ><!--=fraction one-third-->
|
||||||
|
<!ENTITY frac23 "⅔" ><!--=fraction two-thirds-->
|
||||||
|
<!ENTITY frac15 "⅕" ><!--=fraction one-fifth-->
|
||||||
|
<!ENTITY frac25 "⅖" ><!--=fraction two-fifths-->
|
||||||
|
<!ENTITY frac35 "⅗" ><!--=fraction three-fifths-->
|
||||||
|
<!ENTITY frac45 "⅘" ><!--=fraction four-fifths-->
|
||||||
|
<!ENTITY frac16 "⅙" ><!--=fraction one-sixth-->
|
||||||
|
<!ENTITY frac56 "⅚" ><!--=fraction five-sixths-->
|
||||||
|
<!ENTITY incare "℅" ><!--=in-care-of symbol-->
|
||||||
|
<!ENTITY block "█" ><!--=full block-->
|
||||||
|
<!ENTITY uhblk "▀" ><!--=upper half block-->
|
||||||
|
<!ENTITY lhblk "▄" ><!--=lower half block-->
|
||||||
|
<!ENTITY blk14 "░" ><!--=25% shaded block-->
|
||||||
|
<!ENTITY blk12 "▒" ><!--=50% shaded block-->
|
||||||
|
<!ENTITY blk34 "▓" ><!--=75% shaded block-->
|
||||||
|
<!ENTITY marker "▮" ><!--=histogram marker-->
|
||||||
|
<!ENTITY cir "○" ><!--/circ B: =circle, open-->
|
||||||
|
<!ENTITY squ "□" ><!--=square, open-->
|
||||||
|
<!ENTITY rect "▭" ><!--=rectangle, open-->
|
||||||
|
<!ENTITY utri "▵" ><!--/triangle =up triangle, open-->
|
||||||
|
<!ENTITY dtri "▿" ><!--/triangledown =down triangle, open-->
|
||||||
|
<!ENTITY star "☆" ><!--=star, open-->
|
||||||
|
<!ENTITY bull "•" ><!--/bullet B: =round bullet, filled-->
|
||||||
|
<!ENTITY squf "▪" ><!--/blacksquare =sq bullet, filled-->
|
||||||
|
<!ENTITY utrif "▴" ><!--/blacktriangle =up tri, filled-->
|
||||||
|
<!ENTITY dtrif "▾" ><!--/blacktriangledown =dn tri, filled-->
|
||||||
|
<!ENTITY ltrif "◂" ><!--/blacktriangleleft R: =l tri, filled-->
|
||||||
|
<!ENTITY rtrif "▸" ><!--/blacktriangleright R: =r tri, filled-->
|
||||||
|
<!ENTITY clubs "♣" ><!--/clubsuit =club suit symbol-->
|
||||||
|
<!ENTITY diams "♢" ><!--/diamondsuit =diamond suit symbol-->
|
||||||
|
<!ENTITY hearts "♡" ><!--/heartsuit =heart suit symbol-->
|
||||||
|
<!ENTITY spades "♠" ><!--/spadesuit =spades suit symbol-->
|
||||||
|
<!ENTITY malt "✠" ><!--/maltese =maltese cross-->
|
||||||
|
<!ENTITY dagger "†" ><!--/dagger B: =dagger-->
|
||||||
|
<!ENTITY Dagger "‡" ><!--/ddagger B: =double dagger-->
|
||||||
|
<!ENTITY check "✓" ><!--/checkmark =tick, check mark-->
|
||||||
|
<!ENTITY cross "✗" ><!--=ballot cross-->
|
||||||
|
<!ENTITY sharp "♯" ><!--/sharp =musical sharp-->
|
||||||
|
<!ENTITY flat "♭" ><!--/flat =musical flat-->
|
||||||
|
<!ENTITY male "♂" ><!--=male symbol-->
|
||||||
|
<!ENTITY female "♀" ><!--=female symbol-->
|
||||||
|
<!ENTITY phone "⛠" ><!--=telephone symbol-->
|
||||||
|
<!ENTITY telrec "⌕" ><!--=telephone recorder symbol-->
|
||||||
|
<!ENTITY copysr "℗" ><!--=sound recording copyright sign-->
|
||||||
|
<!ENTITY caret "⁁" ><!--=caret (insertion mark)-->
|
||||||
|
<!ENTITY lsquor "‚" ><!--=rising single quote, left (low)-->
|
||||||
|
<!ENTITY ldquor "„" ><!--=rising dbl quote, left (low)-->
|
||||||
|
|
||||||
|
<!ENTITY fflig "ff" ><!--small ff ligature-->
|
||||||
|
<!ENTITY filig "fi" ><!--small fi ligature-->
|
||||||
|
<!ENTITY fjlig "fj" ><!--small fj ligature-->
|
||||||
|
<!ENTITY ffilig "ffi" ><!--small ffi ligature-->
|
||||||
|
<!ENTITY ffllig "ffl" ><!--small ffl ligature-->
|
||||||
|
<!ENTITY fllig "fl" ><!--small fl ligature-->
|
||||||
|
|
||||||
|
<!ENTITY mldr "‥" ><!--em leader-->
|
||||||
|
<!ENTITY rdquor "”" ><!--rising dbl quote, right (high)-->
|
||||||
|
<!ENTITY rsquor "’" ><!--rising single quote, right (high)-->
|
||||||
|
<!ENTITY vellip "⋮" ><!--vertical ellipsis-->
|
||||||
|
|
||||||
|
<!ENTITY hybull "⁃" ><!--rectangle, filled (hyphen bullet)-->
|
||||||
|
<!ENTITY loz "✧" ><!--/lozenge - lozenge or total mark-->
|
||||||
|
<!ENTITY lozf "✦" ><!--/blacklozenge - lozenge, filled-->
|
||||||
|
<!ENTITY ltri "◃" ><!--/triangleleft B: l triangle, open-->
|
||||||
|
<!ENTITY rtri "▹" ><!--/triangleright B: r triangle, open-->
|
||||||
|
<!ENTITY starf "★" ><!--/bigstar - star, filled-->
|
||||||
|
|
||||||
|
<!ENTITY natur "♮" ><!--/natural - music natural-->
|
||||||
|
<!ENTITY rx "℞" ><!--pharmaceutical prescription (Rx)-->
|
||||||
|
<!ENTITY sext "✶" ><!--sextile (6-pointed star)-->
|
||||||
|
|
||||||
|
<!ENTITY target "⌖" ><!--register mark or target-->
|
||||||
|
<!ENTITY dlcrop "⌍" ><!--downward left crop mark -->
|
||||||
|
<!ENTITY drcrop "⌌" ><!--downward right crop mark -->
|
||||||
|
<!ENTITY ulcrop "⌏" ><!--upward left crop mark -->
|
||||||
|
<!ENTITY urcrop "⌎" ><!--upward right crop mark -->
|
||||||
|
|
85
src/documentation/content/xdocs/entity/ISOtech.pen
Normal file
85
src/documentation/content/xdocs/entity/ISOtech.pen
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
<!-- (C) International Organization for Standardization 1986
|
||||||
|
Permission to copy in any form is granted for use with
|
||||||
|
conforming SGML systems and applications as defined in
|
||||||
|
ISO 8879, provided this notice is included in all copies.
|
||||||
|
-->
|
||||||
|
<!-- Character entity set. Typical invocation:
|
||||||
|
<!ENTITY % ISOtech PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
"ISOtech.pen">
|
||||||
|
%ISOtech;
|
||||||
|
-->
|
||||||
|
<!-- This version of the entity set can be used with any SGML document
|
||||||
|
which uses ISO 10646 as its document character set.
|
||||||
|
This includes XML documents and ISO HTML documents.
|
||||||
|
This entity set uses hexadecimal numeric character references.
|
||||||
|
|
||||||
|
Creator: Rick Jelliffe, Allette Systems
|
||||||
|
|
||||||
|
Version: 1997-07-07
|
||||||
|
-->
|
||||||
|
<!ENTITY aleph "ℵ" ><!--/aleph =aleph, Hebrew-->
|
||||||
|
<!ENTITY and "∧" ><!--/wedge /land B: =logical and-->
|
||||||
|
<!ENTITY ang90 "∟" ><!--=right (90 degree) angle-->
|
||||||
|
<!ENTITY angsph "∢" ><!--/sphericalangle =angle-spherical-->
|
||||||
|
<!ENTITY ap "≉" ><!--/approx R: =approximate-->
|
||||||
|
<!ENTITY becaus "∵" ><!--/because R: =because-->
|
||||||
|
<!ENTITY bottom "⊥" ><!--/bot B: =perpendicular-->
|
||||||
|
<!ENTITY cap "∩" ><!--/cap B: =intersection-->
|
||||||
|
<!ENTITY cong "≅" ><!--/cong R: =congruent with-->
|
||||||
|
<!ENTITY conint "∮" ><!--/oint L: =contour integral operator-->
|
||||||
|
<!ENTITY cup "∪" ><!--/cup B: =union or logical sum-->
|
||||||
|
<!ENTITY equiv "≡" ><!--/equiv R: =identical with-->
|
||||||
|
<!ENTITY exist "∃" ><!--/exists =at least one exists-->
|
||||||
|
<!ENTITY forall "∀" ><!--/forall =for all-->
|
||||||
|
<!ENTITY fnof "ƒ" ><!--=function of (italic small f)-->
|
||||||
|
<!ENTITY ge "≥" ><!--/geq /ge R: =greater-than-or-equal-->
|
||||||
|
<!ENTITY iff "⇔" ><!--/iff =if and only if-->
|
||||||
|
<!ENTITY infin "∞" ><!--/infty =infinity-->
|
||||||
|
<!ENTITY int "∫" ><!--/int L: =integral operator-->
|
||||||
|
<!ENTITY isin "∈" ><!--/in R: =set membership-->
|
||||||
|
<!ENTITY lang "〈" ><!--/langle O: =left angle bracket-->
|
||||||
|
<!ENTITY lArr "⇐" ><!--/Leftarrow A: =is implied by-->
|
||||||
|
<!ENTITY le "≤" ><!--/leq /le R: =less-than-or-equal-->
|
||||||
|
<!ENTITY minus "-" ><!--B: =minus sign-->
|
||||||
|
<!ENTITY mnplus "∓" ><!--/mp B: =minus-or-plus sign-->
|
||||||
|
<!ENTITY nabla "∇" ><!--/nabla =del, Hamilton operator-->
|
||||||
|
<!ENTITY ne "≠" ><!--/ne /neq R: =not equal-->
|
||||||
|
<!ENTITY ni "∋" ><!--/ni /owns R: =contains-->
|
||||||
|
<!ENTITY or "∨" ><!--/vee /lor B: =logical or-->
|
||||||
|
<!ENTITY par "∥" ><!--/parallel R: =parallel-->
|
||||||
|
<!ENTITY part "∂" ><!--/partial =partial differential-->
|
||||||
|
<!ENTITY permil "‰" ><!--=per thousand-->
|
||||||
|
<!ENTITY perp "⊥" ><!--/perp R: =perpendicular-->
|
||||||
|
<!ENTITY prime "′" ><!--/prime =prime or minute-->
|
||||||
|
<!ENTITY Prime "″" ><!--=double prime or second-->
|
||||||
|
<!ENTITY prop "∝" ><!--/propto R: =is proportional to-->
|
||||||
|
<!ENTITY radic "√" ><!--/surd =radical-->
|
||||||
|
<!ENTITY rang "〉" ><!--/rangle C: =right angle bracket-->
|
||||||
|
<!ENTITY rArr "⇒" ><!--/Rightarrow A: =implies-->
|
||||||
|
<!ENTITY sim "∼" ><!--/sim R: =similar-->
|
||||||
|
<!ENTITY sime "≃" ><!--/simeq R: =similar, equals-->
|
||||||
|
<!ENTITY square "□" ><!--/square B: =square-->
|
||||||
|
<!ENTITY sub "⊂" ><!--/subset R: =subset or is implied by-->
|
||||||
|
<!ENTITY sube "⊆" ><!--/subseteq R: =subset, equals-->
|
||||||
|
<!ENTITY sup "⊃" ><!--/supset R: =superset or implies-->
|
||||||
|
<!ENTITY supe "⊇" ><!--/supseteq R: =superset, equals-->
|
||||||
|
<!ENTITY there4 "∴" ><!--/therefore R: =therefore-->
|
||||||
|
<!ENTITY Verbar "‖" ><!--/Vert =dbl vertical bar-->
|
||||||
|
|
||||||
|
<!ENTITY angst "Å" ><!--Angstrom =capital A, ring-->
|
||||||
|
<!ENTITY bernou "ℬ" ><!--Bernoulli function (script capital B)-->
|
||||||
|
<!ENTITY compfn "∘" ><!--B: composite function (small circle)-->
|
||||||
|
<!ENTITY Dot "¨" ><!--=dieresis or umlaut mark-->
|
||||||
|
<!ENTITY DotDot "⃜" ><!--four dots above-->
|
||||||
|
<!ENTITY hamilt "ℋ" ><!--Hamiltonian (script capital H)-->
|
||||||
|
<!ENTITY lagran "ℒ" ><!--Lagrangian (script capital L)-->
|
||||||
|
<!ENTITY lowast "∗" ><!--low asterisk-->
|
||||||
|
<!ENTITY notin "∉" ><!--N: negated set membership-->
|
||||||
|
<!ENTITY order "ℴ" ><!--order of (script small o)-->
|
||||||
|
<!ENTITY phmmat "ℳ" ><!--physics M-matrix (script capital M)-->
|
||||||
|
<!ENTITY tdot "⃛" ><!--three dots above-->
|
||||||
|
<!ENTITY tprime "‴" ><!--triple prime-->
|
||||||
|
<!ENTITY wedgeq "≙" ><!--R: corresponds to (wedge, equals)-->
|
||||||
|
|
334
src/documentation/content/xdocs/faq.xml
Normal file
334
src/documentation/content/xdocs/faq.xml
Normal file
@ -0,0 +1,334 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V1.1//EN" "./dtd/faq-v11.dtd">
|
||||||
|
|
||||||
|
<faqs title="Frequently Asked Questions">
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
My code uses some new HSSF feature, compiles fine but fails when live with a "MethodNotFoundException"
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>You almost certainly have an older version of POI earlier
|
||||||
|
on your classpath. Quite a few runtimes and other packages
|
||||||
|
will ship an older version of POI, so this is an easy problem
|
||||||
|
to hit without realising.</p>
|
||||||
|
<p>The best way to identify the offending earlier jar file is
|
||||||
|
with a few lines of java. These will load one of the core POI
|
||||||
|
classes, and report where it came from.</p>
|
||||||
|
<source>
|
||||||
|
ClassLoader classloader = org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
|
||||||
|
URL res = classloader.getResource("org/apache/poi/poifs/filesystem/POIFSFileSystem.class">
|
||||||
|
String path = res.getPath();
|
||||||
|
System.out.println("Core POI came from " + path);
|
||||||
|
</source>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
My code uses the scratchpad, compiles fine but fails to run with a "MethodNotFoundException"
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>You almost certainly have an older version earlier on your
|
||||||
|
classpath. See the answer to the similar question above for
|
||||||
|
how to track this down.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
Why is reading a simple sheet taking so long?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>You've probably enabled logging. Logging is intended only for
|
||||||
|
autopsie style debugging. Having it enabled will reduce performance
|
||||||
|
by a factor of at least 100. Logging is helpful for understanding
|
||||||
|
why POI can't read some file or developing POI itself. Important
|
||||||
|
errors are thrown as exceptions, which means you probably don't need
|
||||||
|
logging.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
What is the HSSF "eventmodel"?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>The HSSF eventmodel package is a new API for reading XLS files more efficiently. It does
|
||||||
|
require more knowledge on the part of the user, but reduces memory consumption by more than
|
||||||
|
tenfold. It is based on the AWT event model in combination with SAX. If you need read-only
|
||||||
|
access to a given XLS file, this is the best way to do it.</p>
|
||||||
|
</answer>
|
||||||
|
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
Why can't read the document I created using Star Office 5.1?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>Star Office 5.1 writes some records using the older BIFF standard. This causes some problems
|
||||||
|
with POI which supports only BIFF8.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
Why am I getting an exception each time I attempt to read my spreadsheet?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>It's possible your spreadsheet contains a feature that is not currently supported by HSSF.
|
||||||
|
For example - spreadsheets containing cells with rich text are not currently supported.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
Does HSSF support protected spreadsheets?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>Protecting a spreadsheet encrypts it. We wont touch encryption because we're not legally educated
|
||||||
|
and don't understand the full implications of trying to implement this. If you wish to have a go
|
||||||
|
at this feel free to add it as a plugin module. We wont be hosting it here however.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
How do you tell if a field contains a date with HSSF?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>Excel stores dates as numbers therefore the only way to determine if a cell is
|
||||||
|
actually stored as a date is to look at the formatting. There is a helper method
|
||||||
|
in HSSFDateUtil (since the 1.7.0-dev release) that checks for this.
|
||||||
|
Thanks to Jason Hoffman for providing the solution.</p>
|
||||||
|
<source>
|
||||||
|
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||||
|
double d = cell.getNumericCellValue();
|
||||||
|
// test if a date!
|
||||||
|
if (HSSFDateUtil.isCellDateFormatted(cell)) {
|
||||||
|
// format in form of M/D/YY
|
||||||
|
cal.setTime(HSSFDateUtil.getJavaDate(d));
|
||||||
|
cellText =
|
||||||
|
(String.valueOf(cal.get(Calendar.YEAR))).substring(2);
|
||||||
|
cellText = cal.get(Calendar.MONTH)+1 + "/" +
|
||||||
|
cal.get(Calendar.DAY_OF_MONTH) + "/" +
|
||||||
|
cellText;
|
||||||
|
} </source>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
I'm trying to stream an XLS file from a servlet and I'm having some trouble. What's the problem?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>
|
||||||
|
The problem usually manifests itself as the junk characters being shown on
|
||||||
|
screen. The problem persists even though you have set the correct mime type.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The short answer is, don't depend on IE to display a binary file type properly if you stream it via a
|
||||||
|
servlet. Every minor version of IE has different bugs on this issue.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The problem in most versions of IE is that it does not use the mime type on
|
||||||
|
the HTTP response to determine the file type; rather it uses the file extension
|
||||||
|
on the request. Thus you might want to add a
|
||||||
|
<strong>.xls</strong> to your request
|
||||||
|
string. For example
|
||||||
|
<em>http://yourserver.com/myServelet.xls?param1=xx</em>. This is
|
||||||
|
easily accomplished through URL mapping in any servlet container. Sometimes
|
||||||
|
a request like
|
||||||
|
<em>http://yourserver.com/myServelet?param1=xx&dummy=file.xls</em> is also
|
||||||
|
known to work.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
To guarantee opening the file properly in Excel from IE, write out your file to a
|
||||||
|
temporary file under your web root from your servelet. Then send an http response
|
||||||
|
to the browser to do a client side redirection to your temp file. (Note that using a
|
||||||
|
server side redirect using RequestDispatcher will not be effective in this case)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Note also that when you request a document that is opened with an
|
||||||
|
external handler, IE sometimes makes two requests to the webserver. So if your
|
||||||
|
generating process is heavy, it makes sense to write out to a temporary file, so that multiple
|
||||||
|
requests happen for a static file.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
None of this is particular to Excel. The same problem arises when you try to
|
||||||
|
generate any binary file dynamically to an IE client. For example, if you generate
|
||||||
|
pdf files using
|
||||||
|
<link href="http://xml.apache.org/fop">FOP</link>, you will come across many of the same issues.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<!-- Thanks to Avik for the answer -->
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
I want to set a cell format (Data format of a cell) of a excel sheet as ###,###,###.#### or ###,###,###.0000. Is it possible using POI ?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>
|
||||||
|
Yes. You first need to get a HSSFDataFormat object from the workbook and call getFormat with the desired format. Some examples are <link href="hssf/quick-guide.html#DataFormats">here</link>.
|
||||||
|
</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
I want to set a cell format (Data format of a cell) of a excel sheet as text. Is it possible using POI ?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>
|
||||||
|
Yes. This is a built-in format for excel that you can get from HSSFDataFormat object using the format string "@". Also, the string "text" will alias this format.
|
||||||
|
</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
How do I add a border around a merged cell?
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>Add blank cells around where the cells normally would have been and set the borders individually for each cell.
|
||||||
|
We will probably enhance HSSF in the future to make this process easier.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
I tried to set cell values and Excel sheet name on my native language,
|
||||||
|
but I failed to do it. :(
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>By default HSSF uses cell values and sheet names as compressed unicode,
|
||||||
|
so to support localization you should use Unicode.
|
||||||
|
To do it you should set it manually:</p>
|
||||||
|
<source>
|
||||||
|
// for sheet name
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
HSSFSheet s = wb.createSheet();
|
||||||
|
wb.setSheetName( 0, "SomeUnicodeName", HSSFWorkbook.ENCODING_UTF_16 );
|
||||||
|
|
||||||
|
// for cell value
|
||||||
|
HSSFRow r = s.createRow( 0 );
|
||||||
|
HSSFCell c = r.createCell( (short)0 );
|
||||||
|
c.setCellType( HSSFCell.CELL_TYPE_STRING );
|
||||||
|
c.setEncoding( HSSFCell.ENCODING_UTF_16 );
|
||||||
|
c.setCellValue( "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F" ); </source>
|
||||||
|
<p>
|
||||||
|
Make sure you make the call to setEncoding() before calling setCellValue(), otherwise what you pass in won't be interpreted properly.
|
||||||
|
</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
I'm having trouble creating a spreadsheet using POI using
|
||||||
|
websphere 3.5.
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>Make sure you have fix pack 4 installed.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
I am using styles when creating a workbook in POI, but Excel refuses to open the file, complaining about "Too Many Styles".
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>You just create the styles OUTSIDE of the loop in which you create cells.</p>
|
||||||
|
<p>GOOD:</p>
|
||||||
|
<source>
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||||
|
HSSFRow row = null;
|
||||||
|
|
||||||
|
// Aqua background
|
||||||
|
HSSFCellStyle style = wb.createCellStyle();
|
||||||
|
style.setFillBackgroundColor(HSSFColor.AQUA.index);
|
||||||
|
style.setFillPattern(HSSFCellStyle.BIG_SPOTS);
|
||||||
|
HSSFCell cell = row.createCell((short) 1);
|
||||||
|
cell.setCellValue("X");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
// Orange "foreground", foreground being the fill foreground not the font color.
|
||||||
|
style = wb.createCellStyle();
|
||||||
|
style.setFillForegroundColor(HSSFColor.ORANGE.index);
|
||||||
|
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
|
||||||
|
|
||||||
|
for (int x = 0; x < 1000; x++) {
|
||||||
|
|
||||||
|
// Create a row and put some cells in it. Rows are 0 based.
|
||||||
|
row = sheet.createRow((short) k);
|
||||||
|
|
||||||
|
for (int y = 0; y < 100; y++) {
|
||||||
|
cell = row.createCell((short) k);
|
||||||
|
cell.setCellValue("X");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the output to a file
|
||||||
|
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||||
|
wb.write(fileOut);
|
||||||
|
fileOut.close(); </source>
|
||||||
|
|
||||||
|
<p>BAD:</p>
|
||||||
|
<source>
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
HSSFSheet sheet = wb.createSheet("new sheet");
|
||||||
|
HSSFRow row = null;
|
||||||
|
|
||||||
|
for (int x = 0; x < 1000; x++) {
|
||||||
|
// Aqua background
|
||||||
|
HSSFCellStyle style = wb.createCellStyle();
|
||||||
|
style.setFillBackgroundColor(HSSFColor.AQUA.index);
|
||||||
|
style.setFillPattern(HSSFCellStyle.BIG_SPOTS);
|
||||||
|
HSSFCell cell = row.createCell((short) 1);
|
||||||
|
cell.setCellValue("X");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
|
||||||
|
// Orange "foreground", foreground being the fill foreground not the font color.
|
||||||
|
style = wb.createCellStyle();
|
||||||
|
style.setFillForegroundColor(HSSFColor.ORANGE.index);
|
||||||
|
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
|
||||||
|
|
||||||
|
// Create a row and put some cells in it. Rows are 0 based.
|
||||||
|
row = sheet.createRow((short) k);
|
||||||
|
|
||||||
|
for (int y = 0; y < 100; y++) {
|
||||||
|
cell = row.createCell((short) k);
|
||||||
|
cell.setCellValue("X");
|
||||||
|
cell.setCellStyle(style);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the output to a file
|
||||||
|
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
|
||||||
|
wb.write(fileOut);
|
||||||
|
fileOut.close(); </source>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
<faq>
|
||||||
|
<question>
|
||||||
|
Will POI read any spreadsheet and rewrite it with modifications.
|
||||||
|
</question>
|
||||||
|
<answer>
|
||||||
|
<p>POI is not guanteed to read the contents of any spreadsheet.
|
||||||
|
Certain features may cause spreadsheets to fail to read. More
|
||||||
|
problematic is rewriting spreadsheets. POI tried hard to
|
||||||
|
preserve the records of the original spreadsheet but some
|
||||||
|
features may cause problems. We advise that you limit the
|
||||||
|
formatting of spreadsheets you process so as to not be
|
||||||
|
unpleasantly suprised at a later stage.</p>
|
||||||
|
</answer>
|
||||||
|
</faq>
|
||||||
|
</faqs>
|
38
src/documentation/content/xdocs/getinvolved/book.xml
Normal file
38
src/documentation/content/xdocs/getinvolved/book.xml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "./dtd/book-cocoon-v10.dtd">
|
||||||
|
|
||||||
|
<book software="POI"
|
||||||
|
title="POI Project Documentation"
|
||||||
|
copyright="@year@ POI Project"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
|
||||||
|
<menu label="Apache POI">
|
||||||
|
<menu-item label="Top" href="../index.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="Get Involved">
|
||||||
|
<menu-item label="Contributing" href="index.html"/>
|
||||||
|
<menu-item label="Branching" href="branching.html"/>
|
||||||
|
<menu-item label="Subversion" href="../subversion.html"/>
|
||||||
|
<menu-item label="Mail Lists" href="../mailinglists.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
</book>
|
115
src/documentation/content/xdocs/getinvolved/branching.xml
Normal file
115
src/documentation/content/xdocs/getinvolved/branching.xml
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<title>Branching</title>
|
||||||
|
<authors>
|
||||||
|
<person id="GJS" name="Glen Stampoultzis" email="user@poi.apache.org"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<section><title>Branching Conventions</title>
|
||||||
|
<p>
|
||||||
|
Branches are tagged in the following way:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>REL_1_5_BRANCH</li>
|
||||||
|
<li>REL_2_0_BRANCH</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Merge points should be tagged as follows:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>REL_1_5_BRANCH_MERGE1</li>
|
||||||
|
<li>REL_1_5_BRANCH_MERGE2</li>
|
||||||
|
<li>etc...</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Releases should be tagged as:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>REL_1_5</li>
|
||||||
|
<li>REL_1_5_1</li>
|
||||||
|
<li>REL_1_5_2</li>
|
||||||
|
<li>etc...</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section><title>Branching Advise</title>
|
||||||
|
<p>
|
||||||
|
Don't forget which branch you are currently on. This is critically
|
||||||
|
important. Committing stuff to the wrong branch causes all sorts of
|
||||||
|
headaches. Best to name your checkout after the branch you are on.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section><title>Who Manages Branching?</title>
|
||||||
|
<p>
|
||||||
|
All branching is currently managed by Glen Stampoultzis. If you wish
|
||||||
|
to create your own branch please let him know. Merging is also
|
||||||
|
handled by Glen. Just pop him a mail if you feel it's necessary to
|
||||||
|
create a branch or perform a merge.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The reason to go through a single point for branching is that it can be
|
||||||
|
an easy thing to get wrong. Having a single person managing branches
|
||||||
|
means there is less chance of getting getting our wires crossed with this
|
||||||
|
difficult area of CVS.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section><title>Currently Active Branches</title>
|
||||||
|
<p>
|
||||||
|
The following branches are currently active:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Branch
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Description
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
HEAD
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
This is the trunk and is always active. Currently it is being used to continue development
|
||||||
|
of the 2.0 release.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
REL_1_5_BRANCH
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
All bug fixes not specifically relevant to the 2.0 work should be placed in this branch.
|
||||||
|
From here they will merged back to the trunk and the merge point marked.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</document>
|
191
src/documentation/content/xdocs/getinvolved/index.xml
Normal file
191
src/documentation/content/xdocs/getinvolved/index.xml
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "./dtd/document-v11.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>Contribution to POI</title>
|
||||||
|
<authors>
|
||||||
|
<person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
|
||||||
|
<person name="Marc Johnson" email="mjohnson@apache.org"/>
|
||||||
|
<person name="Andrew C. Oliver" email="acoliver@apache.org"/>
|
||||||
|
<person name="Tetsuya Kitahata" email="tetsuya.kitahata@nifty.com"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<section><title>Introduction</title>
|
||||||
|
<section><title>Disclaimer</title>
|
||||||
|
<p>
|
||||||
|
Any information in here that might be perceived as legal information is
|
||||||
|
informational only. We're not lawyers, so consult a legal professional
|
||||||
|
if needed.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section><title>The Licensing</title>
|
||||||
|
<p>
|
||||||
|
The POI project is <link href="http://www.opensource.org">OpenSource</link>
|
||||||
|
and developed/distributed under the <link
|
||||||
|
href="http://www.apache.org/foundation/licence-FAQ.html">
|
||||||
|
Apache Software License</link>. Unlike other licenses this license allows
|
||||||
|
free open source development; however, it does not require you to release
|
||||||
|
your source or use any particular license for your source. If you wish
|
||||||
|
to contribute to POI (which you're very welcome and encouraged to do so)
|
||||||
|
then you must agree to release the rights of your source to us under this
|
||||||
|
license.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section><title>Publicly Available Information on the file formats</title>
|
||||||
|
<p>
|
||||||
|
In early 2008, Microsoft made a fairly complete set of documentation
|
||||||
|
on the binary file formats freely and publicly available. These were
|
||||||
|
released under the <link href="http://www.microsoft.com/interop/osp">Open
|
||||||
|
Specification Promise</link>, which does allow us to use them for
|
||||||
|
building open source software under the <link
|
||||||
|
href="http://www.apache.org/foundation/licence-FAQ.html">
|
||||||
|
Apache Software License</link>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can download the documentation on Excel, Word, PowerPoint and
|
||||||
|
Escher (drawing) from
|
||||||
|
<link href="http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx">http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx</link>.
|
||||||
|
Documentation on a few of the supporting technologies used in these
|
||||||
|
file formats can be downloaded from
|
||||||
|
<link href="http://www.microsoft.com/interop/docs/supportingtechnologies.mspx">http://www.microsoft.com/interop/docs/supportingtechnologies.mspx</link>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Previously, Microsoft published a book on the Excel 97 file format.
|
||||||
|
It can still be of plenty of use, and is handy dead tree form. Pick up
|
||||||
|
a copy of "Excel 97 Developer's Kit" from your favourite second hand
|
||||||
|
book store.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The newer Office Open XML (ooxml) file formats are documented as part
|
||||||
|
of the ECMA / ISO standardisation effort for the formats. This
|
||||||
|
documentation is quite large, but you can normally find the bit you
|
||||||
|
need without too much effort! This can be downloaded from
|
||||||
|
<link href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">http://www.ecma-international.org/publications/standards/Ecma-376.htm</link>,
|
||||||
|
and is also under the <link href="http://www.microsoft.com/interop/osp">OSP</link>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
It is also worth checking the documentation and code of the other
|
||||||
|
open source implementations of the file formats.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section><title>I just signed an NDA to get a spec from Microsoft and I'd like to contribute</title>
|
||||||
|
<p>
|
||||||
|
In short, stay away, stay far far away. Implementing these file formats
|
||||||
|
in POI is done strictly by using public information. Public information
|
||||||
|
includes sources from other open source projects, books that state the
|
||||||
|
purpose intended is for allowing implementation of the file format and
|
||||||
|
do not require any non-disclosure agreement and just hard work.
|
||||||
|
We are intent on keeping it
|
||||||
|
legal, by contributing patches you agree to do the same.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you've ever received information regarding the OLE 2 Compound Document
|
||||||
|
Format under any type of exclusionary agreement from Microsoft, or
|
||||||
|
(possibly illegally) received such information from a person bound by
|
||||||
|
such an agreement, you cannot participate in this project. (Sorry)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Those submitting patches that show insight into the file format may be
|
||||||
|
asked to state explicitly that they have only ever read the publicly
|
||||||
|
available file format information, and not any received under an NDA
|
||||||
|
or similar.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<section><title>I just want to get involved but don't know where to start</title>
|
||||||
|
<ul>
|
||||||
|
<li>Read the rest of the website, understand what POI is and what it does,
|
||||||
|
the project vision, etc.</li>
|
||||||
|
<li>Use POI a bit, look for gaps in the documentation and examples.</li>
|
||||||
|
<li>Join the mail lists and share your knowledge with others.</li>
|
||||||
|
<li>Get <link href="../subversion.html">Subversion</link> and check out the POI source tree</li>
|
||||||
|
<li>Documentation is always the best place to start contributing, maybe you found that if the documentation just told you how to do X then it would make more sense, modify the documentation.</li>
|
||||||
|
<li>Get used to building POI, you'll be doing it a lot, be one with the build, know its targets, etc.</li>
|
||||||
|
<li>Write Unit Tests. Great way to understand POI. Look for classes that aren't tested, or aren't tested on a public/protected method level, start there.</li>
|
||||||
|
<li>Download the file format documentation from Microsoft -
|
||||||
|
<link href="http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx">OLE2 Binary File Formats</link> or
|
||||||
|
<link href="http://www.ecma-international.org/publications/standards/Ecma-376.htm">OOXML XML File Formats</link></li>
|
||||||
|
<li>Submit patches (see below) of your contributions, modifications.</li>
|
||||||
|
<li>Fill out new features, see <link href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI">Bug database</link> for suggestions.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section><title>Submitting Patches</title>
|
||||||
|
<p>
|
||||||
|
Create patches by getting the latest sources from Subversion.
|
||||||
|
Alter or add files as appropriate. Then, from the poi directiory,
|
||||||
|
type svn diff > mypatch.patch. This will capture all of your changes
|
||||||
|
in a patch file of the appropriate format. However, svn diff won't
|
||||||
|
capture any new files you may have added. So, if you've added any
|
||||||
|
files, create an archive (tar.bz2 preferred as its the smallest) in a
|
||||||
|
path-preserving archive format, relative to your poi directory.
|
||||||
|
You'll attach both files in the next step.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Patches are submitted via the <link href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI">Bug Database</link>.
|
||||||
|
Create a new bug, set the subject to [PATCH] followed by a brief description. Explain you patch and any special instructions and submit/save it.
|
||||||
|
Next, go back to the bug, and create attachements for the patch files you
|
||||||
|
created. Be sure to describe not only the files purpose, but its format.
|
||||||
|
(Is that ZIP or a tgz or a bz2 or what?).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Make sure your patches include the @author tag on any files you've altered
|
||||||
|
or created. Make sure you've documented your changes and altered the
|
||||||
|
examples/etc to reflect them. Any new additions should have unit tests.
|
||||||
|
Lastly, ensure that you've provided approriate javadoc. (see
|
||||||
|
<link href="http://poi.apache.org/resolutions/res001.html">Coding
|
||||||
|
Standards</link>). Patches that are of low quality may be rejected or
|
||||||
|
the contributer may be asked to bring them up to spec.
|
||||||
|
</p>
|
||||||
|
<p>If you use a unix shell, you may find the following following
|
||||||
|
sequence of commands useful for building the files to attach.</p>
|
||||||
|
<source>
|
||||||
|
# Run this in the root of the checkout, i.e. the directory holding
|
||||||
|
# build.xml and poi.pom
|
||||||
|
|
||||||
|
# Build the directory to hold new files
|
||||||
|
mkdir /tmp/poi-patch/
|
||||||
|
mkdir /tmp/poi-patch/new-files/
|
||||||
|
|
||||||
|
# Get changes to existing files
|
||||||
|
svn diff > /tmp/poi-patch/diff.txt
|
||||||
|
|
||||||
|
# Capture any new files, as svn diff won't include them
|
||||||
|
# Preserve the path
|
||||||
|
svn status | grep "^\?" | awk '{printf "cp --parents %s /tmp/poi-patch/new-files/\n", $2 }' | sh -s
|
||||||
|
|
||||||
|
# tar up the new files
|
||||||
|
cd /tmp/poi-patch/new-files/
|
||||||
|
tar jcvf ../new-files.tar.bz2
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# Upload these to bugzilla
|
||||||
|
echo "Please upload to bugzilla:"
|
||||||
|
echo " /tmp/poi-patch/diff.txt"
|
||||||
|
echo " /tmp/poi-patch/new-files.tar.bz2"
|
||||||
|
</source>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</document>
|
34
src/documentation/content/xdocs/hdgf/book.xml
Normal file
34
src/documentation/content/xdocs/hdgf/book.xml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
|
||||||
|
|
||||||
|
<book software="POI Project"
|
||||||
|
title="HGDF"
|
||||||
|
copyright="@year@ POI Project">
|
||||||
|
|
||||||
|
<menu label="Apache POI">
|
||||||
|
<menu-item label="Top" href="../index.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu label="HDGF">
|
||||||
|
<menu-item label="Overview" href="index.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
</book>
|
100
src/documentation/content/xdocs/hdgf/index.xml
Executable file
100
src/documentation/content/xdocs/hdgf/index.xml
Executable file
@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>POI-HDGF - Java API To Access Microsoft Visio Format Files</title>
|
||||||
|
<subtitle>Overview</subtitle>
|
||||||
|
<authors>
|
||||||
|
<person name="Nick Burch" email="nick at apache dot org"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<section>
|
||||||
|
<title>Overview</title>
|
||||||
|
|
||||||
|
<p>HDGF is the POI Project's pure Java implementation of the Visio file format.</p>
|
||||||
|
<p>Currently, HDGF provides a low-level, read-only api for
|
||||||
|
accessing Visio documents. It also provides a
|
||||||
|
<link href="http://svn.apache.org/repos/asf/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/extractor/">way</link>
|
||||||
|
to extract the textual content from a file.
|
||||||
|
</p>
|
||||||
|
<p>At this time, there is no <em>usermodel</em> api or similar,
|
||||||
|
only low level access to the streams, chunks and chunk commands.
|
||||||
|
Users are advised to check the unit tests to see how everything
|
||||||
|
works. They are also well advised to read the documentation
|
||||||
|
supplied with
|
||||||
|
<link href="http://www.gnome.ru/projects/vsdump_en.html">vsdump</link>
|
||||||
|
to get a feel for how Visio files are structured.</p>
|
||||||
|
<p>To get a feel for the contents of a file, and to track down
|
||||||
|
where data of interest is stored, HDGF comes with
|
||||||
|
<link href="http://svn.apache.org/repos/asf/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/dev/">VSDDumper</link>
|
||||||
|
to print out the contents of the file. Users should also make
|
||||||
|
use of
|
||||||
|
<link href="http://www.gnome.ru/projects/vsdump_en.html">vsdump</link>
|
||||||
|
to probe the structure of files.</p>
|
||||||
|
<note>
|
||||||
|
This code currently lives the
|
||||||
|
<link href="http://svn.apache.org/viewcvs.cgi/poi/trunk/src/scratchpad/">scratchpad area</link>
|
||||||
|
of the POI SVN repository.
|
||||||
|
Ensure that you have the scratchpad jar or the scratchpad
|
||||||
|
build area in your
|
||||||
|
classpath before experimenting with this code.
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>Steps required for write support</title>
|
||||||
|
<p>Currently, HDGF is only able to read visio files, it is
|
||||||
|
not able to write them back out again. We believe the
|
||||||
|
following are the steps that would need to be taken to
|
||||||
|
implement it.</p>
|
||||||
|
<ol>
|
||||||
|
<li>Re-write the decompression support in LZW4HDGF as
|
||||||
|
HDGFLZW, which will be much better documented, and also
|
||||||
|
under the ASL. <strong>Completed October 2007</strong></li>
|
||||||
|
<li>Add compression support to HDGFLZW.
|
||||||
|
<strong>In progress</strong></li>
|
||||||
|
<li>Have HDGF just write back the raw bytes it read in, and
|
||||||
|
have a test to ensure the file is un-changed.</li>
|
||||||
|
<li>Have HDGF generate the bytes to write out from the
|
||||||
|
Stream stores, using the compressed data as appropriate,
|
||||||
|
without re-compressing. Plus test to ensure file is
|
||||||
|
un-changed.</li>
|
||||||
|
<li>Have HDGF generate the bytes to write out from the
|
||||||
|
Stream stores, re-compressing any streams that were
|
||||||
|
decompressed. Plus test to ensure file is un-changed.</li>
|
||||||
|
<li>Have HDGF re-generate the offsets in pointers for the
|
||||||
|
locations of the streams. Plus test to ensure file is
|
||||||
|
un-changed.</li>
|
||||||
|
<li>Have HDGF re-generate the bytes for all the chunks, from
|
||||||
|
the chunk commands. Tests to ensure the chunks are
|
||||||
|
serialized properly, and then that the file is un-changed</li>
|
||||||
|
<li>Alter the data of one command, but keep it the same
|
||||||
|
length, and check visio can open the file when written
|
||||||
|
out.</li>
|
||||||
|
<li>Alter the data of one command, to a new length, and
|
||||||
|
check that visio can open the file when written out.</li>
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
156
src/documentation/content/xdocs/historyandfuture.xml
Normal file
156
src/documentation/content/xdocs/historyandfuture.xml
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "./dtd/document-v13.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>Apache POI - Project History</title>
|
||||||
|
<authors>
|
||||||
|
<person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
<section><title>Apache POI - Brief Project History</title>
|
||||||
|
|
||||||
|
<p>The POI project was dreamed up back around April 2001, when
|
||||||
|
Andrew Oliver landed a short term contract to do Java-based
|
||||||
|
reporting to Excel. He'd done this project a few times before
|
||||||
|
and knew right where to look for the tools he needed.
|
||||||
|
Ironically, the API he used to use had skyrocketed from around
|
||||||
|
$300 ($US) to around $10K ($US). He figured it would take two
|
||||||
|
people around six months to write an Excel port so he
|
||||||
|
recommended the client fork out the $10K.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Around June 2001, Andrew started thinking how great it would
|
||||||
|
be to have an open source Java tool to do this and, while he
|
||||||
|
had some spare time, he started on the project and learned
|
||||||
|
about OLE 2 Compound Document Format. After hitting some real
|
||||||
|
stumpers he realized he'd need help. He posted a message to
|
||||||
|
his local Java User's Group (JUG) and asked if anyone else
|
||||||
|
would be interested. He lucked out and the most talented Java
|
||||||
|
programmer he'd ever met, Marc Johnson, joined the project. He
|
||||||
|
ran rings around Andrew at porting OLE 2 CDF and rewrote his
|
||||||
|
skeletal code into a more sophisticated library. It took Marc
|
||||||
|
a few iterations to get something they were happy with.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>While Marc worked on that, Andrew ported XLS to Java, based
|
||||||
|
on Marc's library. Several users wrote in asking to read XLS
|
||||||
|
(not just write as had originally been planned) and one user
|
||||||
|
had special requests for a different use for POIFS. Before
|
||||||
|
long, the project scope had tripled. POI 1.0 was released a
|
||||||
|
month later than planned, but with far more features. Marc
|
||||||
|
quickly wrote the serializer framework and HSSF Serializer in
|
||||||
|
record time and Andrew banged out more documentation and worked
|
||||||
|
on making people aware of the project
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> Shortly before the release, POI was fortunate to come into
|
||||||
|
contact with Nicola -Ken- Barrozzi who gave them samples for
|
||||||
|
the HSSF Serializer and help uncover its unfortunate bugs
|
||||||
|
(which were promptly fixed). More recently, Ken ported most
|
||||||
|
of the POI project documentation to XML from Andrew's crappy
|
||||||
|
HTML docs he wrote with Star Office.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p> Around the same time as the release, Glen Stampoultzis
|
||||||
|
joined the project. Glen was ticked off at Andrew's flippant attitude
|
||||||
|
towards adding graphing to HSSF. Glen got so ticked off he decided to
|
||||||
|
grab a hammer and do it himself. Glen has already become an integral
|
||||||
|
part of the POI development community; his contributions to HSSF have
|
||||||
|
already started making waves.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Somewhere in there we decided to finally submit the project
|
||||||
|
to <link href="http://cocoon.apache.org/">The Apache
|
||||||
|
Cocoon Project</link>, only to discover the project had
|
||||||
|
outgrown fitting nicely into just Cocoon long ago.
|
||||||
|
Furthermore, Andrew started eyeing other projects he'd like to
|
||||||
|
see POI functionality added to. So it was decided to donate
|
||||||
|
the Serializers and Generators to Cocoon, other POI
|
||||||
|
integration components to other projects, and the POI APIs
|
||||||
|
would become part of Jakarta. It was a bumpy road but it
|
||||||
|
looks like everything turned out since you're reading this!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>In Early 2007, we graduated from
|
||||||
|
<link href="http://jakarta.apache.org/">Jakarta</link>, and became
|
||||||
|
our own Top Level Project (TLP) within Apache.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<section><title>What's next for Poi</title>
|
||||||
|
<p>First we'll tackle this from a project standpoint: Well, we
|
||||||
|
made an offer to Microsoft and Actuate (tongue in cheek
|
||||||
|
... well mostly) that we'd quit the project and retire if
|
||||||
|
they'd simply write us each a really large check. I've yet to
|
||||||
|
get a phone call or email so I'm assuming they're not going to
|
||||||
|
pay us to go away.
|
||||||
|
</p>
|
||||||
|
<p>Next, we've got some work to do here at Jakarta to finish
|
||||||
|
integrating POI into the community. Furthermore, we're
|
||||||
|
still transitioning the Serializer to Cocoon.
|
||||||
|
</p>
|
||||||
|
<p>HSSF, during the 2.0 cycle, will undergo a few
|
||||||
|
optimizations. We'll also be adding new features like a full
|
||||||
|
implementation of Formulas and custom text formats. We're
|
||||||
|
hoping to be able to generate smaller files by adding
|
||||||
|
write-support for RK, MulRK and MulBlank records. I'm also
|
||||||
|
going to work on a Cocoon 2 Generator. Currently, reading is
|
||||||
|
not very efficient in HSSF. This is mainly because in order to
|
||||||
|
write or modify, one needs to be able to update upstream
|
||||||
|
pointers to downstream data. To do this you have to have
|
||||||
|
everything between in memory. A Generator would allow SAX
|
||||||
|
events to be processed instead. (This will be based on the low
|
||||||
|
level structures). One of the great things about this is that,
|
||||||
|
you'll not only have a more efficient way to read the file,
|
||||||
|
you'll have a great way to use spreadsheets as XML data
|
||||||
|
sources.
|
||||||
|
</p>
|
||||||
|
<p>The HSSF Serializer, will further separate into a general
|
||||||
|
framework for creating serializers for other formats and the
|
||||||
|
HSSF Serializer specific implementation. (This is largely
|
||||||
|
already true). We'll also be adding support for features
|
||||||
|
already supported by HSSF (styles, fonts, text formats). We're
|
||||||
|
hoping to add support for formulas during this cycle.
|
||||||
|
</p>
|
||||||
|
<p>We're beginning to expand our scope yet again. If we could
|
||||||
|
do all of this for XLS files, what about Doc files or PowerPoint
|
||||||
|
files? We're thinking that our next component (HWPF - Manipulates
|
||||||
|
Word Processor Format) should follow the same pattern. We're hoping
|
||||||
|
that new blood will join the team and allow us to tackle this
|
||||||
|
even faster (in part because POIFS is already finished). But
|
||||||
|
maybe what we need most is you! </p>
|
||||||
|
</section> -->
|
||||||
|
|
||||||
|
</body>
|
||||||
|
<footer>
|
||||||
|
<legal>
|
||||||
|
Copyright (c) @year@ The Apache Software Foundation All rights reserved.
|
||||||
|
$Revision$ $Date$
|
||||||
|
</legal>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
|
||||||
|
</document>
|
169
src/documentation/content/xdocs/howtobuild.xml
Normal file
169
src/documentation/content/xdocs/howtobuild.xml
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "./dtd/document-v13.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>How To Build POI</title>
|
||||||
|
<authors>
|
||||||
|
<person email="user@poi.apache.org" name="Glen Stampoultzis" id="GS"/>
|
||||||
|
<person email="tetsuya@apache.org" name="Tetsuya Kitahata" id="TK"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
<body>
|
||||||
|
<section>
|
||||||
|
<title>Installing Ant</title>
|
||||||
|
<p>
|
||||||
|
The POI build system requires two components to perform a
|
||||||
|
build.
|
||||||
|
<link href="ext:ant.apache.org/">Ant</link> and
|
||||||
|
<link href="ext:xml.apache.org/forrest">forrest</link>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Specifically the build has been tested to work with Ant version
|
||||||
|
1.5.3 and Forrest 0.4. To install these products download
|
||||||
|
the distributions and follow the instructions in their
|
||||||
|
documentation. Make sure you don't forget to set the
|
||||||
|
environment variables FORREST_HOME and ANT_HOME. The
|
||||||
|
ANT_HOME/bin directory should be in the path.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
One these products are installed you will also need to
|
||||||
|
download some extra jar files required by the build.
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Library</th>
|
||||||
|
<th>Location</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>junit</td>
|
||||||
|
<td>http://www.ibiblio.org/maven/junit/jars/</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>xerces</td>
|
||||||
|
<td>http://www.ibiblio.org/maven/xerces/jars/</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>jdepend</td>
|
||||||
|
<td>http://www.ibiblio.org/maven/jdepend/jars/</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>xalan</td>
|
||||||
|
<td>http://www.ibiblio.org/maven/xalan/jars/</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Just pick the latest versions of these jars and place
|
||||||
|
them in ANT_HOME/lib and make sure that optional.jar is
|
||||||
|
in ANT_HOME/lib .
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<title>Running the Build</title>
|
||||||
|
<p>
|
||||||
|
On the first run the ant build system will download all
|
||||||
|
the jars required by the project to build ant. If you're
|
||||||
|
behind a firewall this may cause some problems. Should you
|
||||||
|
need to it's possible to manually put the jars in the
|
||||||
|
correct directories. These can be obtained from here:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>JAR</th>
|
||||||
|
<th>Location</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>/commons-logging/jars/commons-logging-1.0.1.jar</td>
|
||||||
|
<td>lib</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>/log4j/jars/log4j-1.2.8.jar</td>
|
||||||
|
<td>lib</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>/commons-beanutils/jars/commons-beanutils-1.6.jar</td>
|
||||||
|
<td>src/contrib/lib</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>/commons-collections/jars/commons-collections-2.1.jar</td>
|
||||||
|
<td>src/contrib/lib</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>/commons-lang/jars/commons-lang-1.0-b1.jar</td>
|
||||||
|
<td>src/contrib/lib</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>/junit/jars/junit-3.8.1.jar</td>
|
||||||
|
<td>lib</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
The main targets of interest to our users are:
|
||||||
|
</p>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Target</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>clean</td>
|
||||||
|
<td>Erase all build work products (ie, everything in the
|
||||||
|
build directory</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>compile</td>
|
||||||
|
<td>Compiles all files from main, contrib and scratchpad</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>test</td>
|
||||||
|
<td>Run all unit tests from main, contrib and scratchpad</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>docs</td>
|
||||||
|
<td>Generate all documentation for the system</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>generate-records</td>
|
||||||
|
<td>Generate records from the XML record defintitions</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>generate-types</td>
|
||||||
|
<td>Generate types from the XML type definitions (this is
|
||||||
|
for HWPF).</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>jar</td>
|
||||||
|
<td>Produce jar files</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>dist</td>
|
||||||
|
<td>Create a distribution.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>clean-dist</td>
|
||||||
|
<td>Runs clean before creating the distribution.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
||||||
|
|
||||||
|
|
197
src/documentation/content/xdocs/hpbf/file-format.xml
Normal file
197
src/documentation/content/xdocs/hpbf/file-format.xml
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>POI-HPBF - A Guide to the Publisher File Format</title>
|
||||||
|
<subtitle>Overview</subtitle>
|
||||||
|
<authors>
|
||||||
|
<person name="Nick Burch" email="nick at torchbox dot com"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<section><title>Document Streams</title>
|
||||||
|
<p>
|
||||||
|
The file is made up of a number of POIFS streams. A typical
|
||||||
|
file will be made up as follows:
|
||||||
|
</p>
|
||||||
|
<source>
|
||||||
|
Root Entry -
|
||||||
|
Objects -
|
||||||
|
(no children)
|
||||||
|
SummaryInformation <(0x05)SummaryInformation>
|
||||||
|
DocumentSummaryInformation <(0x05)DocumentSummaryInformation>
|
||||||
|
Escher -
|
||||||
|
EscherStm
|
||||||
|
EscherDelayStm
|
||||||
|
Quill -
|
||||||
|
QuillSub -
|
||||||
|
CONTENTS
|
||||||
|
CompObj <(0x01)CompObj>
|
||||||
|
Envelope
|
||||||
|
Contents
|
||||||
|
Internal <(0x03)Internal>
|
||||||
|
CompObj <(0x01)CompObj>
|
||||||
|
VBA -
|
||||||
|
(no children)
|
||||||
|
</source>
|
||||||
|
</section>
|
||||||
|
<section><title>Changing Text</title>
|
||||||
|
<p>If you make a change to the text of a file, but not change
|
||||||
|
how much text there is, then the <em>CONTENTS</em> stream
|
||||||
|
will undergo a small change, and the <em>Contents</em> stream
|
||||||
|
will undergo a large change.</p>
|
||||||
|
<p>If you make a change to the text of a file, and change the
|
||||||
|
amount of text there is, then both the <em>Contents</em> and
|
||||||
|
the <em>CONTENTS</em> streams change.</p>
|
||||||
|
</section>
|
||||||
|
<section><title>Changing Shapes</title>
|
||||||
|
<p>If you alter the size of a textbox, but make no text changes,
|
||||||
|
then both <em>Contents</em> and <em>CONTENTS</em> streams
|
||||||
|
change. There are no changes to the Escher streams.</p>
|
||||||
|
<p>If you set the background colour of a textbox, but make
|
||||||
|
no changes to the text, (to finish off)</p>
|
||||||
|
</section>
|
||||||
|
<section><title>Structure of CONTENTS</title>
|
||||||
|
<p>First we have "CHNKINK ", followed by 24 bytes.</p>
|
||||||
|
<p>Next we have 20 sequences of 24 bytes each. If the first two bytes
|
||||||
|
at 0x1800, then that sequence entry exists, but if it's 0x0000 then
|
||||||
|
the entry doesn't exist. If it does exist, we then have 4 bytes of
|
||||||
|
upper case ASCII text, followed by three little endian shorts.
|
||||||
|
The first of these seems to be the count of that type, the second is
|
||||||
|
usually 1, the third is usually zero. The we have another 4 bytes of
|
||||||
|
upper case ASCII text, normally but not always the same as the first
|
||||||
|
text. Finally, we have an unsigned little endian 32 bit offset to
|
||||||
|
the start of the data for this, then an unsigned little endian
|
||||||
|
32 bit offset of the length of this section.</p>
|
||||||
|
<p>Normally, the first sequence entry is for TEXT, and the text data
|
||||||
|
will start at 0x200. After that is normally two or three STSH entries
|
||||||
|
(so the first short has values 0, then 1, then 2). After that it
|
||||||
|
seems to vary.</p>
|
||||||
|
<p>At 0x200 we have the text, stored as little endian 16 bit unicode.</p>
|
||||||
|
<p>After the text comes all sorts of other stuff, presumably as
|
||||||
|
described by the sequences.</p>
|
||||||
|
<p>For a contents stream of length 7168 / 0x1c00 bytes, the start
|
||||||
|
looks something like:</p>
|
||||||
|
<source>
|
||||||
|
CHNKINK // "CHNKINK "
|
||||||
|
04 00 07 00 // Normally 04 00 07 00
|
||||||
|
13 00 00 03 // Normally ## 00 00 03
|
||||||
|
00 02 00 00 // Normally 00 ## 00 00
|
||||||
|
00 1c 00 00 // Normally length of the stream
|
||||||
|
f8 01 13 00 // Normally f8 01 11/13 00
|
||||||
|
ff ff ff ff // Normally seems to be ffffffff
|
||||||
|
|
||||||
|
18 00
|
||||||
|
TEXT 00 00 01 00 00 00 // TEXT 0 1 0
|
||||||
|
TEXT 00 02 00 00 d0 03 00 00 // TEXT from: 200 (512), len: 3d0 (976)
|
||||||
|
18 00
|
||||||
|
STSH 00 00 01 00 00 00 // STSH 0 1 0
|
||||||
|
STSH d0 05 00 00 1e 00 00 00 // STSH from: 5d0 (1488), len: 1e (30)
|
||||||
|
18 00
|
||||||
|
STSH 01 00 01 00 00 00 // STSH 1 1 0
|
||||||
|
STSH ee 05 00 00 b8 01 00 00 // STSH from: 5ee (1518), len: 1b8 (440)
|
||||||
|
18 00
|
||||||
|
STSH 02 00 01 00 00 00 // STSH 2 1 0
|
||||||
|
STSH a6 07 00 00 3c 00 00 00 // STSH from: 7a6 (1958), len: 3c (60)
|
||||||
|
18 00
|
||||||
|
FDPP 00 00 01 00 00 00 // FDPP 0 1 0
|
||||||
|
FDPP 00 08 00 00 00 02 00 00 // FDPP from: 800 (2048), len: 200 (512)
|
||||||
|
18 00
|
||||||
|
FDPC 00 00 01 00 00 00 // FDPC 0 1 0
|
||||||
|
FDPC 00 0a 00 00 00 02 00 00 // FDPC from: a00 (2560), len: 200 (512)
|
||||||
|
18 00
|
||||||
|
FDPC 01 00 01 00 00 00 // FDPC 1 1 0
|
||||||
|
FDPC 00 0c 00 00 00 02 00 00 // FDPC from: c00 (3072), len: 200 (512)
|
||||||
|
18 00
|
||||||
|
SYID 00 00 01 00 00 00 // SYID 0 1 0
|
||||||
|
SYID 00 0e 00 00 20 00 00 00 // SYID from: e00 (3584), len: 20 (32)
|
||||||
|
18 00
|
||||||
|
SGP 00 00 01 00 00 00 // SGP 0 1 0
|
||||||
|
SGP 20 0e 00 00 0a 00 00 00 // SGP from: e20 (3616), len: a (10)
|
||||||
|
18 00
|
||||||
|
INK 00 00 01 00 00 00 // INK 0 1 0
|
||||||
|
INK 2a 0e 00 00 04 00 00 00 // INK from: e2a (3626), len: 4 (4)
|
||||||
|
18 00
|
||||||
|
BTEP 00 00 01 00 00 00 // BTEP 0 1 0
|
||||||
|
PLC 2e 0e 00 00 18 00 00 00 // PLC from: e2e (3630), len: 18 (24)
|
||||||
|
18 00
|
||||||
|
BTEC 00 00 01 00 00 00 // BTEC 0 1 0
|
||||||
|
PLC 46 0e 00 00 20 00 00 00 // PLC from: e46 (3654), len: 20 (32)
|
||||||
|
18 00
|
||||||
|
FONT 00 00 01 00 00 00 // FONT 0 1 0
|
||||||
|
FONT 66 0e 00 00 48 03 00 00 // FONT from: e66 (3686), len: 348 (840)
|
||||||
|
18 00
|
||||||
|
TCD 03 00 01 00 00 00 // TCD 3 1 0
|
||||||
|
PLC ae 11 00 00 24 00 00 00 // PLC from: 11ae (4526), len: 24 (36)
|
||||||
|
18 00
|
||||||
|
TOKN 04 00 01 00 00 00 // TOKN 4 1 0
|
||||||
|
PLC d2 11 00 00 0a 01 00 00 // PLC from: 11d2 (4562), len: 10a (266)
|
||||||
|
18 00
|
||||||
|
TOKN 05 00 01 00 00 00 // TOKN 5 1 0
|
||||||
|
PLC dc 12 00 00 2a 01 00 00 // PLC from: 12dc (4828), len: 12a (298)
|
||||||
|
18 00
|
||||||
|
STRS 00 00 01 00 00 00 // STRS 0 1 0
|
||||||
|
PLC 06 14 00 00 46 00 00 00 // PLC from: 1406 (5126), len: 46 (70)
|
||||||
|
18 00
|
||||||
|
MCLD 00 00 01 00 00 00 // MCLD 0 1 0
|
||||||
|
MCLD 4c 14 00 00 16 06 00 00 // MCLD from: 144c (5196), len: 616 (1558)
|
||||||
|
18 00
|
||||||
|
PL 00 00 01 00 00 00 // PL 0 1 0
|
||||||
|
PL 62 1a 00 00 48 00 00 00 // PL from: 1a62 (6754), len: 48 (72)
|
||||||
|
00 00 // Blank entry follows
|
||||||
|
00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00
|
||||||
|
|
||||||
|
(the text will then start)
|
||||||
|
</source>
|
||||||
|
<p>We think that the first 4 bytes of text describes the
|
||||||
|
the function of the data at the offset. The first short is
|
||||||
|
then the count of that type, eg the 2nd will have 1. We
|
||||||
|
think that the second 4 bytes of text describes the format
|
||||||
|
of data block at the offset. The format of the text block
|
||||||
|
is easy, but we're still trying to figure out the others.</p>
|
||||||
|
|
||||||
|
<section><title>Structure of TEXT bit</title>
|
||||||
|
<p>This is very simple. All the text for the document is
|
||||||
|
stored in a single bit of the Quill CONTENTS. The text
|
||||||
|
is stored as little endian 16 bit unicode strings.</p>
|
||||||
|
</section>
|
||||||
|
<section><title>Structure of PLC bit</title>
|
||||||
|
<p>The first four bytes seem to hold the count of the
|
||||||
|
entries in the bit, and the second four bytes seem to hold
|
||||||
|
the type. There is then some pre-data, and then data for
|
||||||
|
each of the entries, the exact format dependant on the type.</p>
|
||||||
|
<p>Type 0 has 4 2 byte unsigned ints, then a pair of 2 byte
|
||||||
|
unsigned ints for each entry.</p>
|
||||||
|
<p>Type 4 has 4 2 byte unsigned ints, then a pair of 4 byte
|
||||||
|
unsigned ints for each entry.</p>
|
||||||
|
<p>Type 8 has 7 2 byte unsigned ints, then a pair of 4 byte
|
||||||
|
unsigned ints for each entry.</p>
|
||||||
|
<p>Type 12 holds hyperlinks, and is very much more complex.
|
||||||
|
See <code>org.apache.poi.hpbf.model.qcbits.QCPLCBit</code>
|
||||||
|
for our best guess as to how the contents match up.</p>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
62
src/documentation/content/xdocs/hpbf/index.xml
Executable file
62
src/documentation/content/xdocs/hpbf/index.xml
Executable file
@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>POI-HPBF - Java API To Access Microsoft Publisher Format Files</title>
|
||||||
|
<subtitle>Overview</subtitle>
|
||||||
|
<authors>
|
||||||
|
<person name="Nick Burch" email="nick at apache dot org"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<section>
|
||||||
|
<title>Overview</title>
|
||||||
|
|
||||||
|
<p>HPBF is the POI Project's pure Java implementation of the Visio file format.</p>
|
||||||
|
<p>Currently, HPBF is in an early stage, whilst we try to
|
||||||
|
figure out the file format. So far, we have basic text
|
||||||
|
extraction support, and are able to read some parts within
|
||||||
|
the file. Writing is not yet supported, as we are unable
|
||||||
|
to make sense of the Contents stream, which we think has
|
||||||
|
lots of offsets to other parts of the file.</p>
|
||||||
|
<p>Our initial aim is to provude a text extractor for the format
|
||||||
|
(now done), and be able to extract hyperlinks from within
|
||||||
|
the document (partly supported). Additional low level
|
||||||
|
code to process the file format may follow, if there
|
||||||
|
is demand and developer interest warrant it.</p>
|
||||||
|
<p>At this time, there is no <em>usermodel</em> api or similar.
|
||||||
|
There is only low level support for certain parts of
|
||||||
|
the file, but by no means all of it.</p>
|
||||||
|
<p>Our current understanding of the file format is documented
|
||||||
|
<link href="file-format.html">here</link>.</p>
|
||||||
|
<note>
|
||||||
|
This code currently lives the
|
||||||
|
<link href="http://svn.apache.org/viewcvs.cgi/poi/trunk/src/scratchpad/">scratchpad area</link>
|
||||||
|
of the POI SVN repository.
|
||||||
|
Ensure that you have the scratchpad jar or the scratchpad
|
||||||
|
build area in your
|
||||||
|
classpath before experimenting with this code.
|
||||||
|
</note>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
39
src/documentation/content/xdocs/hpsf/book.xml
Normal file
39
src/documentation/content/xdocs/hpsf/book.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "../dtd/book-cocoon-v10.dtd">
|
||||||
|
<!-- $Id$ -->
|
||||||
|
<book software="POI Project"
|
||||||
|
title="HPSF"
|
||||||
|
copyright="@year@ POI Project">
|
||||||
|
|
||||||
|
<menu label="Apache POI">
|
||||||
|
<menu-item label="Top" href="../index.html"/>
|
||||||
|
</menu>
|
||||||
|
<menu label="HPSF">
|
||||||
|
<menu-item label="Overview" href="index.html"/>
|
||||||
|
<menu-item label="How To" href="how-to.html"/>
|
||||||
|
<menu-item label="Thumbnails" href="thumbnails.html"/>
|
||||||
|
<menu-item label="Internals" href="internals.html"/>
|
||||||
|
<menu-item label="To Do" href="todo.html"/>
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
</book>
|
||||||
|
|
||||||
|
|
1501
src/documentation/content/xdocs/hpsf/how-to.xml
Normal file
1501
src/documentation/content/xdocs/hpsf/how-to.xml
Normal file
File diff suppressed because it is too large
Load Diff
75
src/documentation/content/xdocs/hpsf/index.xml
Normal file
75
src/documentation/content/xdocs/hpsf/index.xml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
|
||||||
|
<!-- $Id$ -->
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>Apache POI - HPSF - Java API to Handle Microsoft Format Document
|
||||||
|
Properties</title>
|
||||||
|
<subtitle>Overview</subtitle>
|
||||||
|
<authors>
|
||||||
|
<person name="Rainer Klute" email="klute@apache.org"/>
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
<body>
|
||||||
|
<section><title>Overview</title>
|
||||||
|
|
||||||
|
<p>Microsoft applications like "Word", "Excel" or "Powerpoint" let the user
|
||||||
|
describe his document by properties like "title", "category" and so on. The
|
||||||
|
application itself adds further information: last author, creation date
|
||||||
|
etc. These document properties are stored in so-called <strong>property set
|
||||||
|
streams</strong>. A property set stream is a separate document within a
|
||||||
|
<link href="../poifs/index.html">POI filesystem</link>. We'll call property
|
||||||
|
set streams mostly just "property sets". HPSF is POI's pure-Java
|
||||||
|
implementation to read and write property sets.</p>
|
||||||
|
|
||||||
|
<p>The <link href="how-to.html">HPSF HOWTO</link> describes what a Java
|
||||||
|
application should do to read a property set using HPSF, how to retrieve
|
||||||
|
the information it needs, and how to write properties into the
|
||||||
|
document.</p>
|
||||||
|
|
||||||
|
<p>HPSF supports OLE2 property set streams in general, and is not limited to
|
||||||
|
the special case of document properties in the Microsoft Office files
|
||||||
|
mentioned above. The <link href="internals.html">HPSF description</link>
|
||||||
|
describes the internal structure of property set streams. A separate
|
||||||
|
document explains the internal of <link href="thumbnails.html">thumbnail
|
||||||
|
images</link>.</p>
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</document>
|
||||||
|
|
||||||
|
<!-- Keep this comment at the end of the file
|
||||||
|
Local variables:
|
||||||
|
mode: xml
|
||||||
|
sgml-omittag:nil
|
||||||
|
sgml-shorttag:nil
|
||||||
|
sgml-namecase-general:nil
|
||||||
|
sgml-general-insert-case:lower
|
||||||
|
sgml-minimize-attributes:nil
|
||||||
|
sgml-always-quote-attributes:t
|
||||||
|
sgml-indent-step:1
|
||||||
|
sgml-indent-data:t
|
||||||
|
sgml-parent-document:nil
|
||||||
|
sgml-exposed-tags:nil
|
||||||
|
sgml-local-catalogs:nil
|
||||||
|
sgml-local-ecat-files:nil
|
||||||
|
End:
|
||||||
|
-->
|
1082
src/documentation/content/xdocs/hpsf/internals.xml
Normal file
1082
src/documentation/content/xdocs/hpsf/internals.xml
Normal file
File diff suppressed because it is too large
Load Diff
200
src/documentation/content/xdocs/hpsf/thumbnails.xml
Normal file
200
src/documentation/content/xdocs/hpsf/thumbnails.xml
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
====================================================================
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
====================================================================
|
||||||
|
-->
|
||||||
|
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN"
|
||||||
|
"../dtd/document-v11.dtd">
|
||||||
|
<!-- $Id$ -->
|
||||||
|
|
||||||
|
<document>
|
||||||
|
<header>
|
||||||
|
<title>HPSF THUMBNAIL HOW-TO</title>
|
||||||
|
<authors>
|
||||||
|
<person name="Drew Varner" email="Drew.Varner@-deleteThis-sc.edu" />
|
||||||
|
</authors>
|
||||||
|
</header>
|
||||||
|
<body>
|
||||||
|
<section><title>The VT_CF Format</title>
|
||||||
|
|
||||||
|
<p>Thumbnail information is stored as a VT_CF, or Thumbnail Variant. The
|
||||||
|
Thumbnail Variant is used to store various types of information in a
|
||||||
|
clipboard. The VT_CF can store information in formats for the Macintosh or
|
||||||
|
Windows clipboard.</p>
|
||||||
|
|
||||||
|
<p>There are many types of data that can be copied to the clipboard, but the
|
||||||
|
only types of information needed for thumbnail manipulation are the image
|
||||||
|
formats.</p>
|
||||||
|
|
||||||
|
<p>The <code>VT_CF</code> structure looks like this:</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Element:</th>
|
||||||
|
<td>Clipboard Size</td>
|
||||||
|
<td>Clipboard Format Tag</td>
|
||||||
|
<td>Clipboard Data</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Size:</th>
|
||||||
|
<td>32 bit unsigned integer (DWord)</td>
|
||||||
|
<td>32 bit signed integer (DWord)</td>
|
||||||
|
<td>variable length (byte array)</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>The Clipboard Size refers to the size (in bytes) of Clipboard Data
|
||||||
|
(variable size) plus the Clipboard Format (four bytes).</p>
|
||||||
|
|
||||||
|
<p>Clipboard Format Tag has four possible values:</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Value</th>
|
||||||
|
<th>Identifier</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>-1L</code></td>
|
||||||
|
<td><code>CFTAG_WINDOWS</code></td>
|
||||||
|
<td>a built-in Windows© clipboard format value</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>-2L</code></td>
|
||||||
|
<td><code>CFTAG_MACINTOSH</code></td>
|
||||||
|
<td>a Macintosh clipboard format value</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>-3L</code></td>
|
||||||
|
<td><code>CFTAG_FMTID</code></td>
|
||||||
|
<td>a format identifier (FMTID) This is rarely used.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>0L</code></td>
|
||||||
|
<td><code>CFTAG_NODATA</code></td>
|
||||||
|
<td>No data This is rarely used.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section><title>Windows Clipboard Data</title>
|
||||||
|
|
||||||
|
<p>Windows clipboard data has four image formats for thumbnails:</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Value</th>
|
||||||
|
<th>Identifier</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3</td>
|
||||||
|
<td><code>CF_METAFILEPICT</code></td>
|
||||||
|
<td>Windows metafile format - recommended</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>8</td>
|
||||||
|
<td><code>CF_DIB</code></td>
|
||||||
|
<td>Device Independent Bitmap</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>14</td>
|
||||||
|
<td><code>CF_ENHMETAFILE</code></td>
|
||||||
|
<td>Enhanced Windows metafile format</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2</td>
|
||||||
|
<td><code>CF_BITMAP</code></td>
|
||||||
|
<td>Bitmap - Obsolete - Use <code>CF_DIB</code> instead</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section><title>Windows Metafile Format</title>
|
||||||
|
|
||||||
|
<p>The most common format for thumbnails on the Windows platform is the
|
||||||
|
Windows metafile format. The Clipboard places and extra header in front of
|
||||||
|
a the standard Windows Metafile Format data.</p>
|
||||||
|
|
||||||
|
<p>The Clipboard Data byte array looks like this when an image is stored in
|
||||||
|
Windows' Clipboard WMF format.</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Identifier</th>
|
||||||
|
<td>CF_METAFILEPICT</td>
|
||||||
|
<td>mm</td>
|
||||||
|
<td>width</td>
|
||||||
|
<td>height</td>
|
||||||
|
<td>handle</td>
|
||||||
|
<td>WMF data</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Size</th>
|
||||||
|
<td>32 bit unsigned int</td>
|
||||||
|
<td>16 bit unsigned(?) int</td>
|
||||||
|
<td>16 bit unsigned(?) int</td>
|
||||||
|
<td>16 bit unsigned(?) int</td>
|
||||||
|
<td>16 bit unsigned(?) int</td>
|
||||||
|
<td>byte array - variable length</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Description</th>
|
||||||
|
<td>Clipboard WMF</td>
|
||||||
|
<td>Mapping Mode</td>
|
||||||
|
<td>Image Width</td>
|
||||||
|
<td>Image Height</td>
|
||||||
|
<td>handle to the WMF data array in memory, or 0</td>
|
||||||
|
<td>standard WMF byte stream</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section><title>Device Independent Bitmap</title>
|
||||||
|
<p><strong>FIXME:</strong> Describe the Device Independent Bitmap
|
||||||
|
format!</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section><title>Macintosh Clipboard Data</title>
|
||||||
|
<p><strong>FIXME:</strong> Describe the Macintosh clipboard formats!</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</document>
|
||||||
|
|
||||||
|
<!-- Keep this comment at the end of the file
|
||||||
|
Local variables:
|
||||||
|
mode: xml
|
||||||
|
sgml-omittag:nil
|
||||||
|
sgml-shorttag:nil
|
||||||
|
sgml-namecase-general:nil
|
||||||
|
sgml-general-insert-case:lower
|
||||||
|
sgml-minimize-attributes:nil
|
||||||
|
sgml-always-quote-attributes:t
|
||||||
|
sgml-indent-step:1
|
||||||
|
sgml-indent-data:t
|
||||||
|
sgml-parent-document:nil
|
||||||
|
sgml-exposed-tags:nil
|
||||||
|
sgml-local-catalogs:nil
|
||||||
|
sgml-local-ecat-files:nil
|
||||||
|
End:
|
||||||
|
-->
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user