Compare commits

..

16 Commits

Author SHA1 Message Date
Andreas Beeker
6d5f0be72e add forrest link
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1618264 13f79535-47bb-0310-9956-ffa450edef68
2014-08-15 19:36:24 +00:00
Uwe Schindler
bb7a24769a Merged revision(s) 1617849 from poi/trunk:
More cleanups for bug #56814 and some more external entity leaks of #56164

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617854 13f79535-47bb-0310-9956-ffa450edef68
2014-08-13 23:13:43 +00:00
Uwe Schindler
5af0021fa5 Update xmlbeans version in docs
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617740 13f79535-47bb-0310-9956-ffa450edef68
2014-08-13 15:25:35 +00:00
Uwe Schindler
9e1359aa5c Update docs and remove bogus download of release itsself
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617729 13f79535-47bb-0310-9956-ffa450edef68
2014-08-13 14:01:33 +00:00
Uwe Schindler
47bed422fb Add CVE numbers
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617723 13f79535-47bb-0310-9956-ffa450edef68
2014-08-13 13:08:26 +00:00
Uwe Schindler
18915c990d Add changes entries for release
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617717 13f79535-47bb-0310-9956-ffa450edef68
2014-08-13 12:52:47 +00:00
Uwe Schindler
780932ef38 Replace release branch documentation by the old state of previous stable release via svn copy instead of externals
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617714 13f79535-47bb-0310-9956-ffa450edef68
2014-08-13 12:36:10 +00:00
Uwe Schindler
5e40f3cfc3 Merged revision(s) 1617453 from poi/trunk:
Add some extra safety test to check that external entities are not loaded by xmlbeans

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617455 13f79535-47bb-0310-9956-ffa450edef68
2014-08-12 11:36:02 +00:00
Uwe Schindler
e5e51c3272 Merged revision(s) 1617116 from poi/trunk:
Add myself to keys file

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617117 13f79535-47bb-0310-9956-ffa450edef68
2014-08-10 15:06:36 +00:00
Uwe Schindler
fc115acb3d raise version number
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617114 13f79535-47bb-0310-9956-ffa450edef68
2014-08-10 14:55:29 +00:00
Uwe Schindler
f538bf1587 Redefine constant for secure processing, because it missing is stupid stax-api.jar and Java 5 itsself.
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1617109 13f79535-47bb-0310-9956-ffa450edef68
2014-08-10 14:29:45 +00:00
Uwe Schindler
103b45073c Merged revision(s) 1569991, 1615720, 1615731, 1615780-1615781, 1615893, 1589759 from poi/trunk:
Apply suggestions from Uwe Schindler for more secure xml defaults for #54764 and #56164, for xml parsers which support them
........
Add another test file for #54764, and a test that uses it
........
Change the default XMLBeans version used for running to be 2.6, leave 2.3 for compiling the schemas (for maximum compatibility)
........
Before parsing an OOXML document, reset the xmlbeans sax parser to avoid the risk of getting one in an error state (due to XMLBEANS-512). Should be a minimal extra overhead pending a proper fix. Allows us to finish enabling the unit tests for #54764
........
Correct xmlbeans 2.6 url

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1616509 13f79535-47bb-0310-9956-ffa450edef68
2014-08-07 15:25:17 +00:00
Uwe Schindler
dfa98753ac Create branch for 3.10.1 bugfix release
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/REL_3_10_BRANCH@1616499 13f79535-47bb-0310-9956-ffa450edef68
2014-08-07 14:30:26 +00:00
Yegor Kozlov
a9b59608cb merge REL_3_10_FINAL with trunk r1563413
git-svn-id: https://svn.apache.org/repos/asf/poi/tags/REL_3_10_FINAL@1563415 13f79535-47bb-0310-9956-ffa450edef68
2014-02-01 13:20:42 +00:00
Yegor Kozlov
9769ce2453 set version.id to 3_10_FINAL
git-svn-id: https://svn.apache.org/repos/asf/poi/tags/REL_3_10_FINAL@1558697 13f79535-47bb-0310-9956-ffa450edef68
2014-01-16 04:55:08 +00:00
Yegor Kozlov
fabbbbe8ab tag r1557290 as 3_10_FINAL
git-svn-id: https://svn.apache.org/repos/asf/poi/tags/REL_3_10_FINAL@1558694 13f79535-47bb-0310-9956-ffa450edef68
2014-01-16 04:25:53 +00:00
4506 changed files with 556899 additions and 93206 deletions

42
.ci/Jenkinsfile vendored
View File

@ -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()
}
}

View File

@ -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

30
.classpath Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/java"/>
<classpathentry kind="src" path="src/testcases"/>
<classpathentry kind="src" path="src/resources/main"/>
<classpathentry kind="src" path="src/ooxml/java"/>
<classpathentry kind="src" path="src/ooxml/testcases"/>
<classpathentry kind="src" path="src/resources/ooxml"/>
<classpathentry kind="src" path="src/scratchpad/src"/>
<classpathentry kind="src" path="src/scratchpad/testcases"/>
<classpathentry kind="src" path="src/resources/scratchpad"/>
<classpathentry kind="src" path="src/contrib/poi-ruby/java"/>
<classpathentry kind="src" path="src/examples/src"/>
<classpathentry kind="src" path="src/excelant/java"/>
<classpathentry kind="src" path="src/excelant/testcases"/>
<classpathentry kind="src" path="src/excelant/resources"/>
<classpathentry kind="lib" path="lib/ant-1.8.2.jar"/>
<classpathentry kind="lib" path="lib/commons-codec-1.5.jar"/>
<classpathentry kind="lib" path="lib/commons-logging-1.1.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.13.jar"/>
<classpathentry kind="lib" path="ooxml-lib/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="ooxml-lib/stax-api-1.0.1.jar"/>
<classpathentry kind="lib" path="ooxml-lib/xmlbeans-2.6.0.jar"/>
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib/junit-4.11.jar"/>
<classpathentry kind="lib" path="ooxml-lib/ooxml-schemas-1.1.jar" sourcepath="ooxml-lib/ooxml-schemas-src-1.1.jar"/>
<classpathentry kind="lib" path="ooxml-lib/ooxml-encryption-1.1.jar" sourcepath="ooxml-lib/ooxml-encryption-src-1.1.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/eclipse"/>
</classpath>

22
.gitignore vendored
View File

@ -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

17
.project Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ApachePOI</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,301 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.codeComplete.argumentPrefixes=
org.eclipse.jdt.core.codeComplete.argumentSuffixes=
org.eclipse.jdt.core.codeComplete.fieldPrefixes=
org.eclipse.jdt.core.codeComplete.fieldSuffixes=
org.eclipse.jdt.core.codeComplete.localPrefixes=
org.eclipse.jdt.core.codeComplete.localSuffixes=
org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.5
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=80
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=space
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
eclipse.preferences.version=1
org.moreunit.core.anyLanguage.srcFolderPathTemplate=${srcProject}
org.moreunit.core.anyLanguage.testFileNameTemplate=${srcFile}Test
org.moreunit.core.anyLanguage.testFolderPathTemplate=${srcProject}

1491
KEYS Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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.

1392
build.xml Normal file

File diff suppressed because it is too large Load Diff

71
doap_POI.rdf Normal file
View File

@ -0,0 +1,71 @@
<?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#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<Project rdf:about="http://poi.apache.org">
<created>2006-01-26</created>
<license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
<name>Apache POI</name>
<homepage rdf:resource="http://poi.apache.org" />
<asfext:pmc rdf:resource="http://poi.apache.org" />
<shortdesc>Java API To Access Microsoft Document File Formats</shortdesc>
<description>APIs for manipulating various file formats based upon Open Office XML (ECMA-376) and Microsoft's OLE 2 Compound Document formats using pure Java. Apache POI is your Java Excel, Word and PowerPoint solution. We have a complete API for porting other OOXML and 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://poi.apache.org/mailinglists.html" />
<download-page rdf:resource="http://www.apache.org/dyn/closer.cgi/poi/" />
<programming-language>Java</programming-language>
<category rdf:resource="http://projects.apache.org/category/content" />
<category rdf:resource="http://projects.apache.org/category/library" />
<release>
<Version>
<name>Apache POI 3.9</name>
<created>2012-12-03</created>
<revision>3.9</revision>
</Version>
<Version>
<name>Apache POI 3.8</name>
<created>2012-03-26</created>
<revision>3.8</revision>
</Version>
<Version>
<name>Apache POI 3.7</name>
<created>2010-10-29</created>
<revision>3.7</revision>
</Version>
<Version>
<name>Apache POI 3.6</name>
<created>2009-12-14</created>
<revision>3.6</revision>
</Version>
</release>
<release>
<Version>
<name>Apache POI 3.5</name>
<created>2009-09-28</created>
<revision>3.5</revision>
</Version>
</release>
<release>
<Version>
<name>Apache POI 3.2</name>
<created>2008-10-19</created>
<revision>3.2</revision>
</Version>
</release>
<repository>
<SVNRepository>
<location rdf:resource="http://svn.apache.org/repos/asf/poi/"/>
<browse rdf:resource="http://svn.apache.org/viewvc/poi/"/>
</SVNRepository>
</repository>
<maintainer>
<foaf:Person>
<foaf:name>Yegor Kozlov</foaf:name>
<foaf:mbox rdf:resource="mailto:yegor@apache.org"/>
</foaf:Person>
</maintainer>
</Project>
</rdf:RDF>

97
forrest.properties Normal file
View File

@ -0,0 +1,97 @@
##############
# 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}
#YK: validation of sitemap and skins must be turned off to run forrest on JDK 1.6+, see https://issues.apache.org/jira/browse/FOR-984
forrest.validate.sitemap=false
forrest.validate.stylesheets=false
forrest.validate.skins=false
forrest.validate.skins.stylesheets=false
# 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}

View File

@ -209,7 +209,7 @@ license terms. Your use of these subcomponents is subject to the terms
and conditions of the following licenses: and conditions of the following licenses:
Office Open XML schemas (ooxml-schemas-1.*.jar) Office Open XML schemas (ooxml-schemas-1.1.jar)
The Office Open XML schema definitions used by Apache POI are The Office Open XML schema definitions used by Apache POI are
a part of the Office Open XML ECMA Specification (ECMA-376, [1]). a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
@ -225,64 +225,92 @@ Office Open XML schemas (ooxml-schemas-1.*.jar)
[1] http://www.ecma-international.org/publications/standards/Ecma-376.htm [1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
[2] http://www.ecma-international.org/memento/Ecmabylaws.htm [2] http://www.ecma-international.org/memento/Ecmabylaws.htm
[3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx [3] http://www.microsoft.com/openspecifications/en/us/programs/osp/default.aspx
[4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ [4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/Patent%20statements%20ok/ECMA-376%20Edition%202%20Microsoft%20Patent%20Declaration.pdf
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
[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) DOM4J library (dom4j-1.6.1.jar)
Permission is hereby granted, free of charge, to any person obtaining a copy Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
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 Redistribution and use of this software and associated documentation
all copies or substantial portions of the Software. ("Software"), with or without modification, are permitted provided
that the following conditions are met:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1. Redistributions of source code must retain copyright
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, statements and notices. Redistributions must also contain a
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE copy of this document.
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*) 2. 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.
Eclipse Public License - v 1.0 3. The name "DOM4J" must not be used to endorse or promote
products derived from this Software without prior written
permission of MetaStuff, Ltd. For written permission,
please contact dom4j-info@metastuff.com.
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 4. Products derived from this Software may not be called "DOM4J"
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM nor may "DOM4J" appear in their names without prior written
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. permission of MetaStuff, Ltd. DOM4J is a registered
trademark of MetaStuff, Ltd.
5. Due credit should be given to the DOM4J Project -
http://www.dom4j.org
THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESSED 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
METASTUFF, LTD. OR ITS 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.
JUnit test library (junit-3.8.1.jar)
Common Public License - v 1.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
1. DEFINITIONS 1. DEFINITIONS
"Contribution" means: "Contribution" means:
a) in the case of the initial Contributor, the initial code and documentation a) in the case of the initial Contributor, the initial code and
distributed under this Agreement, and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor: b) in the case of each subsequent Contributor:
i) changes to the Program, and
ii) additions to the Program; i) changes to the Program, and
where such changes and/or additions to the Program originate from and are
distributed by that particular Contributor. A Contribution 'originates' from ii) additions to the Program;
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 where such changes and/or additions to the Program originate from
additions to the Program which: (i) are separate modules of software and are distributed by that particular Contributor. A Contribution
distributed in conjunction with the Program under their own license agreement, 'originates' from a Contributor if it was added to the Program by
and (ii) are not derivative works of the Program. 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. "Contributor" means any person or entity that distributes the Program.
"Licensed Patents" mean patent claims licensable by a Contributor which are "Licensed Patents " mean patent claims licensable by a Contributor which
necessarily infringed by the use or sale of its Contribution alone or when are necessarily infringed by the use or sale of its Contribution alone
combined with the Program. or when combined with the Program.
"Program" means the Contributions distributed in accordance with this Agreement. "Program" means the Contributions distributed in accordance with this
Agreement.
"Recipient" means anyone who receives the Program under this Agreement, "Recipient" means anyone who receives the Program under this Agreement,
including all Contributors. including all Contributors.
@ -290,248 +318,190 @@ JUnit test library (junit-4.*.jar) & JaCoCo (*jacoco*)
2. GRANT OF RIGHTS 2. GRANT OF RIGHTS
a) Subject to the terms of this Agreement, each Contributor hereby grants a) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free copyright license to Recipient a non-exclusive, worldwide, royalty-free copyright license
reproduce, prepare derivative works of, publicly display, publicly to reproduce, prepare derivative works of, publicly display, publicly
perform, distribute and sublicense the Contribution of such Contributor, perform, distribute and sublicense the Contribution of such
if any, and such derivative works, in source code and object code form. 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 b) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free patent license under Recipient a non-exclusive, worldwide, royalty-free patent license under
Licensed Patents to make, use, sell, offer to sell, import and otherwise Licensed Patents to make, use, sell, offer to sell, import and
transfer the Contribution of such Contributor, if any, in source code otherwise transfer the Contribution of such Contributor, if any, in
and object code form. This patent license shall apply to the combination source code and object code form. This patent license shall apply to
of the Contribution and the Program if, at the time the Contribution is the combination of the Contribution and the Program if, at the time
added by the Contributor, such addition of the Contribution causes such the Contribution is added by the Contributor, such addition of the
combination to be covered by the Licensed Patents. The patent license Contribution causes such combination to be covered by the Licensed
shall not apply to any other combinations which include the Contribution. Patents. The patent license shall not apply to any other combinations
No hardware per se is licensed hereunder. which include the Contribution. No hardware per se is licensed
c) Recipient understands that although each Contributor grants the licenses hereunder.
to its Contributions set forth herein, no assurances are provided by any
Contributor that the Program does not infringe the patent or other c) Recipient understands that although each Contributor grants the
intellectual property rights of any other entity. Each Contributor licenses to its Contributions set forth herein, no assurances are
disclaims any liability to Recipient for claims brought by any other provided by any Contributor that the Program does not infringe the
entity based on infringement of intellectual property rights or patent or other intellectual property rights of any other entity.
otherwise. As a condition to exercising the rights and licenses granted Each Contributor disclaims any liability to Recipient for claims
hereunder, each Recipient hereby assumes sole responsibility to secure brought by any other entity based on infringement of intellectual
any other intellectual property rights needed, if any. For example, if property rights or otherwise. As a condition to exercising the rights
a third party patent license is required to allow Recipient to distribute and licenses granted hereunder, each Recipient hereby assumes sole
the Program, it is Recipient's responsibility to acquire that license responsibility to secure any other intellectual property rights
before distributing the Program. 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 d) Each Contributor represents that to its knowledge it has sufficient
copyright rights in its Contribution, if any, to grant the copyright copyright rights in its Contribution, if any, to grant the copyright
license set forth in this Agreement. license set forth in this Agreement.
3. REQUIREMENTS 3. REQUIREMENTS
A Contributor may choose to distribute the Program in object code form under A Contributor may choose to distribute the Program in object code form
its own license agreement, provided that: under its own license agreement, provided that:
a) it complies with the terms and conditions of this Agreement; and a) it complies with the terms and conditions of this Agreement; and
b) its license agreement: b) its license agreement:
i) effectively disclaims on behalf of all Contributors all warranties and
conditions, express and implied, including warranties or conditions of i) effectively disclaims on behalf of all Contributors all warranties
title and non-infringement, and implied warranties or conditions of and conditions, express and implied, including warranties or
merchantability and fitness for a particular purpose; conditions of title and non-infringement, and implied warranties
ii) effectively excludes on behalf of all Contributors all liability for or conditions of merchantability and fitness for a particular
damages, including direct, indirect, special, incidental and purpose;
consequential damages, such as lost profits;
iii) states that any provisions which differ from this Agreement are ii) effectively excludes on behalf of all Contributors all liability
offered by that Contributor alone and not by any other party; and for damages, including direct, indirect, special, incidental and
iv) states that source code for the Program is available from such consequential damages, such as lost profits;
Contributor, and informs licensees how to obtain it in a reasonable
manner on or through a medium customarily used for software exchange. 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: When the Program is made available in source code form:
a) it must be made available under this Agreement; and 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, b) a copy of this Agreement must be included with each copy of
if any, in a manner that reasonably allows subsequent Recipients to identify the Program.
the originator of the Contribution.
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 4. COMMERCIAL DISTRIBUTION
Commercial distributors of software may accept certain responsibilities with Commercial distributors of software may accept certain responsibilities
respect to end users, business partners and the like. While this license is with respect to end users, business partners and the like. While this
intended to facilitate the commercial use of the Program, the Contributor license is intended to facilitate the commercial use of the Program,
who includes the Program in a commercial product offering should do so in a the Contributor who includes the Program in a commercial product offering
manner which does not create potential liability for other Contributors. should do so in a manner which does not create potential liability for
Therefore, if a Contributor includes the Program in a commercial product other Contributors. Therefore, if a Contributor includes the Program
offering, such Contributor ("Commercial Contributor") hereby agrees to in a commercial product offering, such Contributor ("Commercial
defend and indemnify every other Contributor ("Indemnified Contributor") Contributor") hereby agrees to defend and indemnify every other
against any losses, damages and costs (collectively "Losses") arising from Contributor ("Indemnified Contributor") against any losses, damages
claims, lawsuits and other legal actions brought by a third party against and costs (collectively "Losses") arising from claims, lawsuits and
the Indemnified Contributor to the extent caused by the acts or omissions other legal actions brought by a third party against the Indemnified
of such Commercial Contributor in connection with its distribution of the Contributor to the extent caused by the acts or omissions of such
Program in a commercial product offering. The obligations in this section Commercial Contributor in connection with its distribution of the
do not apply to any claims or Losses relating to any actual or alleged Program in a commercial product offering. The obligations in this
intellectual property infringement. In order to qualify, an Indemnified section do not apply to any claims or Losses relating to any actual
Contributor must: a) promptly notify the Commercial Contributor in writing or alleged intellectual property infringement. In order to qualify,
of such claim, and b) allow the Commercial Contributor to control, and an Indemnified Contributor must: a) promptly notify the Commercial
cooperate with the Commercial Contributor in, the defense and any related Contributor in writing of such claim, and b) allow the Commercial
settlement negotiations. The Indemnified Contributor may participate in any Contributor to control, and cooperate with the Commercial Contributor
such claim at its own expense. 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 For example, a Contributor might include the Program in a commercial
offering, Product X. That Contributor is then a Commercial Contributor. If product offering, Product X. That Contributor is then a Commercial
that Commercial Contributor then makes performance claims, or offers Contributor. If that Commercial Contributor then makes performance
warranties related to Product X, those performance claims and warranties are claims, or offers warranties related to Product X, those performance
such Commercial Contributor's responsibility alone. Under this section, the claims and warranties are such Commercial Contributor's responsibility
Commercial Contributor would have to defend claims against the other alone. Under this section, the Commercial Contributor would have to
Contributors related to those performance claims and warranties, and if a defend claims against the other Contributors related to those
court requires any other Contributor to pay any damages as a result, the performance claims and warranties, and if a court requires any other
Commercial Contributor must pay those damages. Contributor to pay any damages as a result, the Commercial Contributor
must pay those damages.
5. NO WARRANTY 5. NO WARRANTY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED
AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR
PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the A PARTICULAR PURPOSE. Each Recipient is solely responsible for
appropriateness of using and distributing the Program and assumes all risks determining the appropriateness of using and distributing the Program
associated with its exercise of rights under this Agreement , including but and assumes all risks associated with its exercise of rights under this
not limited to the risks and costs of program errors, compliance with Agreement, including but not limited to the risks and costs of program
applicable laws, damage to or loss of data, programs or equipment, and errors, compliance with applicable laws, damage to or loss of data,
unavailability or interruption of operations. programs or equipment, and unavailability or interruption of operations.
6. DISCLAIMER OF LIABILITY 6. DISCLAIMER OF LIABILITY
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
OF SUCH DAMAGES. HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. GENERAL 7. GENERAL
If any provision of this Agreement is invalid or unenforceable under If any provision of this Agreement is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of the applicable law, it shall not affect the validity or enforceability of
remainder of the terms of this Agreement, and without further action by the the remainder of the terms of this Agreement, and without further
parties hereto, such provision shall be reformed to the minimum extent action by the parties hereto, such provision shall be reformed to the
necessary to make such provision valid and enforceable. minimum extent necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against any entity (including a If Recipient institutes patent litigation against a Contributor with
cross-claim or counterclaim in a lawsuit) alleging that the Program itself respect to a patent applicable to software (including a cross-claim or
(excluding combinations of the Program with other software or hardware) counterclaim in a lawsuit), then any patent licenses granted by that
infringes such Recipient's patent(s), then such Recipient's rights granted Contributor to such Recipient under this Agreement shall terminate as of
under Section 2(b) shall terminate as of the date such litigation is filed. the date such litigation is filed. In addition, 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 All Recipient's rights under this Agreement shall terminate if it fails
comply with any of the material terms or conditions of this Agreement and to comply with any of the material terms or conditions of this Agreement
does not cure such failure in a reasonable period of time after becoming and does not cure such failure in a reasonable period of time after
aware of such noncompliance. If all Recipient's rights under this Agreement becoming aware of such noncompliance. If all Recipient's rights under
terminate, Recipient agrees to cease use and distribution of the Program as this Agreement terminate, Recipient agrees to cease use and distribution
soon as reasonably practicable. However, Recipient's obligations under this of the Program as soon as reasonably practicable. However, Recipient's
Agreement and any licenses granted by Recipient relating to the Program obligations under this Agreement and any licenses granted by Recipient
shall continue and survive. relating to the Program shall continue and survive.
Everyone is permitted to copy and distribute copies of this Agreement, but Everyone is permitted to copy and distribute copies of this Agreement,
in order to avoid inconsistency the Agreement is copyrighted and may only but in order to avoid inconsistency the Agreement is copyrighted and may
be modified in the following manner. The Agreement Steward reserves the only be modified in the following manner. The Agreement Steward reserves
right to publish new versions (including revisions) of this Agreement from the right to publish new versions (including revisions) of this Agreement
time to time. No one other than the Agreement Steward has the right to from time to time. No one other than the Agreement Steward has the right
modify this Agreement. The Eclipse Foundation is the initial Agreement to modify this Agreement. IBM is the initial Agreement Steward. IBM may
Steward. The Eclipse Foundation may assign the responsibility to serve as assign the responsibility to serve as the Agreement Steward to a suitable
the Agreement Steward to a suitable separate entity. Each new version of separate entity. Each new version of the Agreement will be given a
the Agreement will be given a distinguishing version number. The Program distinguishing version number. The Program (including Contributions) may
(including Contributions) may always be distributed subject to the version always be distributed subject to the version of the Agreement under which
of the Agreement under which it was received. In addition, after a new it was received. In addition, after a new version of the Agreement is
version of the Agreement is published, Contributor may elect to distribute published, Contributor may elect to distribute the Program (including
the Program (including its Contributions) under the new version. Except as its Contributions) under the new version. Except as expressly stated in
expressly stated in Sections 2(a) and 2(b) above, Recipient receives no Sections 2(a) and 2(b) above, Recipient receives no rights or licenses
rights or licenses to the intellectual property of any Contributor under to the intellectual property of any Contributor under this Agreement,
this Agreement, whether expressly, by implication, estoppel or otherwise. whether expressly, by implication, estoppel or otherwise. All rights in
All rights in the Program not expressly granted under this Agreement are the Program not expressly granted under this Agreement are reserved.
reserved.
This Agreement is governed by the laws of the State of New York and the 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 intellectual property laws of the United States of America. No party to
Agreement will bring a legal action under this Agreement more than one year this Agreement will bring a legal action under this Agreement more than
after the cause of action arose. Each party waives its rights to a jury one year after the cause of action arose. Each party waives its rights
trial in any resulting litigation. 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.

View File

@ -1,14 +1,14 @@
Apache POI Apache POI
Copyright 2003-2017 The Apache Software Foundation Copyright 2009 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 the DOM4J library (http://www.dom4j.org).
Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
This product contains parts that were originally based on software from BEA. This product contains parts that were originally based on software from BEA.
Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/> (dead link), Copyright (c) 2000-2003, BEA Systems, <http://www.bea.com/>.
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) This product contains W3C XML Schema documents. Copyright 2001-2003 (c)
World Wide Web Consortium (Massachusetts Institute of Technology, European World Wide Web Consortium (Massachusetts Institute of Technology, European
@ -19,9 +19,3 @@ This product contains the Piccolo XML Parser for Java
This product contains the chunks_parse_cmds.tbl file from the vsdump program. This product contains the chunks_parse_cmds.tbl file from the vsdump program.
Copyright (C) 2006-2007 Valek Filippov (frob@df.ru) Copyright (C) 2006-2007 Valek Filippov (frob@df.ru)
This product contains parts of the eID Applet project
<http://eid-applet.googlecode.com> and <https://github.com/e-Contract/eid-applet>.
Copyright (c) 2009-2014
FedICT (federal ICT department of Belgium), e-Contract.be BVBA (https://www.e-contract.be),
Bart Hanssens from FedICT

50
maven/multisign.sh Executable file
View File

@ -0,0 +1,50 @@
#! /bin/sh
#
# 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.
#
# create md5 checksums and gpg signatures
stty -echo
echo "enter your GPG passphrase"
read passphrase
stty echo
# Do we have md5sum and sha1sum?
# (We can use openssl if not, but the files it produces aren't as nice)
which md5sum > /dev/null
LACKING_MD5SUM=$?
which sha1sum > /dev/null
LACKING_SHA1SUM=$?
for i in *; do
echo ""
echo Signing $i
echo $passphrase | gpg --passphrase-fd 0 --output $i.asc --detach-sig --armor $i
gpg --verify $i.asc $i
echo Hashing $i
if [ "$LACKING_MD5SUM" = "1" ]; then
openssl md5 < $i > $i.md5
else
md5sum $i > $i.md5
fi
if [ "$LACKING_SHA1SUM" = "1" ]; then
openssl sha1 < $i > $i.sha1
else
sha1sum $i > $i.sha1
fi
done

63
maven/mvn-deploy.sh Executable file
View File

@ -0,0 +1,63 @@
#! /bin/sh
#
# 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.
#
# Shell script to deploy POI artifacts in a maven repository.
#
# Note, You should configure your settings.xml and add a server with id=apache-releases:
#
# <server>
# <id>apache-releases</id>
# <username>apacheId</username>
# <privateKey>/path/to/private/key</privateKey>
# </server>
#
# <profiles>
# <profile>
# <id>apache-releases</id>
# <properties>
# <gpg.passphrase><!-- Your GPG passphrase --></gpg.passphrase>
# </properties>
# </profile>
# </profiles>
#
# Usage:
# 1. ant dist
# 2. cd build/dist
# 3. ./mvn-deploy.sh
# @author Yegor Kozlov
M2_REPOSITORY=scp://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository
M2_SCP=people.apache.org:/www/people.apache.org/repo/m2-ibiblio-rsync-repository
VERSION=@VERSION@
DSTAMP=@DSTAMP@
for artifactId in poi poi-scratchpad poi-ooxml poi-examples poi-ooxml-schemas poi-excelant
do
mvn gpg:sign-and-deploy-file -DrepositoryId=apache-releases -P apache-releases \
-Durl=$M2_REPOSITORY \
-Dfile=$artifactId-$VERSION-$DSTAMP.jar -DpomFile=$artifactId-$VERSION.pom
#The maven sign-and-deploy-file command does NOT sign POM files, so we have to upload the POM's .asc manually
scp $artifactId-$VERSION.pom.asc $M2_SCP/org/apache/poi/$artifactId/$VERSION/
if [ -r $artifactId-$VERSION-sources-$DSTAMP.jar ]; then
mvn deploy:deploy-file -DrepositoryId=apache-releases -P apache-releases \
-Durl=$M2_REPOSITORY -DgeneratePom=false -Dpackaging=java-source \
-Dfile=$artifactId-$VERSION-sources-$DSTAMP.jar -DpomFile=$artifactId-$VERSION.pom
scp $artifactId-$VERSION-sources-$DSTAMP.jar.asc $M2_SCP/org/apache/poi/$artifactId/$VERSION/$artifactId-$VERSION-sources.jar.asc
fi
done

70
maven/ooxml-schemas.pom Normal file
View File

@ -0,0 +1,70 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>@VERSION@</version>
<packaging>jar</packaging>
<name>OOXML schemas</name>
<description>XmlBeans generated from the Ecma supplied xsds:
http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%20Part%204%20(DOCX).zip</description>
<url>http://poi.apache.org/</url>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>
<organization>
<name>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</project>

78
maven/poi-examples.pom Normal file
View File

@ -0,0 +1,78 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>@VERSION@</version>
<packaging>jar</packaging>
<name>Apache POI</name>
<url>http://poi.apache.org/</url>
<description>Apache POI Examples</description>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>@VERSION@</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>@VERSION@</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>@VERSION@</version>
</dependency>
</dependencies>
</project>

78
maven/poi-excelant.pom Normal file
View File

@ -0,0 +1,78 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>@VERSION@</version>
<packaging>jar</packaging>
<name>Apache POI</name>
<url>http://poi.apache.org/</url>
<description>Apache POI Excel Ant Tasks</description>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>@VERSION@</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>@VERSION@</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.8.2</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,68 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</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>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
</project>

78
maven/poi-ooxml.pom Normal file
View File

@ -0,0 +1,78 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</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>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>@VERSION@</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>@VERSION@</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
</project>

68
maven/poi-scratchpad.pom Normal file
View File

@ -0,0 +1,68 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</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>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>@VERSION@</version>
</dependency>
</dependencies>
</project>

83
maven/poi.pom Normal file
View File

@ -0,0 +1,83 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</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>
<mailingLists>
<mailingList>
<name>POI Users List</name>
<subscribe>user-subscribe@poi.apache.org</subscribe>
<unsubscribe>user-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-user/</archive>
</mailingList>
<mailingList>
<name>POI Developer List</name>
<subscribe>dev-subscribe@poi.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@poi.apache.org</unsubscribe>
<archive>http://mail-archives.apache.org/mod_mbox/poi-dev/</archive>
</mailingList>
</mailingLists>
<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>Apache Software Foundation</name>
<url>http://www.apache.org/</url>
</organization>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.13</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.5</version>
</dependency>
</dependencies>
</project>

75
patch.xml Normal file
View 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.
-->
<!--
=======================================================================
Use Apache Ant to generate a patch file.
=======================================================================
-->
<project name="create-patch" default="patchpackage" basedir=".">
<property environment="env"/>
<property name="patch.package" value="patch.tar.gz"/>
<property name="patch.file" value="patch.txt"/>
<condition property="svn.found">
<or>
<available file="svn" filepath="${env.PATH}"/>
<available file="svn.exe" filepath="${env.PATH}"/>
<available file="svn.exe" filepath="${env.Path}"/>
</or>
</condition>
<target name="createpatch">
<fail unless="svn.found" message="You need a version of svn to create the patch"/>
<exec executable="svn" output="${patch.file}">
<arg value="diff"/>
</exec>
</target>
<target name="newfiles">
<exec executable="svn" output="${patch.file}.tmp">
<arg value="status"/>
</exec>
<!-- prepare the list of files to include in patch.tar.gz -->
<loadfile srcfile="${patch.file}.tmp" property="tar.file.list">
<filterchain>
<!-- capture any new files -->
<linecontainsregexp>
<regexp pattern="^(\?|A)......"/>
</linecontainsregexp>
<!-- filter out the first six characters -->
<tokenfilter>
<replaceregex pattern="^(.......)" replace=""/>
</tokenfilter>
<!--remove line breaks -->
<striplinebreaks/>
</filterchain>
</loadfile>
</target>
<target name="patchpackage" depends="createpatch,newfiles">
<delete file="${patch.package}"/>
<tar includes="${tar.file.list}"
destfile="${patch.package}"
basedir="."
compression="gzip" >
</tar>
<delete file="${patch.file}.tmp"/>
</target>
</project>

101
pom.xml
View File

@ -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>

View File

@ -0,0 +1,332 @@
# 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.
# 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=$(shell grep '<property name="version.id"' ../../../build.xml | awk -F'"' '{print $$4}')
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
POI_JAR_WC=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 ../../../build/dist/$(POI_JAR_WC) $(BINDIR)/$(POI_JAR)
cd $(JAR_CLASSES); $(JAR) -xf ../../$(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

View 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$);
%}

View 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));
}
}
}
}

View File

@ -0,0 +1,62 @@
/* ====================================================================
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();
}
@Override
protected void finalize()
throws Throwable
{
// decRef();
}
// protected native void incRef();
// protected native void decRef();
@Override
public native void close()
throws IOException;
/* (non-Javadoc)
* @see java.io.OutputStream#write(int)
*/
@Override
public native void write(int arg0) throws IOException;
}

View 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

View 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

View 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'

View File

View 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.

View File

@ -0,0 +1,43 @@
The Apache POI project is pleased to announce the release of POI @VERSION@.
Featured are a handful of new areas of functionality, and numerous bug fixes.
See the downloads page for binary and source distributions: http://poi.apache.org/download.html
Release Notes
Changes
------------
The most notable changes in this release are:
@List changes here@
A full list of changes is available in the change log: http://poi.apache.org/changes.html.
People interested should also follow the dev mailing list to track further progress.
Release Contents
----------------
This release comes in two forms:
- pre-built binaries containing compiled versions of all Apache POI components and documentation
(poi-bin-@VERSION@.zip or poi-bin-@VERSION@.tar.gz)
- source archive you can build POI from (poi-src-@VERSION@.zip or poi-src-@VERSION@.tar.gz)
Unpack the archive and use the following command to build all POI components with Apache Ant 1.6+ and JDK 1.5 or higher:
ant jar
Pre-built versions of all POI components are also available in the central Maven repository
under Group ID "org.apache.poi" and Version "@VERSION@"
All release artifacts are accompanied by MD5 checksums and a PGP signatures
that you can use to verify the authenticity of your download.
The public key used for the PGP signature can be found at
http://svn.apache.org/repos/asf/poi/tags/@RELEASE_TAG@/KEYS
About Apache POI
-----------------------
Apache POI is well-known in the Java field as a library for reading and
writing Microsoft Office file formats, such as Excel, PowerPoint, Visio and
Word. Since POI 3.5, the new OOXML (Office Open XML) formats introduced in Office 2007 have been supported.
See http://poi.apache.org/ for more details

View File

@ -0,0 +1,74 @@
# 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.
================================
POI Release Checklist
================================
Note - this file should be read in conjunction with the
POI Release Guide. They should probably be merged in future...
- 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 the files to the POI dev dist area under /<version>-RC-<x>/
eg https://dist.apache.org/repos/dist/dev/poi/3.8-RC2/ for
3.8 Release Candidate 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 https://dist.apache.org/repos/dist/dev/poi/3.8-RC2/)
- wait for release vote to pass
- send notification of vote passing to private@
- move the regular distributions from the dev area of the dist svn to the
release area of svn
- remove the old distribition from the release area of svn
- ensure that the artificats show up on www.apache.org/dist/poi/ (they
should appear within a minute)
- copy the maven distribution from a checkout of the dev area of the dist
svn, to the distribution directories on
people.apache.org/repo/m1-ibiblio-rsync-repository/org.apache.poi/
- copy the maven redirection pom from a checkout of the dev area of the
dist svn, to people.apache.org/repo/m1-ibiblio-rsync-repository/poi/poms/
- 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)

View 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>

View File

@ -0,0 +1,72 @@
<?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="Overview">
<menu-item label="Home" href="index.html"/>
<menu-item label="Download" href="download.html"/>
<menu-item label="Components" href="overview.html"/>
<menu-item label="Text Extraction" href="text-extraction.html"/>
<menu-item label="Encryption support" href="encryption.html"/>
<menu-item label="Case Studies" href="casestudies.html"/>
<menu-item label="Legal" href="legal.html"/>
</menu>
<menu label="Help">
<menu-item label="Javadocs" href="ext:javadoc"/>
<menu-item label="FAQ" href="faq.html"/>
<menu-item label="Mailing Lists" href="mailinglists.html"/>
<menu-item label="Bug Database" href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI"/>
<menu-item label="Changes Log" href="changes.html"/>
</menu>
<menu label="Getting Involved">
<menu-item label="Subversion Repository" href="subversion.html"/>
<menu-item label="How To Build" href="howtobuild.html"/>
<menu-item label="Contribution Guidelines" href="guidelines.html"/>
<menu-item label="Who We Are" href="who.html"/>
</menu>
<menu label="Component APIs">
<menu-item label="Excel (SS=HSSF+XSSF)" href="spreadsheet/index.html"/>
<menu-item label="Word (HWPF+XWPF)" href="hwpf/index.html"/>
<menu-item label="PowerPoint (HSLF+XSLF)" href="slideshow/index.html"/>
<menu-item label="OpenXML4J (OOXML)" href="oxml4j/index.html"/>
<menu-item label="OLE2 Filesystem (POIFS)" href="poifs/index.html"/>
<menu-item label="OLE2 Document Props (HPSF)" href="hpsf/index.html"/>
<menu-item label="Outlook (HSMF)" href="hsmf/index.html"/>
<menu-item label="Visio (HDGF)" href="hdgf/index.html"/>
<menu-item label="TNEF (HMEF)" href="hmef/index.html"/>
<menu-item label="Publisher (HPBF)" href="hpbf/index.html"/>
</menu>
<menu label="Apache Wide">
<menu-item label="Apache Software Foundation" href="http://www.apache.org/" />
<menu-item label="License" href="http://www.apache.org/licenses/" />
<menu-item label="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html" />
<menu-item label="Thanks" href="http://www.apache.org/foundation/thanks.html" />
<menu-item label="Security" href="http://www.apache.org/security/" />
</menu>
</book>

View File

@ -0,0 +1,321 @@
<?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"/>
<person id="DF" name="David Fisher" email="dfisher@jmlafferty.com"/>
<person id="DS" name="Dominik Stadler" email="centic@apache.org"/>
</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). To submit a case study, either
<link href="guidelines.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>REWOO Scope</title>
<p>
<link href="http://www.rewoo.de/">REWOO Scope</link> is a modern and easy to use web-based enterprise content management system. It supports knowledge workers and managers in making the right decisions based upon all relevant information.
</p>
<p>
The system uses Apache POI to extract information stored within excel files and use it transparently within REWOO Scope. Thus, POI allows our customers to work in their standard office environment while also having all important information in the REWO Scope system.
</p>
</section>
<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="spreadsheet/">
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>
<title>JM Lafferty Associates, Inc.</title>
<p>
On its <link href="http://www.forecastworks.com/public/">ForecastWorks</link> website
<link href="http://www.jmlafferty.com/">JM Lafferty Associates, Inc.</link> produces dynamic on demand
financial analyses of companies and institutional funds. The pages produced are selected and exported
in several file formats including PPT and XLS.
</p>
<ul>
<li>The PPT files produced are of high quality which is on a par with similar PDF files.</li>
<li>The XLS files produced contain a complex forecasting model built from a template with a VBA Macro.</li>
</ul>
<p>
David Fisher (dfisher@jmlafferty.com)
</p>
</section>
<section>
<title>iDATA Development Ltd (IDD)</title>
<p>
<link href="http://www.iexlsoftware.com/">IDD</link> have developed the iEXL product to
generate Excel spreadsheets directly on the Iseries/AS400 IBM I on Power platform.
</p>
<p>
Professional spreadsheets created via a menu system. Some basic programming is required for more complex options.
When programming is required it can be carried out using RPG, SQL, QUERY, JAVA, COBOL etc.
In other words your existing staffs knowledge
</p>
<p>
Design spreadsheets with:
</p>
<ul>
<li>Fonts down to cell level</li>
<li>Colours (Background and text) down to cell level</li>
<li>Shading down to cell level</li>
<li>Cell patterns down to cell level</li>
<li>Cell initialization</li>
<li>Freeze Panes</li>
<li>Passwords</li>
<li>Images/Pictures both static and dynamic</li>
<li>Headings</li>
<li>Page breaks</li>
<li>Sheet breaks</li>
<li>Text insertion and much more</li>
<li>Functions/Formula</li>
<li>Merge cells</li>
<li>Row Height</li>
<li>Cell text alignment</li>
<li>Text Rotation </li>
<li>50 Database files per workbook.</li>
<li>E-mail the spreadsheet</li>
</ul>
<p>
The product name is 'iEXL' and has been live on both European and North American systems for over four years.
It is being used in preference to more established commercial products which our clients have already purchased.
This is due to cost and ease of use.
</p>
<p>
All spreadsheets can be archived if required so that historical spreadsheets can be retrieved.
</p>
<p>
The system has benefits for all departments within an organisation.
Examples of this are accounts department for things such as aged trial balance,
distribution department for ASNs, warehousing for stock figures, IS for security reporting etc.
</p>
<p>
Clients have at this point (June 2012) created over 300 spreadsheets which in turn have generated over
500,000 E-mails. iEXL has a menu driven email system.
</p>
<p>
Due to the Apache-POI project IDD have been able to create the IEXL product.
This is a well priced product which allows companies of all sizes access to a product that opens up their reporting capabilities
</p>
<p>
Within the <link href="http://www.iexlsoftware.com/">iEXLSOFTWARE.COM</link> website you will find a full user manual,
installation instructions, a call log (Ticket) system and a downloadable 45 day trial version.
</p>
<p>
<em>Author: Mark.D.Golden</em>
</p>
</section>
<section>
<title>Ugly Duckling</title>
<p>
<link href="http://uglyduckling.nl/">Ugly Duckling</link> focus on Software, Management and Finance.
We have recently been using Apache POI to create tools for the mortgage group of
<link href="https://www.abnamro.nl/en/personal/index.html">ABN AMRO</link> in the Netherlands.
During this project we created a number of what we call 'Robots' using the HSSF API.
</p>
<p>
These <link href="http://uglyduckling.nl/work/robots/">robots</link> run as services on the network and
help automate the processing of large amounts of data. Our Robots can be used to spot problems that
a human might not, and also to automate repetitive tasks.
</p>
<p>
We found Apache POI to be extremely useful. We took the base API, wrapped it in a builder pattern and
thus created a DSL with a fluid interface. Throughout the project we enjoyed very much working with
Apache POI and found it to be very reliable.
</p>
</section>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View File

@ -0,0 +1,132 @@
<?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 - Download Release Artifacts</title>
</header>
<body>
<section><title>Available Downloads</title>
<p>
This page provides instructions on how to download and verify the
Apache POI release artifacts. Apache POI is a pure Java library for
manipulating Microsoft Documents, for more information please see
<link href="index.html">the project homepage</link>.
</p>
<ul>
<li>The latest stable release is Apache POI 3.10.1 (this download)</li>
<li><link href="download.html#archive">Archives of all prior releases</link></li>
</ul>
<p>
Apache POI releases are available under the <link href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0.</link>
See the NOTICE file contained in each release artifact for applicable copyright attribution notices.
</p>
<p>
To insure that you have downloaded the true release you should <link href="download.html#verify">verify the integrity</link>
of the files using the signatures and checksums available from this page.
</p>
</section>
<section><title>Nightly Builds</title>
<p>The POI nightly builds are run on <link href="https://builds.apache.org/job/POI/">Jenkins</link> continuous integration server.
Note that these are no official builds and they are not endorsed or even supported by the POI team.
<br/>
<strong>These builds should not be used in production</strong>: they are only intended for use by developers
to help with resolving bugs and evaluating new features.
</p>
<ul>
<li><link href="https://builds.apache.org/job/POI/lastSuccessfulBuild/artifact/build/dist/">
Last Successful Jenkins build for POI-trunk</link></li>
</ul>
</section>
<section id="verify"><title>Verify</title>
<p>
It is essential that you verify the integrity of the downloaded files using the PGP or MD5 signatures.
Please read <link href="http://httpd.apache.org/dev/verification.html">Verifying Apache HTTP Server Releases</link>
for more information on why you should verify our releases. This page provides detailed instructions which you can use for POI artifacts.
</p>
<p>
The PGP signatures can be verified using PGP or GPG. First download the KEYS file as well as the .asc signature files
for the relevant release packages. Make sure you get these files from the main distribution directory,
rather than from a mirror. Then verify the signatures using
</p>
<source>
% pgpk -a KEYS
% pgpv poi-X.Y.Z.jar.asc
</source>
<p>or</p>
<source>
% pgp -ka KEYS
% pgp poi-X.Y.Z.jar.asc
</source>
<p>or</p>
<source>
% gpg --import KEYS
% gpg --verify poi-X.Y.Z.jar.asc
</source>
<p>Sample verification of poi-bin-3.5-FINAL-20090928.tar.gz</p>
<source>
% gpg --import KEYS
gpg: key 12DAE9BE: "Glen Stampoultzis &lt;glens at apache dot org&gt;" not changed
gpg: key 4CEED75F: "Nick Burch &lt;nick at gagravarr dot org&gt;" not changed
gpg: key 84B5A42E: "Rainer Klute &lt;rainer.klute at gmx dot de&gt;" not changed
gpg: key F5BB52CD: "Yegor Kozlov &lt;yegor.kozlov at gmail dot com&gt;" not changed
gpg: Total number processed: 4
gpg: unchanged: 4
% gpg --verify poi-bin-3.5-FINAL-20090928.tar.gz.asc
gpg: Signature made Mon Sep 28 10:28:25 2009 PDT using DSA key ID F5BB52CD
gpg: Good signature from "Yegor Kozlov &lt;yegor.kozlov at gmail dot com&gt;"
gpg: aka "Yegor Kozlov &lt;yegor at dinom dot ru&gt;"
gpg: aka "Yegor Kozlov &lt;yegor at apache dot org&gt;"
Primary key fingerprint: 7D77 0C77 6CE7 754E E6AF 23AA 6934 0A02 F5BB 52CD
% gpg --fingerprint F5BB52CD
pub 1024D/F5BB52CD 2007-06-18 [expires: 2012-06-16]
Key fingerprint = 7D77 0C77 6CE7 754E E6AF 23AA 6934 0A02 F5BB 52CD
uid Yegor Kozlov &lt;yegor.kozlov at gmail dot com&gt;
uid Yegor Kozlov &lt;yegor at dinom dot ru&gt;
uid Yegor Kozlov &lt;yegor at apache dot org&gt;
sub 4096g/7B45A98A 2007-06-18 [expires: 2012-06-16]
</source>
</section>
<section id="archive"><title>Release Archives</title>
<p>
Apache POI became a top level project in June 2007 and POI 3.0 aritfacts were re-released.
Prior to that date POI was a sub-project of <link href="http://jakarta.apache.org/">Apache Jakarta.</link>
</p>
<ul>
<li><link href="http://archive.apache.org/dist/poi/release/bin/">Binary Artifacts</link></li>
<li><link href="http://archive.apache.org/dist/poi/release/src/">Source Artifacts</link></li>
<li><link href="http://archive.apache.org/dist/poi/">Keys</link></li>
<li><link href="http://archive.apache.org/dist/jakarta/poi/release/">Artifacts from prior to 3.0</link></li>
</ul>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View 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 "&#180;" ><!--=acute accent-->
<!ENTITY breve "&#x2D8;" ><!--=breve-->
<!ENTITY caron "&#x2C7;" ><!--=caron-->
<!ENTITY cedil "&#184;" ><!--=cedilla-->
<!ENTITY circ "^" ><!--=circumflex accent-->
<!ENTITY dblac "&#x2DD;" ><!--=double acute accent-->
<!ENTITY die "&#168;" ><!--=dieresis-->
<!ENTITY dot "&#x2D9;" ><!--=dot above-->
<!ENTITY grave "`" ><!--=grave accent-->
<!ENTITY macr "&#175;" ><!--=macron-->
<!ENTITY ogon "&#x2DB;" ><!--=ogonek-->
<!ENTITY ring "&#x2DA;" ><!--=ring-->
<!ENTITY tilde "&#x2DC;" ><!--=tilde-->
<!ENTITY uml "&#168;" ><!--=umlaut mark-->

View 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 "&#192;" ><!-- capital A, grave accent -->
<!ENTITY Aacute "&#193;" ><!-- capital A, acute accent -->
<!ENTITY Acirc "&#194;" ><!-- capital A, circumflex accent -->
<!ENTITY Atilde "&#195;" ><!-- capital A, tilde -->
<!ENTITY Auml "&#196;" ><!-- capital A, dieresis or umlaut mark -->
<!ENTITY Aring "&#197;" ><!-- capital A, ring -->
<!ENTITY AElig "&#198;" ><!-- capital AE diphthong (ligature) -->
<!ENTITY Ccedil "&#199;" ><!-- capital C, cedilla -->
<!ENTITY Egrave "&#200;" ><!-- capital E, grave accent -->
<!ENTITY Eacute "&#201;" ><!-- capital E, acute accent -->
<!ENTITY Ecirc "&#202;" ><!-- capital E, circumflex accent -->
<!ENTITY Euml "&#203;" ><!-- capital E, dieresis or umlaut mark -->
<!ENTITY Igrave "&#204;" ><!-- capital I, grave accent -->
<!ENTITY Iacute "&#205;" ><!-- capital I, acute accent -->
<!ENTITY Icirc "&#206;" ><!-- capital I, circumflex accent -->
<!ENTITY Iuml "&#207;" ><!-- capital I, dieresis or umlaut mark -->
<!ENTITY ETH "&#208;" ><!-- capital Eth, Icelandic -->
<!ENTITY Ntilde "&#209;" ><!-- capital N, tilde -->
<!ENTITY Ograve "&#210;" ><!-- capital O, grave accent -->
<!ENTITY Oacute "&#211;" ><!-- capital O, acute accent -->
<!ENTITY Ocirc "&#212;" ><!-- capital O, circumflex accent -->
<!ENTITY Otilde "&#213;" ><!-- capital O, tilde -->
<!ENTITY Ouml "&#214;" ><!-- capital O, dieresis or umlaut mark -->
<!ENTITY Oslash "&#216;" ><!-- capital O, slash -->
<!ENTITY Ugrave "&#217;" ><!-- capital U, grave accent -->
<!ENTITY Uacute "&#218;" ><!-- capital U, acute accent -->
<!ENTITY Ucirc "&#219;" ><!-- capital U, circumflex accent -->
<!ENTITY Uuml "&#220;" ><!-- capital U, dieresis or umlaut mark -->
<!ENTITY Yacute "&#221;" ><!-- capital Y, acute accent -->
<!ENTITY THORN "&#222;" ><!-- capital THORN, Icelandic -->
<!ENTITY szlig "&#223;" ><!-- small sharp s, German (sz ligature) -->
<!ENTITY agrave "&#224;" ><!-- small a, grave accent -->
<!ENTITY aacute "&#225;" ><!-- small a, acute accent -->
<!ENTITY acirc "&#226;" ><!-- small a, circumflex accent -->
<!ENTITY atilde "&#227;" ><!-- small a, tilde -->
<!ENTITY auml "&#228;" ><!-- small a, dieresis or umlaut mark -->
<!ENTITY aring "&#229;" ><!-- small a, ring -->
<!ENTITY aelig "&#230;" ><!-- small ae diphthong (ligature) -->
<!ENTITY ccedil "&#231;" ><!-- small c, cedilla -->
<!ENTITY egrave "&#232;" ><!-- small e, grave accent -->
<!ENTITY eacute "&#233;" ><!-- small e, acute accent -->
<!ENTITY ecirc "&#234;" ><!-- small e, circumflex accent -->
<!ENTITY euml "&#235;" ><!-- small e, dieresis or umlaut mark -->
<!ENTITY igrave "&#236;" ><!-- small i, grave accent -->
<!ENTITY iacute "&#237;" ><!-- small i, acute accent -->
<!ENTITY icirc "&#238;" ><!-- small i, circumflex accent -->
<!ENTITY iuml "&#239;" ><!-- small i, dieresis or umlaut mark -->
<!ENTITY eth "&#240;" ><!-- small eth, Icelandic -->
<!ENTITY ntilde "&#241;" ><!-- small n, tilde -->
<!ENTITY ograve "&#242;" ><!-- small o, grave accent -->
<!ENTITY oacute "&#243;" ><!-- small o, acute accent -->
<!ENTITY ocirc "&#244;" ><!-- small o, circumflex accent -->
<!ENTITY otilde "&#245;" ><!-- small o, tilde -->
<!ENTITY ouml "&#246;" ><!-- small o, dieresis or umlaut mark -->
<!ENTITY oslash "&#248;" ><!-- small o, slash -->
<!ENTITY ugrave "&#249;" ><!-- small u, grave accent -->
<!ENTITY uacute "&#250;" ><!-- small u, acute accent -->
<!ENTITY ucirc "&#251;" ><!-- small u, circumflex accent -->
<!ENTITY uuml "&#252;" ><!-- small u, dieresis or umlaut mark -->
<!ENTITY yacute "&#253;" ><!-- small y, acute accent -->
<!ENTITY thorn "&#254;" ><!-- small thorn, Icelandic -->
<!ENTITY yuml "&#255;" ><!-- small y, dieresis or umlaut mark -->

View 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 "&#189;" ><!--=fraction one-half-->
<!ENTITY frac12 "&#189;" ><!--=fraction one-half-->
<!ENTITY frac14 "&#188;" ><!--=fraction one-quarter-->
<!ENTITY frac34 "&#190;" ><!--=fraction three-quarters-->
<!ENTITY frac18 "&#x215B;" >
<!-- or "&#xB1;&#x202;&#x2044;&#x2088;" --><!--=fraction one-eighth-->
<!ENTITY frac38 "&#x215C;" >
<!-- or "&#xB3;&#x2044;&#x2088;" --><!--=fraction three-eighths-->
<!ENTITY frac58 "&#x215D;" >
<!-- or "&#x2075;&#x2044;&#x2088;" --><!--=fraction five-eighths-->
<!ENTITY frac78 "&#x215E;" >
<!-- or "&#x2077;&#x2044;&#x2088;" --><!--=fraction seven-eighths-->
<!ENTITY sup1 "&#185;" ><!--=superscript one-->
<!ENTITY sup2 "&#178;" ><!--=superscript two-->
<!ENTITY sup3 "&#179;" ><!--=superscript three-->
<!ENTITY plus "+" ><!--=plus sign B:-->
<!ENTITY plusmn "&#xB1;" ><!--/pm B: =plus-or-minus sign-->
<!ENTITY lt "&#38;#60;" ><!--=less-than sign R:-->
<!ENTITY equals "=" ><!--=equals sign R:-->
<!ENTITY gt ">" ><!--=greater-than sign R:-->
<!ENTITY divide "&#247;" ><!--/div B: =divide sign-->
<!ENTITY times "&#215;" ><!--/times B: =multiply sign-->
<!ENTITY curren "&#164;" ><!--=general currency sign-->
<!ENTITY pound "&#163;" ><!--=pound sign-->
<!ENTITY dollar "$" ><!--=dollar sign-->
<!ENTITY cent "&#162;" ><!--=cent sign-->
<!ENTITY yen "&#165;" ><!--/yen =yen sign-->
<!ENTITY num "#" ><!--=number sign-->
<!ENTITY percnt "&#37;" ><!--=percent sign-->
<!ENTITY amp "&#38;#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 "&#x2015;" ><!--=horizontal bar-->
<!ENTITY verbar "|" ><!--/vert =vertical bar-->
<!ENTITY rcub "}" ><!--/rbrace C: =right curly bracket-->
<!ENTITY micro "&#181;" ><!--=micro sign-->
<!ENTITY ohm "&#2126;" ><!--=ohm sign-->
<!ENTITY deg "&#176;" ><!--=degree sign-->
<!ENTITY ordm "&#186;" ><!--=ordinal indicator, masculine-->
<!ENTITY ordf "&#170;" ><!--=ordinal indicator, feminine-->
<!ENTITY sect "&#167;" ><!--=section sign-->
<!ENTITY para "&#182;" ><!--=pilcrow (paragraph sign)-->
<!ENTITY middot "&#183;" ><!--/centerdot B: =middle dot-->
<!ENTITY larr "&#x2190;" ><!--/leftarrow /gets A: =leftward arrow-->
<!ENTITY rarr "&#x2192;" ><!--/rightarrow /to A: =rightward arrow-->
<!ENTITY uarr "&#x2191;" ><!--/uparrow A: =upward arrow-->
<!ENTITY darr "&#x2193;" ><!--/downarrow A: =downward arrow-->
<!ENTITY copy "&#169;" ><!--=copyright sign-->
<!ENTITY reg "&#174;" ><!--/circledR =registered sign-->
<!ENTITY trade "&#8482;" ><!--=trade mark sign-->
<!ENTITY brvbar "&#xA6;" ><!--=bren (vertical) bar-->
<!ENTITY not "&#xAC;" ><!--/neg /lnot =not sign-->
<!ENTITY sung "&#x266A;" ><!--=music note (sung text sign)-->
<!ENTITY excl "!" ><!--=exclamation mark-->
<!ENTITY iexcl "&#xA1;" ><!--=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 "&#x2010;" ><!--=hyphen-->
<!ENTITY period "." ><!--=full stop, period-->
<!ENTITY sol "/" ><!--=solidus-->
<!ENTITY colon ":" ><!--/colon P:-->
<!ENTITY semi ";" ><!--=semicolon P:-->
<!ENTITY quest "?" ><!--=question mark-->
<!ENTITY iquest "&#xBF;" ><!--=inverted question mark-->
<!ENTITY laquo "&#x2039;" ><!--=angle quotation mark, left
But note that Unicode 1 & Maler & el Andaloussi give &#xAB; -->
<!ENTITY raquo "&#x203A;" ><!--=angle quotation mark, right
But note that Unicode 1 & Maler & el Andaloussi give &#xBB; -->
<!ENTITY lsquo "&#x2018;" ><!--=single quotation mark, left-->
<!ENTITY rsquo "&#x2019;" ><!--=single quotation mark, right-->
<!ENTITY ldquo "&#x201C;" ><!--=double quotation mark, left-->
<!ENTITY rdquo "&#x201D;" ><!--=double quotation mark, right-->
<!ENTITY nbsp "&#160;" ><!--=no break (required) space-->
<!ENTITY shy "&#173;" ><!--=soft hyphen-->

View 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 "&#x2003;" ><!--=em space-->
<!ENTITY ensp "&#x2002;" ><!--=en space (1/2-em)-->
<!ENTITY emsp13 "&#x2004;" ><!--=1/3-em space-->
<!ENTITY emsp14 "&#x2005;" ><!--=1/4-em space-->
<!ENTITY numsp "&#x2007;" ><!--=digit space (width of a number)-->
<!ENTITY puncsp "&#x2008;" ><!--=punctuation space (width of comma)-->
<!ENTITY thinsp "&#x2009;" ><!--=thin space (1/6-em)-->
<!ENTITY hairsp "&#x200A;" ><!--=hair space-->
<!ENTITY mdash "&#x2014;" ><!--=em dash-->
<!ENTITY ndash "&#x2013;" ><!--=en dash-->
<!ENTITY dash "&#x2010;" ><!--=hyphen (true graphic)-->
<!ENTITY blank "&#x2423;" ><!--=significant blank symbol-->
<!ENTITY hellip "&#x2026;" ><!--=ellipsis (horizontal)-->
<!ENTITY nldr "&#x2025;" ><!--=double baseline dot (en leader)-->
<!ENTITY frac13 "&#x2153;" ><!--=fraction one-third-->
<!ENTITY frac23 "&#x2154;" ><!--=fraction two-thirds-->
<!ENTITY frac15 "&#x2155;" ><!--=fraction one-fifth-->
<!ENTITY frac25 "&#x2156;" ><!--=fraction two-fifths-->
<!ENTITY frac35 "&#x2157;" ><!--=fraction three-fifths-->
<!ENTITY frac45 "&#x2158;" ><!--=fraction four-fifths-->
<!ENTITY frac16 "&#x2159;" ><!--=fraction one-sixth-->
<!ENTITY frac56 "&#x215a;" ><!--=fraction five-sixths-->
<!ENTITY incare "&#x2105;" ><!--=in-care-of symbol-->
<!ENTITY block "&#x2588;" ><!--=full block-->
<!ENTITY uhblk "&#x2580;" ><!--=upper half block-->
<!ENTITY lhblk "&#x2584;" ><!--=lower half block-->
<!ENTITY blk14 "&#x2591;" ><!--=25% shaded block-->
<!ENTITY blk12 "&#x2592;" ><!--=50% shaded block-->
<!ENTITY blk34 "&#x2593;" ><!--=75% shaded block-->
<!ENTITY marker "&#x25AE;" ><!--=histogram marker-->
<!ENTITY cir "&#x25CB;" ><!--/circ B: =circle, open-->
<!ENTITY squ "&#x25A1;" ><!--=square, open-->
<!ENTITY rect "&#x25AD;" ><!--=rectangle, open-->
<!ENTITY utri "&#x25B5;" ><!--/triangle =up triangle, open-->
<!ENTITY dtri "&#x25BF;" ><!--/triangledown =down triangle, open-->
<!ENTITY star "&#x2606;" ><!--=star, open-->
<!ENTITY bull "&#x2022;" ><!--/bullet B: =round bullet, filled-->
<!ENTITY squf "&#x25AA;" ><!--/blacksquare =sq bullet, filled-->
<!ENTITY utrif "&#x25B4;" ><!--/blacktriangle =up tri, filled-->
<!ENTITY dtrif "&#x25BE;" ><!--/blacktriangledown =dn tri, filled-->
<!ENTITY ltrif "&#x25C2;" ><!--/blacktriangleleft R: =l tri, filled-->
<!ENTITY rtrif "&#x25B8;" ><!--/blacktriangleright R: =r tri, filled-->
<!ENTITY clubs "&#x2663;" ><!--/clubsuit =club suit symbol-->
<!ENTITY diams "&#x2662;" ><!--/diamondsuit =diamond suit symbol-->
<!ENTITY hearts "&#x2661;" ><!--/heartsuit =heart suit symbol-->
<!ENTITY spades "&#x2660;" ><!--/spadesuit =spades suit symbol-->
<!ENTITY malt "&#x2720;" ><!--/maltese =maltese cross-->
<!ENTITY dagger "&#x2020;" ><!--/dagger B: =dagger-->
<!ENTITY Dagger "&#x2021;" ><!--/ddagger B: =double dagger-->
<!ENTITY check "&#x2713;" ><!--/checkmark =tick, check mark-->
<!ENTITY cross "&#x2717;" ><!--=ballot cross-->
<!ENTITY sharp "&#x266F;" ><!--/sharp =musical sharp-->
<!ENTITY flat "&#x266D;" ><!--/flat =musical flat-->
<!ENTITY male "&#x2642;" ><!--=male symbol-->
<!ENTITY female "&#x2640;" ><!--=female symbol-->
<!ENTITY phone "&#x26E0;" ><!--=telephone symbol-->
<!ENTITY telrec "&#x2315;" ><!--=telephone recorder symbol-->
<!ENTITY copysr "&#x2117;" ><!--=sound recording copyright sign-->
<!ENTITY caret "&#x2041;" ><!--=caret (insertion mark)-->
<!ENTITY lsquor "&#x201A;" ><!--=rising single quote, left (low)-->
<!ENTITY ldquor "&#x201E;" ><!--=rising dbl quote, left (low)-->
<!ENTITY fflig "&#xFB00;" ><!--small ff ligature-->
<!ENTITY filig "&#xFB01;" ><!--small fi ligature-->
<!ENTITY fjlig "fj" ><!--small fj ligature-->
<!ENTITY ffilig "&#xFB03;" ><!--small ffi ligature-->
<!ENTITY ffllig "&#xFB04;" ><!--small ffl ligature-->
<!ENTITY fllig "&#xFB02;" ><!--small fl ligature-->
<!ENTITY mldr "&#x2025;" ><!--em leader-->
<!ENTITY rdquor "&#x201D;" ><!--rising dbl quote, right (high)-->
<!ENTITY rsquor "&#x2019;" ><!--rising single quote, right (high)-->
<!ENTITY vellip "&#x22EE;" ><!--vertical ellipsis-->
<!ENTITY hybull "&#x2043;" ><!--rectangle, filled (hyphen bullet)-->
<!ENTITY loz "&#x2727;" ><!--/lozenge - lozenge or total mark-->
<!ENTITY lozf "&#x2726;" ><!--/blacklozenge - lozenge, filled-->
<!ENTITY ltri "&#x25C3;" ><!--/triangleleft B: l triangle, open-->
<!ENTITY rtri "&#x25B9;" ><!--/triangleright B: r triangle, open-->
<!ENTITY starf "&#x2605;" ><!--/bigstar - star, filled-->
<!ENTITY natur "&#x266E;" ><!--/natural - music natural-->
<!ENTITY rx "&#x211E;" ><!--pharmaceutical prescription (Rx)-->
<!ENTITY sext "&#x2736;" ><!--sextile (6-pointed star)-->
<!ENTITY target "&#x2316;" ><!--register mark or target-->
<!ENTITY dlcrop "&#x230D;" ><!--downward left crop mark -->
<!ENTITY drcrop "&#x230C;" ><!--downward right crop mark -->
<!ENTITY ulcrop "&#x230F;" ><!--upward left crop mark -->
<!ENTITY urcrop "&#x230E;" ><!--upward right crop mark -->

View 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 "&#x2135;" ><!--/aleph =aleph, Hebrew-->
<!ENTITY and "&#x2227;" ><!--/wedge /land B: =logical and-->
<!ENTITY ang90 "&#x221F;" ><!--=right (90 degree) angle-->
<!ENTITY angsph "&#x2222;" ><!--/sphericalangle =angle-spherical-->
<!ENTITY ap "&#x2249;" ><!--/approx R: =approximate-->
<!ENTITY becaus "&#x2235;" ><!--/because R: =because-->
<!ENTITY bottom "&#x22A5;" ><!--/bot B: =perpendicular-->
<!ENTITY cap "&#x2229;" ><!--/cap B: =intersection-->
<!ENTITY cong "&#x2245;" ><!--/cong R: =congruent with-->
<!ENTITY conint "&#x222E;" ><!--/oint L: =contour integral operator-->
<!ENTITY cup "&#x222A;" ><!--/cup B: =union or logical sum-->
<!ENTITY equiv "&#x2261;" ><!--/equiv R: =identical with-->
<!ENTITY exist "&#x2203;" ><!--/exists =at least one exists-->
<!ENTITY forall "&#x2200;" ><!--/forall =for all-->
<!ENTITY fnof "&#x192;" ><!--=function of (italic small f)-->
<!ENTITY ge "&#x2265;" ><!--/geq /ge R: =greater-than-or-equal-->
<!ENTITY iff "&#x21D4;" ><!--/iff =if and only if-->
<!ENTITY infin "&#x221E;" ><!--/infty =infinity-->
<!ENTITY int "&#x222B;" ><!--/int L: =integral operator-->
<!ENTITY isin "&#x2208;" ><!--/in R: =set membership-->
<!ENTITY lang "&#x2329;" ><!--/langle O: =left angle bracket-->
<!ENTITY lArr "&#x21D0;" ><!--/Leftarrow A: =is implied by-->
<!ENTITY le "&#x2264;" ><!--/leq /le R: =less-than-or-equal-->
<!ENTITY minus "-" ><!--B: =minus sign-->
<!ENTITY mnplus "&#x2213;" ><!--/mp B: =minus-or-plus sign-->
<!ENTITY nabla "&#x2207;" ><!--/nabla =del, Hamilton operator-->
<!ENTITY ne "&#x2260;" ><!--/ne /neq R: =not equal-->
<!ENTITY ni "&#x220B;" ><!--/ni /owns R: =contains-->
<!ENTITY or "&#x2228;" ><!--/vee /lor B: =logical or-->
<!ENTITY par "&#x2225;" ><!--/parallel R: =parallel-->
<!ENTITY part "&#x2202;" ><!--/partial =partial differential-->
<!ENTITY permil "&#x2030;" ><!--=per thousand-->
<!ENTITY perp "&#x22A5;" ><!--/perp R: =perpendicular-->
<!ENTITY prime "&#x2032;" ><!--/prime =prime or minute-->
<!ENTITY Prime "&#x2033;" ><!--=double prime or second-->
<!ENTITY prop "&#x221D;" ><!--/propto R: =is proportional to-->
<!ENTITY radic "&#x221A;" ><!--/surd =radical-->
<!ENTITY rang "&#x232A;" ><!--/rangle C: =right angle bracket-->
<!ENTITY rArr "&#x21D2;" ><!--/Rightarrow A: =implies-->
<!ENTITY sim "&#x223C;" ><!--/sim R: =similar-->
<!ENTITY sime "&#x2243;" ><!--/simeq R: =similar, equals-->
<!ENTITY square "&#x25A1;" ><!--/square B: =square-->
<!ENTITY sub "&#x2282;" ><!--/subset R: =subset or is implied by-->
<!ENTITY sube "&#x2286;" ><!--/subseteq R: =subset, equals-->
<!ENTITY sup "&#x2283;" ><!--/supset R: =superset or implies-->
<!ENTITY supe "&#x2287;" ><!--/supseteq R: =superset, equals-->
<!ENTITY there4 "&#x2234;" ><!--/therefore R: =therefore-->
<!ENTITY Verbar "&#x2016;" ><!--/Vert =dbl vertical bar-->
<!ENTITY angst "&#x212B;" ><!--Angstrom =capital A, ring-->
<!ENTITY bernou "&#x212C;" ><!--Bernoulli function (script capital B)-->
<!ENTITY compfn "&#x2218;" ><!--B: composite function (small circle)-->
<!ENTITY Dot "&#xA8;" ><!--=dieresis or umlaut mark-->
<!ENTITY DotDot "&#x20DC;" ><!--four dots above-->
<!ENTITY hamilt "&#x210B;" ><!--Hamiltonian (script capital H)-->
<!ENTITY lagran "&#x2112;" ><!--Lagrangian (script capital L)-->
<!ENTITY lowast "&#x2217;" ><!--low asterisk-->
<!ENTITY notin "&#x2209;" ><!--N: negated set membership-->
<!ENTITY order "&#x2134;" ><!--order of (script small o)-->
<!ENTITY phmmat "&#x2133;" ><!--physics M-matrix (script capital M)-->
<!ENTITY tdot "&#x20DB;" ><!--three dots above-->
<!ENTITY tprime "&#x2034;" ><!--triple prime-->
<!ENTITY wedgeq "&#x2259;" ><!--R: corresponds to (wedge, equals)-->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View 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 -->
<!-- =============================================================== -->

View File

@ -0,0 +1,112 @@
<?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 - Encryption support</title>
<authors>
<person id="maxcom" name="Maxim Valyanskiy" email="maxcom@apache.org"/>
</authors>
</header>
<body>
<section><title>Overview</title>
<p>Apache POI contains support for reading few variants of encrypted office files: </p>
<ul>
<li>XLS - RC4 Encryption</li>
<li>XML-based formats (XLSX, DOCX and etc) - AES and Agile Encryption</li>
</ul>
<p>Some "write-protected" files are encrypted with build-in password, POI can read that files too.</p>
</section>
<section><title>XLS</title>
<p>When HSSF receive encrypted file, it tries to decode it with MSOffice build-in password.
Use static method setCurrentUserPassword(String password) of org.apache.poi.hssf.record.crypto.Biff8EncryptionKey to
set password. It sets thread local variable. Do not forget to reset it to null after text extraction.
</p>
</section>
<section><title>XML-based formats - Decryption</title>
<p>XML-based formats are stored in OLE-package stream "EncryptedPackage". Use org.apache.poi.poifs.crypt.Decryptor
to decode file:</p>
<source>
EncryptionInfo info = new EncryptionInfo(filesystem);
Decryptor d = Decryptor.getInstance(info);
try {
if (!d.verifyPassword(password)) {
throw new RuntimeException("Unable to process: document is encrypted");
}
InputStream dataStream = d.getDataStream(filesystem);
// parse dataStream
} catch (GeneralSecurityException ex) {
throw new RuntimeException("Unable to process encrypted document", ex);
}
</source>
<p>If you want to read file encrypted with build-in password, use Decryptor.DEFAULT_PASSWORD.</p>
</section>
<section><title>XML-based formats - Encryption</title>
<p>Encrypting a file is similar to the above decryption process. Basically you'll need to choose between
<link href="http://msdn.microsoft.com/en-us/library/dd952186(v=office.12).aspx">standard and agile encryption</link>.
Apart of the CipherMode, the EncryptionInfo class provides further parameters to specify the cipher and
hashing algorithm to be used.</p>
<source>
POIFSFileSystem fs = new POIFSFileSystem();
EncryptionInfo info = new EncryptionInfo(fs, EncryptionMode.agile);
// EncryptionInfo info = new EncryptionInfo(fs, EncryptionMode.agile, CipherAlgorithm.aes192, HashAlgorithm.sha384, -1, -1, null);
Encryptor enc = info.getEncryptor();
enc.confirmPassword("foobaa");
OPCPackage opc = OPCPackage.open(new File("..."), PackageAccess.READ_WRITE);
OutputStream os = enc.getDataStream(fs);
opc.save(os);
opc.close();
FileOutputStream fos = new FileOutputStream("...");
fs.writeFilesystem(fos);
fos.close();
</source>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View 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 "&#180;" ><!--=acute accent-->
<!ENTITY breve "&#x2D8;" ><!--=breve-->
<!ENTITY caron "&#x2C7;" ><!--=caron-->
<!ENTITY cedil "&#184;" ><!--=cedilla-->
<!ENTITY circ "^" ><!--=circumflex accent-->
<!ENTITY dblac "&#x2DD;" ><!--=double acute accent-->
<!ENTITY die "&#168;" ><!--=dieresis-->
<!ENTITY dot "&#x2D9;" ><!--=dot above-->
<!ENTITY grave "`" ><!--=grave accent-->
<!ENTITY macr "&#175;" ><!--=macron-->
<!ENTITY ogon "&#x2DB;" ><!--=ogonek-->
<!ENTITY ring "&#x2DA;" ><!--=ring-->
<!ENTITY tilde "&#x2DC;" ><!--=tilde-->
<!ENTITY uml "&#168;" ><!--=umlaut mark-->

View 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 "&#945;" ><!--small alpha, Greek, U03B1 -->
<!ENTITY Agr "&#913;" ><!--capital Alpha, Greek, U0391 -->
<!ENTITY bgr "&#946;" ><!--small beta, Greek, U03B2 -->
<!ENTITY Bgr "&#914;" ><!--capital Beta, Greek, U0392 -->
<!ENTITY ggr "&#947;" ><!--small gamma, Greek, U03B3 -->
<!ENTITY Ggr "&#915;" ><!--capital Gamma, Greek, U0393 -->
<!ENTITY dgr "&#948;" ><!--small delta, Greek, U03B4 -->
<!ENTITY Dgr "&#916;" ><!--capital Delta, Greek, U0394 -->
<!ENTITY egr "&#949;" ><!--small epsilon, Greek, U03B5 -->
<!ENTITY Egr "&#917;" ><!--capital Epsilon, Greek, U0395 -->
<!ENTITY zgr "&#950;" ><!--small zeta, Greek, U03B6 -->
<!ENTITY Zgr "&#918;" ><!--capital Zeta, Greek, U0396 -->
<!ENTITY eegr "&#951;" ><!--small eta, Greek, U03B7 -->
<!ENTITY EEgr "&#919;" ><!--capital Eta, Greek, U0397 -->
<!ENTITY thgr "&#952;" ><!--small theta, Greek, U03B8 -->
<!ENTITY THgr "&#920;" ><!--capital Theta, Greek, U0398 -->
<!ENTITY igr "&#953;" ><!--small iota, Greek, U03B9 -->
<!ENTITY Igr "&#921;" ><!--capital Iota, Greek, U0399 -->
<!ENTITY kgr "&#954;" ><!--small kappa, Greek, U03BA -->
<!ENTITY Kgr "&#922;" ><!--capital Kappa, Greek, U039A -->
<!ENTITY lgr "&#955;" ><!--small lambda, Greek, U03BB -->
<!ENTITY Lgr "&#923;" ><!--capital Lambda, Greek, U039B -->
<!ENTITY mgr "&#956;" ><!--small mu, Greek, U03BC -->
<!ENTITY Mgr "&#924;" ><!--capital Mu, Greek, U039C -->
<!ENTITY ngr "&#957;" ><!--small nu, Greek, U03BD -->
<!ENTITY Ngr "&#925;" ><!--capital Nu, Greek, U039D -->
<!ENTITY xgr "&#958;" ><!--small xi, Greek, U03BE -->
<!ENTITY Xgr "&#926;" ><!--capital Xi, Greek, U039E -->
<!ENTITY ogr "&#959;" ><!--small omicron, Greek, U03BF -->
<!ENTITY Ogr "&#927;" ><!--capital Omicron, Greek, U039F -->
<!ENTITY pgr "&#960;" ><!--small pi, Greek, U03C0 -->
<!ENTITY Pgr "&#928;" ><!--capital Pi, Greek, U03A0 -->
<!ENTITY rgr "&#961;" ><!--small rho, Greek, U03C1 -->
<!ENTITY Rgr "&#929;" ><!--capital Rho, Greek, U03A1 -->
<!ENTITY sfgr "&#962;" ><!--final small sigma, Greek, U03C2 -->
<!ENTITY sgr "&#963;" ><!--small sigma, Greek, U03C3 -->
<!ENTITY Sgr "&#931;" ><!--capital Sigma, Greek, U03A3 -->
<!ENTITY tgr "&#964;" ><!--small tau, Greek, U03C4 -->
<!ENTITY Tgr "&#932;" ><!--capital Tau, Greek, U03A4 -->
<!ENTITY ugr "&#965;" ><!--small upsilon, Greek, U03C5 -->
<!ENTITY Ugr "&#933;" ><!--capital Upsilon, Greek, U03A5 -->
<!ENTITY phgr "&#966;" ><!--small phi, Greek, U03C6 -->
<!ENTITY PHgr "&#934;" ><!--capital Phi, Greek, U03A6 -->
<!ENTITY khgr "&#967;" ><!--small chi, Greek, U03C7 -->
<!ENTITY KHgr "&#935;" ><!--capital Chi, Greek, U03A7 -->
<!ENTITY psgr "&#968;" ><!--small psi, Greek, U03C8 -->
<!ENTITY PSgr "&#936;" ><!--capital Psi, Greek, U03A8 -->
<!ENTITY ohgr "&#969;" ><!--small omega, Greek, U03C9 -->
<!ENTITY OHgr "&#937;" ><!--capital Omega, Greek, U03A9 -->

View 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 "&#192;" ><!-- capital A, grave accent -->
<!ENTITY Aacute "&#193;" ><!-- capital A, acute accent -->
<!ENTITY Acirc "&#194;" ><!-- capital A, circumflex accent -->
<!ENTITY Atilde "&#195;" ><!-- capital A, tilde -->
<!ENTITY Auml "&#196;" ><!-- capital A, dieresis or umlaut mark -->
<!ENTITY Aring "&#197;" ><!-- capital A, ring -->
<!ENTITY AElig "&#198;" ><!-- capital AE diphthong (ligature) -->
<!ENTITY Ccedil "&#199;" ><!-- capital C, cedilla -->
<!ENTITY Egrave "&#200;" ><!-- capital E, grave accent -->
<!ENTITY Eacute "&#201;" ><!-- capital E, acute accent -->
<!ENTITY Ecirc "&#202;" ><!-- capital E, circumflex accent -->
<!ENTITY Euml "&#203;" ><!-- capital E, dieresis or umlaut mark -->
<!ENTITY Igrave "&#204;" ><!-- capital I, grave accent -->
<!ENTITY Iacute "&#205;" ><!-- capital I, acute accent -->
<!ENTITY Icirc "&#206;" ><!-- capital I, circumflex accent -->
<!ENTITY Iuml "&#207;" ><!-- capital I, dieresis or umlaut mark -->
<!ENTITY ETH "&#208;" ><!-- capital Eth, Icelandic -->
<!ENTITY Ntilde "&#209;" ><!-- capital N, tilde -->
<!ENTITY Ograve "&#210;" ><!-- capital O, grave accent -->
<!ENTITY Oacute "&#211;" ><!-- capital O, acute accent -->
<!ENTITY Ocirc "&#212;" ><!-- capital O, circumflex accent -->
<!ENTITY Otilde "&#213;" ><!-- capital O, tilde -->
<!ENTITY Ouml "&#214;" ><!-- capital O, dieresis or umlaut mark -->
<!ENTITY Oslash "&#216;" ><!-- capital O, slash -->
<!ENTITY Ugrave "&#217;" ><!-- capital U, grave accent -->
<!ENTITY Uacute "&#218;" ><!-- capital U, acute accent -->
<!ENTITY Ucirc "&#219;" ><!-- capital U, circumflex accent -->
<!ENTITY Uuml "&#220;" ><!-- capital U, dieresis or umlaut mark -->
<!ENTITY Yacute "&#221;" ><!-- capital Y, acute accent -->
<!ENTITY THORN "&#222;" ><!-- capital THORN, Icelandic -->
<!ENTITY szlig "&#223;" ><!-- small sharp s, German (sz ligature) -->
<!ENTITY agrave "&#224;" ><!-- small a, grave accent -->
<!ENTITY aacute "&#225;" ><!-- small a, acute accent -->
<!ENTITY acirc "&#226;" ><!-- small a, circumflex accent -->
<!ENTITY atilde "&#227;" ><!-- small a, tilde -->
<!ENTITY auml "&#228;" ><!-- small a, dieresis or umlaut mark -->
<!ENTITY aring "&#229;" ><!-- small a, ring -->
<!ENTITY aelig "&#230;" ><!-- small ae diphthong (ligature) -->
<!ENTITY ccedil "&#231;" ><!-- small c, cedilla -->
<!ENTITY egrave "&#232;" ><!-- small e, grave accent -->
<!ENTITY eacute "&#233;" ><!-- small e, acute accent -->
<!ENTITY ecirc "&#234;" ><!-- small e, circumflex accent -->
<!ENTITY euml "&#235;" ><!-- small e, dieresis or umlaut mark -->
<!ENTITY igrave "&#236;" ><!-- small i, grave accent -->
<!ENTITY iacute "&#237;" ><!-- small i, acute accent -->
<!ENTITY icirc "&#238;" ><!-- small i, circumflex accent -->
<!ENTITY iuml "&#239;" ><!-- small i, dieresis or umlaut mark -->
<!ENTITY eth "&#240;" ><!-- small eth, Icelandic -->
<!ENTITY ntilde "&#241;" ><!-- small n, tilde -->
<!ENTITY ograve "&#242;" ><!-- small o, grave accent -->
<!ENTITY oacute "&#243;" ><!-- small o, acute accent -->
<!ENTITY ocirc "&#244;" ><!-- small o, circumflex accent -->
<!ENTITY otilde "&#245;" ><!-- small o, tilde -->
<!ENTITY ouml "&#246;" ><!-- small o, dieresis or umlaut mark -->
<!ENTITY oslash "&#248;" ><!-- small o, slash -->
<!ENTITY ugrave "&#249;" ><!-- small u, grave accent -->
<!ENTITY uacute "&#250;" ><!-- small u, acute accent -->
<!ENTITY ucirc "&#251;" ><!-- small u, circumflex accent -->
<!ENTITY uuml "&#252;" ><!-- small u, dieresis or umlaut mark -->
<!ENTITY yacute "&#253;" ><!-- small y, acute accent -->
<!ENTITY thorn "&#254;" ><!-- small thorn, Icelandic -->
<!ENTITY yuml "&#255;" ><!-- small y, dieresis or umlaut mark -->

View 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 "&#189;" ><!--=fraction one-half-->
<!ENTITY frac12 "&#189;" ><!--=fraction one-half-->
<!ENTITY frac14 "&#188;" ><!--=fraction one-quarter-->
<!ENTITY frac34 "&#190;" ><!--=fraction three-quarters-->
<!ENTITY frac18 "&#x215B;" >
<!-- or "&#xB1;&#x202;&#x2044;&#x2088;" --><!--=fraction one-eighth-->
<!ENTITY frac38 "&#x215C;" >
<!-- or "&#xB3;&#x2044;&#x2088;" --><!--=fraction three-eighths-->
<!ENTITY frac58 "&#x215D;" >
<!-- or "&#x2075;&#x2044;&#x2088;" --><!--=fraction five-eighths-->
<!ENTITY frac78 "&#x215E;" >
<!-- or "&#x2077;&#x2044;&#x2088;" --><!--=fraction seven-eighths-->
<!ENTITY sup1 "&#185;" ><!--=superscript one-->
<!ENTITY sup2 "&#178;" ><!--=superscript two-->
<!ENTITY sup3 "&#179;" ><!--=superscript three-->
<!ENTITY plus "+" ><!--=plus sign B:-->
<!ENTITY plusmn "&#xB1;" ><!--/pm B: =plus-or-minus sign-->
<!ENTITY lt "&#38;#60;" ><!--=less-than sign R:-->
<!ENTITY equals "=" ><!--=equals sign R:-->
<!ENTITY gt ">" ><!--=greater-than sign R:-->
<!ENTITY divide "&#247;" ><!--/div B: =divide sign-->
<!ENTITY times "&#215;" ><!--/times B: =multiply sign-->
<!ENTITY curren "&#164;" ><!--=general currency sign-->
<!ENTITY pound "&#163;" ><!--=pound sign-->
<!ENTITY dollar "$" ><!--=dollar sign-->
<!ENTITY cent "&#162;" ><!--=cent sign-->
<!ENTITY yen "&#165;" ><!--/yen =yen sign-->
<!ENTITY num "#" ><!--=number sign-->
<!ENTITY percnt "&#37;" ><!--=percent sign-->
<!ENTITY amp "&#38;#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 "&#x2015;" ><!--=horizontal bar-->
<!ENTITY verbar "|" ><!--/vert =vertical bar-->
<!ENTITY rcub "}" ><!--/rbrace C: =right curly bracket-->
<!ENTITY micro "&#181;" ><!--=micro sign-->
<!ENTITY ohm "&#2126;" ><!--=ohm sign-->
<!ENTITY deg "&#176;" ><!--=degree sign-->
<!ENTITY ordm "&#186;" ><!--=ordinal indicator, masculine-->
<!ENTITY ordf "&#170;" ><!--=ordinal indicator, feminine-->
<!ENTITY sect "&#167;" ><!--=section sign-->
<!ENTITY para "&#182;" ><!--=pilcrow (paragraph sign)-->
<!ENTITY middot "&#183;" ><!--/centerdot B: =middle dot-->
<!ENTITY larr "&#x2190;" ><!--/leftarrow /gets A: =leftward arrow-->
<!ENTITY rarr "&#x2192;" ><!--/rightarrow /to A: =rightward arrow-->
<!ENTITY uarr "&#x2191;" ><!--/uparrow A: =upward arrow-->
<!ENTITY darr "&#x2193;" ><!--/downarrow A: =downward arrow-->
<!ENTITY copy "&#169;" ><!--=copyright sign-->
<!ENTITY reg "&#174;" ><!--/circledR =registered sign-->
<!ENTITY trade "&#8482;" ><!--=trade mark sign-->
<!ENTITY brvbar "&#xA6;" ><!--=bren (vertical) bar-->
<!ENTITY not "&#xAC;" ><!--/neg /lnot =not sign-->
<!ENTITY sung "&#x266A;" ><!--=music note (sung text sign)-->
<!ENTITY excl "!" ><!--=exclamation mark-->
<!ENTITY iexcl "&#xA1;" ><!--=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 "&#x2010;" ><!--=hyphen-->
<!ENTITY period "." ><!--=full stop, period-->
<!ENTITY sol "/" ><!--=solidus-->
<!ENTITY colon ":" ><!--/colon P:-->
<!ENTITY semi ";" ><!--=semicolon P:-->
<!ENTITY quest "?" ><!--=question mark-->
<!ENTITY iquest "&#xBF;" ><!--=inverted question mark-->
<!ENTITY laquo "&#x2039;" ><!--=angle quotation mark, left
But note that Unicode 1 & Maler & el Andaloussi give &#xAB; -->
<!ENTITY raquo "&#x203A;" ><!--=angle quotation mark, right
But note that Unicode 1 & Maler & el Andaloussi give &#xBB; -->
<!ENTITY lsquo "&#x2018;" ><!--=single quotation mark, left-->
<!ENTITY rsquo "&#x2019;" ><!--=single quotation mark, right-->
<!ENTITY ldquo "&#x201C;" ><!--=double quotation mark, left-->
<!ENTITY rdquo "&#x201D;" ><!--=double quotation mark, right-->
<!ENTITY nbsp "&#160;" ><!--=no break (required) space-->
<!ENTITY shy "&#173;" ><!--=soft hyphen-->

View 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 "&#x2003;" ><!--=em space-->
<!ENTITY ensp "&#x2002;" ><!--=en space (1/2-em)-->
<!ENTITY emsp13 "&#x2004;" ><!--=1/3-em space-->
<!ENTITY emsp14 "&#x2005;" ><!--=1/4-em space-->
<!ENTITY numsp "&#x2007;" ><!--=digit space (width of a number)-->
<!ENTITY puncsp "&#x2008;" ><!--=punctuation space (width of comma)-->
<!ENTITY thinsp "&#x2009;" ><!--=thin space (1/6-em)-->
<!ENTITY hairsp "&#x200A;" ><!--=hair space-->
<!ENTITY mdash "&#x2014;" ><!--=em dash-->
<!ENTITY ndash "&#x2013;" ><!--=en dash-->
<!ENTITY dash "&#x2010;" ><!--=hyphen (true graphic)-->
<!ENTITY blank "&#x2423;" ><!--=significant blank symbol-->
<!ENTITY hellip "&#x2026;" ><!--=ellipsis (horizontal)-->
<!ENTITY nldr "&#x2025;" ><!--=double baseline dot (en leader)-->
<!ENTITY frac13 "&#x2153;" ><!--=fraction one-third-->
<!ENTITY frac23 "&#x2154;" ><!--=fraction two-thirds-->
<!ENTITY frac15 "&#x2155;" ><!--=fraction one-fifth-->
<!ENTITY frac25 "&#x2156;" ><!--=fraction two-fifths-->
<!ENTITY frac35 "&#x2157;" ><!--=fraction three-fifths-->
<!ENTITY frac45 "&#x2158;" ><!--=fraction four-fifths-->
<!ENTITY frac16 "&#x2159;" ><!--=fraction one-sixth-->
<!ENTITY frac56 "&#x215a;" ><!--=fraction five-sixths-->
<!ENTITY incare "&#x2105;" ><!--=in-care-of symbol-->
<!ENTITY block "&#x2588;" ><!--=full block-->
<!ENTITY uhblk "&#x2580;" ><!--=upper half block-->
<!ENTITY lhblk "&#x2584;" ><!--=lower half block-->
<!ENTITY blk14 "&#x2591;" ><!--=25% shaded block-->
<!ENTITY blk12 "&#x2592;" ><!--=50% shaded block-->
<!ENTITY blk34 "&#x2593;" ><!--=75% shaded block-->
<!ENTITY marker "&#x25AE;" ><!--=histogram marker-->
<!ENTITY cir "&#x25CB;" ><!--/circ B: =circle, open-->
<!ENTITY squ "&#x25A1;" ><!--=square, open-->
<!ENTITY rect "&#x25AD;" ><!--=rectangle, open-->
<!ENTITY utri "&#x25B5;" ><!--/triangle =up triangle, open-->
<!ENTITY dtri "&#x25BF;" ><!--/triangledown =down triangle, open-->
<!ENTITY star "&#x2606;" ><!--=star, open-->
<!ENTITY bull "&#x2022;" ><!--/bullet B: =round bullet, filled-->
<!ENTITY squf "&#x25AA;" ><!--/blacksquare =sq bullet, filled-->
<!ENTITY utrif "&#x25B4;" ><!--/blacktriangle =up tri, filled-->
<!ENTITY dtrif "&#x25BE;" ><!--/blacktriangledown =dn tri, filled-->
<!ENTITY ltrif "&#x25C2;" ><!--/blacktriangleleft R: =l tri, filled-->
<!ENTITY rtrif "&#x25B8;" ><!--/blacktriangleright R: =r tri, filled-->
<!ENTITY clubs "&#x2663;" ><!--/clubsuit =club suit symbol-->
<!ENTITY diams "&#x2662;" ><!--/diamondsuit =diamond suit symbol-->
<!ENTITY hearts "&#x2661;" ><!--/heartsuit =heart suit symbol-->
<!ENTITY spades "&#x2660;" ><!--/spadesuit =spades suit symbol-->
<!ENTITY malt "&#x2720;" ><!--/maltese =maltese cross-->
<!ENTITY dagger "&#x2020;" ><!--/dagger B: =dagger-->
<!ENTITY Dagger "&#x2021;" ><!--/ddagger B: =double dagger-->
<!ENTITY check "&#x2713;" ><!--/checkmark =tick, check mark-->
<!ENTITY cross "&#x2717;" ><!--=ballot cross-->
<!ENTITY sharp "&#x266F;" ><!--/sharp =musical sharp-->
<!ENTITY flat "&#x266D;" ><!--/flat =musical flat-->
<!ENTITY male "&#x2642;" ><!--=male symbol-->
<!ENTITY female "&#x2640;" ><!--=female symbol-->
<!ENTITY phone "&#x26E0;" ><!--=telephone symbol-->
<!ENTITY telrec "&#x2315;" ><!--=telephone recorder symbol-->
<!ENTITY copysr "&#x2117;" ><!--=sound recording copyright sign-->
<!ENTITY caret "&#x2041;" ><!--=caret (insertion mark)-->
<!ENTITY lsquor "&#x201A;" ><!--=rising single quote, left (low)-->
<!ENTITY ldquor "&#x201E;" ><!--=rising dbl quote, left (low)-->
<!ENTITY fflig "&#xFB00;" ><!--small ff ligature-->
<!ENTITY filig "&#xFB01;" ><!--small fi ligature-->
<!ENTITY fjlig "fj" ><!--small fj ligature-->
<!ENTITY ffilig "&#xFB03;" ><!--small ffi ligature-->
<!ENTITY ffllig "&#xFB04;" ><!--small ffl ligature-->
<!ENTITY fllig "&#xFB02;" ><!--small fl ligature-->
<!ENTITY mldr "&#x2025;" ><!--em leader-->
<!ENTITY rdquor "&#x201D;" ><!--rising dbl quote, right (high)-->
<!ENTITY rsquor "&#x2019;" ><!--rising single quote, right (high)-->
<!ENTITY vellip "&#x22EE;" ><!--vertical ellipsis-->
<!ENTITY hybull "&#x2043;" ><!--rectangle, filled (hyphen bullet)-->
<!ENTITY loz "&#x2727;" ><!--/lozenge - lozenge or total mark-->
<!ENTITY lozf "&#x2726;" ><!--/blacklozenge - lozenge, filled-->
<!ENTITY ltri "&#x25C3;" ><!--/triangleleft B: l triangle, open-->
<!ENTITY rtri "&#x25B9;" ><!--/triangleright B: r triangle, open-->
<!ENTITY starf "&#x2605;" ><!--/bigstar - star, filled-->
<!ENTITY natur "&#x266E;" ><!--/natural - music natural-->
<!ENTITY rx "&#x211E;" ><!--pharmaceutical prescription (Rx)-->
<!ENTITY sext "&#x2736;" ><!--sextile (6-pointed star)-->
<!ENTITY target "&#x2316;" ><!--register mark or target-->
<!ENTITY dlcrop "&#x230D;" ><!--downward left crop mark -->
<!ENTITY drcrop "&#x230C;" ><!--downward right crop mark -->
<!ENTITY ulcrop "&#x230F;" ><!--upward left crop mark -->
<!ENTITY urcrop "&#x230E;" ><!--upward right crop mark -->

View 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 "&#x2135;" ><!--/aleph =aleph, Hebrew-->
<!ENTITY and "&#x2227;" ><!--/wedge /land B: =logical and-->
<!ENTITY ang90 "&#x221F;" ><!--=right (90 degree) angle-->
<!ENTITY angsph "&#x2222;" ><!--/sphericalangle =angle-spherical-->
<!ENTITY ap "&#x2249;" ><!--/approx R: =approximate-->
<!ENTITY becaus "&#x2235;" ><!--/because R: =because-->
<!ENTITY bottom "&#x22A5;" ><!--/bot B: =perpendicular-->
<!ENTITY cap "&#x2229;" ><!--/cap B: =intersection-->
<!ENTITY cong "&#x2245;" ><!--/cong R: =congruent with-->
<!ENTITY conint "&#x222E;" ><!--/oint L: =contour integral operator-->
<!ENTITY cup "&#x222A;" ><!--/cup B: =union or logical sum-->
<!ENTITY equiv "&#x2261;" ><!--/equiv R: =identical with-->
<!ENTITY exist "&#x2203;" ><!--/exists =at least one exists-->
<!ENTITY forall "&#x2200;" ><!--/forall =for all-->
<!ENTITY fnof "&#x192;" ><!--=function of (italic small f)-->
<!ENTITY ge "&#x2265;" ><!--/geq /ge R: =greater-than-or-equal-->
<!ENTITY iff "&#x21D4;" ><!--/iff =if and only if-->
<!ENTITY infin "&#x221E;" ><!--/infty =infinity-->
<!ENTITY int "&#x222B;" ><!--/int L: =integral operator-->
<!ENTITY isin "&#x2208;" ><!--/in R: =set membership-->
<!ENTITY lang "&#x2329;" ><!--/langle O: =left angle bracket-->
<!ENTITY lArr "&#x21D0;" ><!--/Leftarrow A: =is implied by-->
<!ENTITY le "&#x2264;" ><!--/leq /le R: =less-than-or-equal-->
<!ENTITY minus "-" ><!--B: =minus sign-->
<!ENTITY mnplus "&#x2213;" ><!--/mp B: =minus-or-plus sign-->
<!ENTITY nabla "&#x2207;" ><!--/nabla =del, Hamilton operator-->
<!ENTITY ne "&#x2260;" ><!--/ne /neq R: =not equal-->
<!ENTITY ni "&#x220B;" ><!--/ni /owns R: =contains-->
<!ENTITY or "&#x2228;" ><!--/vee /lor B: =logical or-->
<!ENTITY par "&#x2225;" ><!--/parallel R: =parallel-->
<!ENTITY part "&#x2202;" ><!--/partial =partial differential-->
<!ENTITY permil "&#x2030;" ><!--=per thousand-->
<!ENTITY perp "&#x22A5;" ><!--/perp R: =perpendicular-->
<!ENTITY prime "&#x2032;" ><!--/prime =prime or minute-->
<!ENTITY Prime "&#x2033;" ><!--=double prime or second-->
<!ENTITY prop "&#x221D;" ><!--/propto R: =is proportional to-->
<!ENTITY radic "&#x221A;" ><!--/surd =radical-->
<!ENTITY rang "&#x232A;" ><!--/rangle C: =right angle bracket-->
<!ENTITY rArr "&#x21D2;" ><!--/Rightarrow A: =implies-->
<!ENTITY sim "&#x223C;" ><!--/sim R: =similar-->
<!ENTITY sime "&#x2243;" ><!--/simeq R: =similar, equals-->
<!ENTITY square "&#x25A1;" ><!--/square B: =square-->
<!ENTITY sub "&#x2282;" ><!--/subset R: =subset or is implied by-->
<!ENTITY sube "&#x2286;" ><!--/subseteq R: =subset, equals-->
<!ENTITY sup "&#x2283;" ><!--/supset R: =superset or implies-->
<!ENTITY supe "&#x2287;" ><!--/supseteq R: =superset, equals-->
<!ENTITY there4 "&#x2234;" ><!--/therefore R: =therefore-->
<!ENTITY Verbar "&#x2016;" ><!--/Vert =dbl vertical bar-->
<!ENTITY angst "&#x212B;" ><!--Angstrom =capital A, ring-->
<!ENTITY bernou "&#x212C;" ><!--Bernoulli function (script capital B)-->
<!ENTITY compfn "&#x2218;" ><!--B: composite function (small circle)-->
<!ENTITY Dot "&#xA8;" ><!--=dieresis or umlaut mark-->
<!ENTITY DotDot "&#x20DC;" ><!--four dots above-->
<!ENTITY hamilt "&#x210B;" ><!--Hamiltonian (script capital H)-->
<!ENTITY lagran "&#x2112;" ><!--Lagrangian (script capital L)-->
<!ENTITY lowast "&#x2217;" ><!--low asterisk-->
<!ENTITY notin "&#x2209;" ><!--N: negated set membership-->
<!ENTITY order "&#x2134;" ><!--order of (script small o)-->
<!ENTITY phmmat "&#x2133;" ><!--physics M-matrix (script capital M)-->
<!ENTITY tdot "&#x20DB;" ><!--three dots above-->
<!ENTITY tprime "&#x2034;" ><!--triple prime-->
<!ENTITY wedgeq "&#x2259;" ><!--R: corresponds to (wedge, equals)-->

View File

@ -0,0 +1,393 @@
<?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 feature, compiles fine but fails when live with a "MethodNotFoundException" or "IncompatibleClassChangeError"
</question>
<answer>
<p>You almost certainly have an older version of POI
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 your 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 prior answer.</p>
</answer>
</faq>
<faq>
<question>
I'm using the poi-ooxml-schemas jar, but my code is failing with "java.lang.NoClassDefFoundError: org/openxmlformats/schemas/*something*"
</question>
<answer>
<p>To use the new OOXML file formats, POI requires a jar containing
the file format XSDs, as compiled by
<link href="http://xmlbeans.apache.org/">XMLBeans</link>. These
XSDs, once compiled into Java classes, live in the
<em>org.openxmlformats.schemas</em> namespace.</p>
<p>There are two jar files available, as described in
<link href="/overview.html">the components overview section</link>.
The <em>full jar of all of the schemas is ooxml-schemas-1.1.jar</em>,
and it is currently around 15mb. The <em>smaller poi-ooxml-schemas
jar</em> is only about 4mb. This latter jar file only contains the
typically used parts though.</p>
<p>Many users choose to use the smaller poi-ooxml-schemas jar to save
space. However, the poi-ooxml-schemas jar only contains the XSDs and
classes that are typically used, as identified by the unit tests.
Every so often, you may try to use part of the file format which
isn't included in the minimal poi-ooxml-schemas jar. In this case,
you should switch to the full ooxml-schemas-1.1.jar. Longer term,
you may also wish to submit a new unit test which uses the extra
parts of the XSDs, so that a future poi-ooxml-schemas jar will
include them.</p>
<p>There are a number of ways to get the full ooxml-schemas-1.1.jar.
If you are a maven user, see the
<link href="/overview.html">the components overview section</link>
for the artifact details to have maven download it for you.
If you download the source release of POI, and/or checkout the
source code from <link href="/subversion.html">subversion</link>,
then you can run the ant task "compile-ooxml-xsds" to have the
OOXML schemas downloaded and compiled for you (This will also
give you the XMLBeans generated source code, in case you wish to
look at this). Finally, you can download the jar by hand from the
<link href="http://www.ibiblio.org/maven/org.apache.poi/jars/">POI
Maven Repository</link>.</p>
<p>Note that for POI 3.5 and 3.6, the full ooxml schemas jar was
named ooxml-schemas-1.0.jar. For POI 3.7, the filename was bumped
to ooxml-schemas-1.1.jar when generics support was added. You can
use ooxml-schemas-1.1.jar with POI 3.5 and 3.6 if you wish, but
POI 3.7 won't wokr with ooxml-schemas-1.0.jar (it needs thew newer
one).</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
autopsy 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 SS eventmodel package is an API for reading Excel files without loading the whole spreadsheet into memory. 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, 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 POI.
If you encounter this then please create the simplest file that demonstrates the trouble and submit it to
<link href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI">Bugzilla.</link></p>
</answer>
</faq>
<faq>
<question>
How do you tell if a spreadsheet cell contains a date?
</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 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&amp;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 DataFormat object from the workbook and call getFormat with the desired format. Some examples are <link href="spreadsheet/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 DataFormat 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 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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>
I can't seem to find the source for the OOXML CT.. classes, where do they
come from?
</question>
<answer>
<p>The OOXML support in Apache POI is built on top of the file format
XML Schemas, as compiled into Java using
<link href="http://xmlbeans.apache.org/">XMLBeans</link>. Currently,
the compilation is done with XMLBeans 2.3, for maximum compatibility
with installations. (You can use the resulting classes on the XMLBeans
2.3 runtime, or any later version of XMLBeans. If you are currently using
XMLBeans 2.2 or earlier, you will unfortunately have to upgrade, but this
isn't common any more).</p>
<p>All of the <em>org.openxmlformats.schemas.spreadsheetml.x2006</em> CT...
classes are auto-generated by XMLBeans. The resulting generated Java goes
in the <em>ooxml-schemas-src</em> jar, and the compiled version into the
<em>ooxml-schemas</em> jar.</p>
<p>The full <em>ooxml-schemas</em> jar is distributed with Apache POI,
along with the cut-down <em>poi-ooxml-schemas</em> jar containing just
the common parts. The source jar isn't normally distributed with POI.
It is, however, available from Maven Central - ask your favourite Maven
mirror for the <em>ooxml-schemas-src</em> jar. Alternately, if you download
the POI source distribution (or checkout from SVN) and build, Ant will
automatically download the specification XML Schema, and compile it for
you to generate the source and binary ooxml-schemas jars.</p>
</answer>
</faq>
<faq>
<question>
An OLE2 ("binary") file is giving me problems, but I can't share it. How can I investigate the problem on my own?
</question>
<answer>
<p>The first thing to try is running the
<link href="http://blogs.msdn.com/b/officeinteroperability/archive/2011/07/12/microsoft-office-binary-file-format-validator-is-now-available.aspx">Binary File Format Validator</link>
from Microsoft against the file, which will report if the file
complies with the specification. If your input file doesn't, then this
may well explain why POI isn't able to process it correctly. You
should probably in this case speak to whoever is generating the file,
and have them fix it there. If your POI generated file is identified
as having an issue, and you're on the
<link href="/howtobuild.html">latest codebase</link>, report a new
POI bug and include the details of the validation failure.</p>
<p>Another thing to try, especially if the file is valid but POI isn't
behaving as expected, are the POI Dev Tools for the component you're
using. For example, HSSF has <em>org.apache.poi.hssf.dev.BiffViewer</em>
which will allow you to view the file as POI does. This will often
allow you to check that things are being read as you expect, and
narrow in on problem records and structures.</p>
</answer>
</faq>
<faq>
<question>
An OOXML ("xml") file is giving me problems, but I can't share it. How can I investigate the problem on my own?
</question>
<answer>
<p>There's not currently a simple validator tool as there is for the
OLE2 based (binary) file formats, but checking the basics of a file
is generally much easier.</p>
<p>Files such as .xlsx, .docx and .pptx are actually a zip file of XML
files, with a special structure. Your first step in diagnosing the
issues with the input or output file will likely be to unzip the
file, and look at the XML of it. Newer versions of Office will
normally tell you which area of the file is problematic, so
narrow in on there. Looking at the XML, does it look correct?</p>
<p>When reporting bugs, ideally include the whole file, but if you're
unable to then include the snippet of XML for the problem area, and
reference the OOXML standard for what it should contain.</p>
</answer>
</faq>
</faqs>

View File

@ -0,0 +1,329 @@
<?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>Apache POI - Contribution Guidelines</title>
<authors>
<person name="Nick Burch" email="dev@poi.apache.org"/>
<person name="David Fisher" email="dev@poi.apache.org"/>
</authors>
</header>
<body>
<section><title>Index of Contribution Guidelines</title>
<ul>
<li><link href="#Introduction">Introduction</link></li>
<li><link href="#GetInvolved">I just want to get involved, but don't know where to start?</link></li>
<li><link href="#SubmittingPatches">Submitting Patches</link></li>
<li><link href="#CodeStyle">Code Style</link></li>
<li><link href="#Mentoring">Mentoring and Committership</link></li>
</ul>
</section>
<anchor id="Introduction"/>
<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/license-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/license-FAQ.html">
Apache Software License</link>.
</p>
<p>
You can download the documentation on Excel, Word, PowerPoint and
Escher (drawing) from
<link href="http://msdn.microsoft.com/en-us/library/cc313118.aspx">http://msdn.microsoft.com/en-us/library/cc313118.aspx</link>.
Documentation on a few of the supporting technologies used in these
file formats can be downloaded from
<link href="http://msdn.microsoft.com/en-us/library/jj633110.aspx">http://msdn.microsoft.com/en-us/library/jj633110.aspx</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. Most of this Public
Information currently comes from the documentation that Microsoft
makes freely available (see above). The rest of the 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
received such information from a person bound by such an agreement, you
cannot participate in this project. Sorry. Well, unless you can persuade
Microsoft to release you from the terms of the NDA on the grounds that
most of the information is now publically available. However, if you have
been party to a Microsoft NDA, you will need to get clearance from Microsoft
before contributing.
</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, and have only made us of the public documentation.
</p>
</section>
</section>
<anchor id="GetInvolved"/>
<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 <link href="mailinglists.html">mailing lists</link> 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>Contribute examples - if there's something people are often asking about on the <link href="mailinglists.html">user list</link> which isn't covered in the documentation or current examples, try writing an example of this and uploading it as a patch.</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>Check the <link href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI">bug database</link> for simple problem reports, and write a patch to fix the problem</li>
<li>Review existing patches in the <link href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI">bug database</link>, and report if they still apply, if they need unit tests atc.</li>
<li>Take a look at all the <link href="https://issues.apache.org/bugzilla/buglist.cgi?product=POI;bug_status=NEW;bug_status=NEEDINFO">unresolved issues in the bug database</link>, and see if you can help with testing or patches for them</li>
<li>Add in new features, see <link href="http://issues.apache.org/bugzilla/buglist.cgi?product=POI">Bug database</link> for suggestions.</li>
</ul>
<p>The Apache <link href="http://www.apache.org/dev/contributors.html">Contributors Tech Guide</link> gives a good overview how to start contributing patches.</p>
<p>The Nutch project also have a very useful guide on becoming a
new developer in their project. While it is written for their project,
a large part of it will apply to POI too. You can read it at
<link href="http://wiki.apache.org/nutch/Becoming_A_Nutch_Developer">http://wiki.apache.org/nutch/Becoming_A_Nutch_Developer</link>. The
<link href="http://community.apache.org/">Apache Community Development
Project</link> also provides guidance and mentoring for new contributors.</p>
</section>
<anchor id="SubmittingPatches"/>
<section><title>Submitting Patches</title>
<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>
Ideally, patches should be submitted early and often. This is for
two key reasons. Firstly, it's much easier to review smaller patches
than large ones. This means that smaller patches are much more likely
to be applied to SVN in a timely fashion. Secondly, by sending in your
patches earlier rather than later, it's much easier to get feedback
on your coding and direction. If you've missed an easier way to do something,
or are duplicating some (probably hidden) existing code, or taking things
in an unusual direction, it's best to get the feedback sooner rather than
later! As such, when submitting patches to POI, as with other Apache
Software Foundation projects, do please try to submit early and often, rather
than "throwing a large patch over the wall" at the end.
</p>
<p>
A number of Apache projects provide far more comprehensive guides to producing
and submitting patches than we do, you may wish to review some of their
information if you're unsure. The
<link href="http://commons.apache.org/patches.html">Apache Commons</link> one
is fairly similar as a starting point.
</p>
<p>You may create your patch file using either of the following approaches (the committers recommend the first):</p>
<section><title>Approach 1 - use Ant</title>
<p>Use Ant to generate a patch file to POI: </p>
<source>
ant -f patch.xml
</source>
<p>
This will create a file named patch.tar.gz that will contain a unified diff of files that have been modified
and also include files that have been added. Review the file for completeness and correctness. This approach
is recommended because it standardizes the way in which patch files are constructed. It also eliminates the
chance of you missing to submit new files that constitute part of the patch.
</p>
</section>
<section><title>Approach 2 - the manual way</title>
<p>
Patches to existing files should be generated with svn diff filename and save the output to a file.
if you want to get the changes made to multiple files in a directory , just use svn diff.
then, tar and gzip the patch file as well as any new files that you have added.
</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>
<section><title>checklist before submitting a patch</title>
<ul>
<li>added code complies with <link href="#CodeStyle">coding standards</link></li>
<li>added code compiles and runs on java 1.5</li>
<li>new java files begin with the <link href="http://www.apache.org/foundation/license-faq.html">
apache software license</link> statement.</li>
<li>the code does not depend on gpl or lgpl code.</li>
<li>the code doesn't include @author tags</li>
<li>existing test cases succeed.</li>
<li>new test cases written and succeed.</li>
<li>documentation page extended as appropriate.</li>
<li>diff files generated using svn diff</li>
<li>the bugzilla subject dev contains [patch], task name and patch reason in subject.</li>
<li>the bugzilla description contains a rationale for the patch.</li>
<li>attachment to the bugzilla entry contains the patch file(s).</li>
</ul>
</section>
</section>
<anchor id="CodeStyle"/>
<section><title>Code Style</title>
<p>The long standing
<link href="http://poi.apache.org/resolutions/res001.html">Minimal
Coding Standards</link> from 2002 still largely apply to the project.</p>
<p>When making changes to an existing file, please try to follow the
same style that that file already uses. This will keep things
looking similar, and will prevent patches becoming largely about
whitespace. Whitespace fixing changes, if needed, should normally be
in their own commit, so that they don't crowd out coding changes
in review.</p>
<p>Normally, tabs should not be used to indent code. Instead, spaces
should be used. If starting on a fresh file, please use 4 spaces to
indent your code. If working on an existing file, please use
whichever of 3 or 4 spaces that file already follows.</p>
<p>Normally, braces should open on the same line as the decision
statement. Braces should normally close on their own line. Brackets
should normally have a space before them when they are the first.</p>
<p>Lines normally shouldn't be too long. There's no hard and fast rule,
but if you line is getting above about 90 characters think about
splitting it, and you should rarely create something over about 100
characters without a very good reason!</p>
</section>
<anchor id="Mentoring"/>
<section><title>Mentoring and Committership</title>
<p>The POI project will generally offer committership to contributors who send
in consistently good patches over a period of several months.</p>
<p>The requirement for "good patches" generally means patches which can be applied
to SVN with little or no changes. These patches should include unit test, and
appropriate documentation. Whilst your first patch to POI may require quite a
bit of work before it can be committed by an existing committer, with any luck
your later patches will be applied with no / minor tweaks. Please do take note
of any changes required by your earlier patches, to learn for later ones! If
in doubt, ask on the <link href="mailinglists.html">dev mailing list</link>.</p>
<p>The requirement for patches over several months is to ensure that committers
remain with the project. It's very easy for a good developer to fire off half
a dozen good patches in the couple of weeks that they're working on a POI
powered project. However, if that developer then moves away, and stops
contributing to POI after that spurt, then they're not a good candidate for
committership. As such, we generally require people to stay around for a while,
submitting patches and helping on the mailing list before considering them
for committership.</p>
<p>Where possible, patches should be submitted early and often. For more details
on this, please see the "Submitting Patches" section above.</p>
<p>Where possible, the existing developers will try to help and mentor new
contributors. However, everyone involved in POI is a volunteer, and it may
happen that your first few patches come in at a time when all the committers
are very busy. Do please have patience, and remember to use the
<link href="mailinglists.html">dev mailing list</link> so that other
contributors can assist you!</p>
<p>For more information on getting started at Apache, mentoring, and local
Apache Committers near you who can offer advice, please see the
<link href="http://community.apache.org/">Apache Community Development
Project</link> website.</p>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View 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="HDGF"
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>

View File

@ -0,0 +1,101 @@
<?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://web.archive.org/web/20071212220759/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://web.archive.org/web/20071212220759/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 - works for small streams but encoding
goes wrong on larger ones</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>

View File

@ -0,0 +1,158 @@
<?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.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View 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="HMEF"
copyright="@year@ POI Project">
<menu label="Apache POI">
<menu-item label="Top" href="../index.html"/>
</menu>
<menu label="HMEF">
<menu-item label="Overview" href="index.html"/>
</menu>
</book>

View File

@ -0,0 +1,212 @@
<?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-HMEF - Java API To Access Microsoft Transport Neutral Encoding Files (TNEF)</title>
<subtitle>Overview</subtitle>
<authors>
<person name="Nick Burch" email="nick at apache dot org"/>
</authors>
</header>
<body>
<section>
<title>Overview</title>
<p>HMEF is the POI Project's pure Java implementation of Microsoft's
TNEF (Transport Neurtral Encoding Format), aka winmail.dat,
which is used by Outlook and Exchange in some situations.</p>
<p>Currently, HMEF provides a read-only api for accessing common
message and attachment attributes, including the message body
and attachment files. In addition, it's possible to have
read-only access to all of the underlying TNEF and MAPI
attributes of the message and attachments.</p>
<p>HMEF also provides a command line tool for extracting out
the message body and attachment files from a TNEF (winmail.dat)
file.</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>
<note>
This code is a new POI feature, and the first release that will
contain it will be POI 3.8 beta 2. Until then, you will need to
build your own jars from a <link href="../subversion.html">svn
checkout</link>.
</note>
</section>
<section>
<title>Using HMEF to access TNEF (winmail.dat) files</title>
<section>
<title>Easy extraction of message body and attachment files</title>
<p>The class <em>org.apache.poi.hmef.extractor.HMEFContentsExtractor</em>
provides both command line and Java extraction. It allows the
saving of the message body (an RTF file), and all of the
attachment files, to a single directory as specified.</p>
<p>From the command line, simply call the class specifying the
TNEF file to extract, and the directory to place the extracted
files into, eg:</p>
<source>
java -classpath poi-3.8-FINAL.jar:poi-scratchpad-3.8-FINAL.jar org.apache.poi.hmef.extractor.HMEFContentsExtractor winmail.dat /tmp/extracted/
</source>
<p>From Java, there are two method calls on the class, one to
extract the message body RTF to a file, and the other to extract
all the attachments to a directory. A typical use would be:</p>
<source>
public void extract(String winmailFilename, String directoryName) throws Exception {
HMEFContentsExtractor ext = new HMEFContentsExtractor(new File(winmailFilename));
File dir = new File(directoryName);
File rtf = new File(dir, "message.rtf");
if(! dir.exists()) {
throw new FileNotFoundException("Output directory " + dir.getName() + " not found");
}
System.out.println("Extracting...");
ext.extractMessageBody(rtf);
ext.extractAttachments(dir);
System.out.println("Extraction completed");
}
</source>
</section>
<section>
<title>Attachment attributes and contents</title>
<p>To get at your attachments, simply call the
<em>getAttachments()</em> method on a <em>HMEFMessage</em>
instance, and you'll receive a list of all the attachments.</p>
<p>When you have a <em>org.apache.poi.hmef.Attachment</em> object,
there are several helper methods available. These will all
return the value of the appropriate underlying attachment
attributes, or null if for some reason the attribute isn't
present in your file.</p>
<ul>
<li><em>getFilename()</em> - returns the name of the attachment
file, possibly in 8.3 format</li>
<li><em>getLongFilename()</em> - returns the full name of the
attachment file</li>
<li><em>getExtension()</em> - returns the extension of the
attachment file, including the "."</li>
<li><em>getModifiedDate()</em> - returns the date that the
attachment file was last edited on</li>
<li><em>getContents()</em> - returns a byte array of the contents
of the attached file</li>
<li><em>getRenderedMetaFile()</em> - returns a byte array of
a windows meta file representation of the attached file</li>
</ul>
</section>
<section>
<title>Message attributes and message body</title>
<p>A <em>org.apache.poi.hmef.HMEFMessage</em> instance is created
from an <em>InputStream</em> of the underlying TNEF (winmail.dat)
file.</p>
<p>From a <em>HMEFMessage</em>, there are three main methods of
interest to call:</p>
<ul>
<li><em>getBody()</em> - returns a String containing the RTF
contents of the message body. </li>
<li><em>getSubject()</em> - returns the message subject</li>
<li><em>getAttachments()</em> - returns the list of
<em>Attachment</em> objects for the message</li>
</ul>
</section>
<section>
<title>Low level attribute access</title>
<p>Both Messages and Attachments contain two kinds of attributes.
These are <em>TNEFAttribute</em> and <em>MAPIAttribute</em>.</p>
<p>TNEFAttribute is specific to TNEF files in terms of the
available types and properties. In general, Attachments have a
few more useful ones of these then Messages.</p>
<p>MAPIAttributes hold standard MAPI properties and values, and
work in a similar way to <link href="../hsmf/">HSMF
(Outlook)</link> does. There are typically many of these on both
Messages and Attachments. <em>Note - see limitations</em></p>
<p>Both <em>HMEFMessage</em> and <em>Attachment</em> supports
support two different ways of getting to attributes of interest.
Firstly, they support list getters, to return all attributes
(either TNEF or MAPI). Secondly, they support specific getters by
TNEF or MAPI property.</p>
<source>
HMEFMessage msg = new HMEFMessage(new FileInputStream(file));
for(TNEFAttribute attr : msg.getMessageAttributes) {
System.out.println("TNEF : " + attr);
}
for(MAPIAttribute attr : msg.getMessageMAPIAttributes) {
System.out.println("MAPI : " + attr);
}
System.out.println("Subject is " + msg.getMessageMAPIAttribute(MAPIProperty.CONVERSATION_TOPIC));
for(Attachment attach : msg.getAttachments()) {
for(TNEFAttribute attr : attach.getAttributes) {
System.out.println("A.TNEF : " + attr);
}
for(MAPIAttribute attr : attach.getMAPIAttributes) {
System.out.println("A.MAPI : " + attr);
}
System.out.println("Filename is " + attach.getAttribute(TNEFProperty.CID_ATTACHTITLE));
System.out.println("Extension is " + attach.getMAPIAttribute(MAPIProperty.ATTACH_EXTENSION));
}
</source>
</section>
</section>
<section>
<title>Investigating a TNEF file</title>
<p>To get a feel for the contents of a file, and to track down
where data of interest is stored, HMEF comes with
<link href="http://svn.apache.org/repos/asf/poi/trunk/src/scratchpad/src/org/apache/poi/hmef/dev/">HMEFDumper</link>
to print out the contents of the file.</p>
</section>
<section>
<title>Limitations</title>
<p>HMEF is currently a work-in-progress, and not everything
works yet. The current limitations are:</p>
<ul>
<li>Non-standard MAPI properties from the range 0x8000 to 0x8fff
may not be being quite correctly turned into attributes.
The values show up, but the name and type may not always
be correct.</li>
<li>All testing so far has been performed on a small number of
English documents. We think we're correctly turning bytes into
Java unicode strings, but we need a few non-English sample
files in the test suite to verify this!</li>
</ul>
</section>
</body>
</document>

View File

@ -0,0 +1,125 @@
<?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 - How To Build</title>
<authors>
<person email="user@poi.apache.org" name="Glen Stampoultzis" id="GS"/>
<person email="tetsuya@apache.org" name="Tetsuya Kitahata" id="TK"/>
<person email="dfisher@jmlafferty.com" name="David Fisher" id="DF"/>
</authors>
</header>
<body>
<section>
<title>JDK Version</title>
<p>
POI 3.5 and later requires the JDK version 1.5 or later.
Versions prior to 3.5 require JDK 1.4+
</p>
</section>
<section>
<title>Install Apache Ant</title>
<p>
The POI build system requires <link href="http://ant.apache.org/bindownload.cgi">Apache Ant</link>
</p>
<p>
Specifically the build has been tested to work with Ant version
1.7.1. To install the product download the distribution and follow the instructions.
</p>
<p>
Remember to set the ANT_HOME environment variable and add ANT_HOME/bin
to your shell's PATH.
</p>
</section>
<section>
<title>Install JUnit</title>
<p>
Running unit tests and building a distribution requires <link href="http://www.junit.org/">JUnit</link>.
</p>
<p>
Just pick the latest versions of the jars from
<link href="http://sourceforge.net/projects/junit/files/junit/">SourceForge</link> and place
them in ANT_HOME/lib. Make sure that optional.jar is in ANT_HOME/lib.
</p>
</section>
<section>
<title>Install Apache Forrest</title>
<p>
The POI build system requires <link href="http://forrest.apache.org/">Apache Forrest</link> to build the documentation.
</p>
<p>
Specifically the build has been tested to work with Forrest 0.5. This is an old release which is available
<link href="http://archive.apache.org/dist/forrest/pre-0.6/">here</link>.
</p>
<p>
Remember to set the FORREST_HOME environment variable.
</p>
</section>
<section>
<title>Building Targets with Ant</title>
<p>
The main targets of interest to our users are:
</p>
<table>
<tr>
<th>Ant 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, ooxml and scratchpad</td>
</tr>
<tr>
<td>test</td>
<td>Run all unit tests from main, ooxml and scratchpad</td>
</tr>
<tr>
<td>jar</td>
<td>Produce jar files</td>
</tr>
<tr>
<td>assemble</td>
<td>Produce .zip and tar.gz distribution packages</td>
</tr>
<tr>
<td>docs</td>
<td>Generate all documentation (Requires Apache Forrest)</td>
</tr>
</table>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View File

@ -0,0 +1,35 @@
<?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="HPBF"
copyright="@year@ POI Project">
<menu label="Apache POI">
<menu-item label="Top" href="../index.html"/>
</menu>
<menu label="HPBF">
<menu-item label="Overview" href="index.html"/>
<menu-item label="File Format" href="file-format.xml"/>
</menu>
</book>

View 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 &lt;(0x05)SummaryInformation&gt;
DocumentSummaryInformation &lt;(0x05)DocumentSummaryInformation&gt;
Escher -
EscherStm
EscherDelayStm
Quill -
QuillSub -
CONTENTS
CompObj &lt;(0x01)CompObj&gt;
Envelope
Contents
Internal &lt;(0x03)Internal&gt;
CompObj &lt;(0x01)CompObj&gt;
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>

View File

@ -0,0 +1,66 @@
<?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
Publisher 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>Text Extraction is available via the
<em>org.apache.poi.hpbf.extractor.PublisherTextExtractor</em>
class.</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>

View File

@ -0,0 +1,36 @@
<?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="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>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,74 @@
<?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>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:
-->

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,199 @@
<?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>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&copy; 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:
-->

View File

@ -0,0 +1,77 @@
<?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>To Do</title>
<authors>
<person name="Rainer Klute" email="klute@rainer-klute.de"/>
</authors>
</header>
<body>
<section><title>To Do</title>
<p>The following functionalities should be added to HPFS:</p>
<ol>
<li>
Improve writing support! We need convenience classes and methods for
easily writing summary information streams and document summary
information streams.
</li>
<li>
Add resource bundles to
<code>org.apache.poi.hpsf.wellknown</code> to ease
localizations. This would be useful for mapping standard property IDs to
localized strings. Example: The property ID 4 could be mapped to "Author"
in English or "Verfasser" in German.
</li>
<li>
Implement reading functionality for those property types that are not
yet supported. HPSF should return proper Java types instead of just byte
arrays.
</li>
<li>
Add WMF to <code>java.awt.Image</code> example code in the <link
href="thumbnails.html">Thumbnail HOW-TO</link>.
</li>
</ol>
</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:
-->

View 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="HSMF"
copyright="@year@ POI Project">
<menu label="Apache POI">
<menu-item label="Top" href="../index.html"/>
</menu>
<menu label="HSMF">
<menu-item label="Overview" href="index.html"/>
</menu>
</book>

View File

@ -0,0 +1,55 @@
<?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-HSMF - Java API To Access Microsoft Outlook MSG Files</title>
<subtitle>Overview</subtitle>
<authors>
<person name="Nick Burch" email="nick at apache dot org"/>
<person name="Travis Ferguson" email="uniformstupidity at gmail dot com"/>
</authors>
</header>
<body>
<section>
<title>Overview</title>
<p>HSMF is the POI Project's pure Java implementation of the Outlook MSG format.</p>
<p>At this time, it provides low-level read access to all of the file, along
with a user-facing way to get at the common textual content of MSG files.
to all</p>
<p>There is an example MSG textual renderer, which shows how to access the
common parts such as sender, subject, message body and examples. This is
in the
<link href="http://svn.apache.org/viewcvs.cgi/poi/trunk/src/examples/src/org/apache/poi/hsmf/examples/">HSMF examples area</link>
of SVN. You may also wish to look at the unit tests for more use guides.</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>

View File

@ -0,0 +1,31 @@
<?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="HWPF" copyright="@year@ POI Project">
<menu label="Apache POI">
<menu-item label="Top" href="../index.html"/>
</menu>
<menu label="HWPF">
<menu-item label="Overview" href="index.html"/>
<menu-item label="Quick Guide" href="quick-guide.html"/>
<menu-item label="HWPF Format" href="docoverview.html"/>
<menu-item label="HWPF Project plan" href="projectplan.html"/>
</menu>
</book>

View File

@ -0,0 +1,113 @@
<?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>Apache POI - HWPF - Java API to Handle Microsoft Word Files</title>
<subtitle>Word File Format</subtitle>
<authors>
<person name="S. Ryan Ackley" email="sackley@cfl.rr.com"/>
</authors>
</header>
<body>
<section><title>The Word 97 File Format in semi-plain English</title>
<p>The purpose of this document is to give a brief high level overview of the
HWPF document format. This document does not go into in-depth technical
detail and is only meant as a supplement to the Microsoft Word 97-2007
Binary File Format freely available from
<link href="http://www.microsoft.com/interop/docs/officebinaryformats.mspx">Microsoft</link>.</p>
<p>The OLE file format is not discussed in this document. It is assumed that
the reader has a working knowledge of the POIFS API. </p>
<section><title>Word file structure</title>
<p>A Word file is made up of the document text and data structures
containing formatting information about the text. Of course, this is a
very simplified illustration. There are fields and macros and other
things that have not been considered. At this stage, HWPF is mainly
concerned with formatted text.</p>
</section>
<section><title>Reading Word files</title>
<p>The entry point for HWPF's reading of a Word file is the File Information
Block (FIB). This structure is the entry point for the locations and size
of a document's text and data structures. The FIB is located at the
beginning of the main stream.</p>
<section><title>Text</title>
<p>The document's text is also located in the main stream. Its starting
location is given as FIB.fcMin and its length is given in bytes by
FIB.ccpText. These two values are not very useful in getting the text
because of unicode. There may be unicode text intermingled with ASCII
text. That brings us to the piece table.</p>
<p>The piece table is used to divide the text into non-unicode and unicode
pieces. The size and offset are given in FIB.fcClx and FIB.lcbClx
respectively. The piece table may contain Property Modifiers (prm).
These are for complex(fast-saved) files and are skipped. Each text piece
contains offsets in the main stream that contain text for that piece.
If the piece uses unicode, the file offset is masked with a certain bit.
Then you have to unmask the bit and divide by 2 to get the real file
offset. </p>
</section>
<section><title>Text Formatting</title>
<section><title>Stylesheet</title>
<p>All text formatting is based on styles contained in the StyleSheet.
The StyleSheet is a data structure containing among other things, style
descriptions. Each style description can contain a paragraph style and
a character style or simply a character style. Each style description
is stored in a compressed version on file. Basically these are deltas
from another style.</p>
<p>Eventually, you have to chain back to the nil style which is an
imaginary style with certain implied values.</p>
</section>
<section><title>Paragraph and Character styles</title>
<p>Paragraph and Character formatting properties for a document's text are
stored on file as deltas from some base style in the Stylesheet. The
deltas are used to create a complete uncompressed style in memory.</p>
<p>Uncompressed paragraph styles are represented by the Pargraph
Properties(PAP) data structure. Uncompressed character styles are
represented by the Character Properties(CHP) data structure. The styles
for the document text are stored in compressed format in the
corresponding Formatted Disk Pages (FKP). A compressed PAP is referred
to as a PAPX and a compressed CHP is a CHPX. The FKP locations are
stored in the bin table. There are seperate bin tables for CHPXs and
PAPXs. The bin tables' locations and sizes are stored in the FIB.</p>
<p>A FKP is a 512 byte OLE page. It contains the offsets of the beginning
and end of each paragraph/character run in the main stream and the
compressed properties for that interval. The compessed PAPX is based on
its base style in the StyleSheet. The compressed CHPX is based on the
enclosing paragraph's base style in the Stylesheet.</p>
</section>
<section><title>Uncompressing styles and other data structures</title>
<p>All compressed properties(CHPX, PAPX, SEPX) contain a grpprl. A grpprl
is an array of sprms. A sprm defines a delta from some base property.
There is a table of possible sprms in the Word 97 spec. Each sprm is a
two byte operand followed by a parameter. The parameter size depends on
the sprm. Each sprm describes an operation that should be performed on
the base style. After every sprm in the grpprl is performed on the base
style you will have the style for the paragraph, character run,
section, etc.</p>
</section>
</section>
</section>
</section>
</body>
</document>

View 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">
<document>
<header>
<title>Apache POI - HWPF - Java API to Handle Microsoft Word Files</title>
<subtitle>Overview</subtitle>
<authors>
<person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
<person name="Andrew C. Oliver" email="acoliver@apache.org"/>
<person name="Ryan Ackley" email="sackley@apache.org"/>
<person name="Rainer Klute" email="klute@apache.org"/>
</authors>
</header>
<body>
<section><title>Overview</title>
<p>HWPF is the name of our port of the Microsoft Word 97(-2007) file format
to pure Java. It also provides limited read only support for the older
Word 6 and Word 95 file formats.</p>
<p>The partner to HWPF for the new Word 2007 .docx format is <em>XWPF</em>.
Whilst HWPF and XWPF provide similar features, there is not a common
interface across the two of them at this time.</p>
<p>HWPF is still in early development. It is in the <link
href="http://svn.apache.org/viewcvs.cgi/poi/trunk/src/scratchpad/">
scratchpad section of the SVN.</link> You will need to ensure you
either have a recent SVN checkout, or a recent SVN nightly build
(including the scratchpad jar!)</p>
<p>
Source code in the
<em>org.apache.poi.hdf</em>
tree is the old legacy code. Source in the
<em>org.apache.poi.hwpf.model</em>
tree is the old legacy code refactored into an new object model. Those packages contains
Java representation of internal Word format structure. This code is "internal", it shall not
be used by your code. Because of backward-compatibility some API still has references to
those packages. They are subject to be deprecated and removed. Code from
<em>org.apache.poi.hwpf.usermodel</em>
package is actual public and user-friendly (as much as possible) API to access document
parts. Source code in the
<em>org.apache.poi.hwpf.extractor</em>
tree is a wrapper of this to facilitate easy extraction of interesting things (eg the Text),
and
<em>org.apache.poi.hwpf.converter</em>
package contains Word-to-HTML and Word-to-FO converters (latest can be used to generate PDF
from Word files when using with
<link href="http://xmlgraphics.apache.org/fop/">Apache FOP</link>
). Also there is a small file-structure-dumping utility in
<em>org.apache.poi.hwpf.dev</em>
package, primally for developing purposes.
</p>
<p>
The main entry point to HWPF is HWPFDocument. Currently it has a lot of references both to
internal interfaces (
<em>org.apache.poi.hwpf.model</em>
package) and public API (
<em>org.apache.poi.hwpf.usermodel</em>
) package. It is possible that it will be split into two different interfaces (like WordFile
and WordDocument) in later versions.
</p>
<p>Word document can be considered as very long single text buffer. HWPF API provides "pointers"
to document parts, like sections, paragraphs and character runs. Usually user will iterates
over main document part sections, paragraphs from sections and character runs from
paragraph. Each such interface is a pointer to document text subrange along with additional
properties (and they all extends same Range parent class). There is additional Range
implementations like Table, TableRow, TableCell, etc. Some structures like Bookmark or Field
can also provide subranges pointers.
</p>
<p>Changing file content usually requires a lot of synchronized changes in those structures like
updating property boundaries, position handlers, etc. Because of that HWPF API shall be
considered as not thread safe. In addition, there is a "one pointer" rule for changing
content. It means you should not use two different Range instances at one time. More
precisely, if you are changing file content using some range pointer, all other range
pointers except parents' ones become invalid. For example if you obtain overall range (1),
paragraph range (2) from overall range and character run range (3) from paragraph range and
change text of paragraph, character run range is now invalid and should not be used, but
overall range pointer still valid. Each time you obtaining range (pointer) new instance is
created. It means if you obtained two range pointers and changed document text using first
range pointer, second one became invalid.
</p>
</section>
<section>
<title>XWPF Patches Required!</title>
<p>At the moment, XWPF covers many common use cases for reading and writing
.docx files. Whilst this is a great thing, it does mean that XWPF does
everything that the current POI committers need it to do, and so none of
the committers are actively adding new features.</p>
<p>If you come across a feature in XWPF that you need, and isn't currently
there, please do send in a patch to add the extra functionality! More details
on contributing patches are available on the <link
href="../guidelines.html">"Contribution to POI" page</link>.</p>
</section>
<section>
<title>HWPF Pointman Needed!</title>
<p>At the moment we unfortunately do not have someone taking care for HWPF
and fostering its development. What we need is someone to stand up, take
this thing under his hood as his baby and push it forward. Ryan Ackley,
who put a lot of effort into HWPF, is no longer on board, so HWPF is an
orphan child waiting to be adopted.</p>
<p>If <strong>you</strong> are interested in becoming the new HWPF
pointman, you should look into the Microsoft Word internals. A good
starting point seems to be Ryan Ackley's <link
href="docoverview.html">overview</link>. Full details on the word format
is available from
<link href="http://www.microsoft.com/interop/docs/OfficeBinaryFormats.mspx">Microsoft</link>,
but the documentation can be a little hard to get into at first... Try reading the
<link href="docoverview.html">overview</link> first, and looking at the existing
code, then finally look up the documentation for specific missing features.</p>
<p>As a first step you should familiarize yourself with the source code,
examples, test cases, and the HWPF patches available at <link
href="http://issues.apache.org/">Bugzilla</link> (if any). Then you
should compile an overview of</p>
<ul>
<li>the current HWPF status,</li>
<li>the patches in <link
href="http://issues.apache.org/bugzilla/">Bugzilla</link> to be checked
in (and those that should better be ditched),</li>
<li>the available test cases and the test cases still to be written,</li>
<li>the available documentation and the docs to be written,</li>
<li>anything else that seems reasonable</li>
</ul>
<p>When you start coding, you will not yet have write access to the
SVN repository. Please submit your patches to <link
href="http://issues.apache.org/">Bugzilla</link> and nag <link
href="mailto:dev@poi.apache.org">the dev list</link> until someone commits
them. Besides the actual checking in of HWPF patches, current POI
committers will also do some minor reviews now and then of your source code
patches, test cases and documentation to help ensure software quality. But
most of the time you will be on your own. However, anyone offering useful
contributions over a period of time will be offered committership!</p>
<p>Please do not forget to write <link
href="http://www.junit.org/">JUnit</link> test cases and documentation!
We won't accept code that doesn't come with test cases. And please
consider that other contributors should be able to understand your source
code easily. If you need any help getting started with JUnit test cases
for HWPF, please ask on the developers' mailing list! If you show that you
are prepared to stick at it you will most likely be given SVN commit
access. See <link href="../guidelines.html">"Contribution to POI" page</link>
for more details and help getting started.</p>
<p>Of course we will help you as best as we can. However, presently there
is no committer who is really familiar with the Word format, so you'll be
mostly on your own. We are looking forward for you and your contributions!
Honor and glory of becoming a POI committer are waiting!</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:
-->

View File

@ -0,0 +1,392 @@
<?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.
====================================================================
-->
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Ryan Ackley (Myself) -->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd">
<document>
<header>
<title>Apache POI - HWPF - Java API to Handle Microsoft Word Files</title>
<subtitle>Project Plan</subtitle>
<authors>
<person name="Ryan Ackley" email="sackley@apache.org"/>
</authors>
</header>
<body>
<p>HWPF Milestones</p>
<table>
<tr>
<th>
Milestones
</th>
<th>
Target Date
</th>
<th>
Owner
</th>
</tr>
<tr>
<td>
Read in a Word document
with minimum formatting
(no lists, tables, footnotes,
endnotes, headers, footers)
and write it back out with the
result viewable in Word
97/2000
</td>
<td>
07/11/2003
</td>
<td>
Ryan
</td>
</tr>
<tr>
<td>
Add support for Lists and
Tables
</td>
<td>
8/15/2003
</td>
<td>
&#160;
</td>
</tr>
<tr>
<td>
HWPF 1.0-alpha release with
documentation and examples
</td>
<td>
8/18/2003
</td>
<td>
Praveen/Ryan
</td>
</tr>
<tr>
<td>
Add support for Headers,
Footers, endnotes, and
footnotes
</td>
<td>
8/31/2003
</td>
<td>
?
</td>
</tr>
<tr>
<td>
Add support for forms and
mail merge
</td>
<td>
September/October 2003
</td>
<td>
?
</td>
</tr>
</table>
<p>HWPF Task Lists</p>
<p>Read in a Word document with minimum formatting (no lists, tables, footnotes,
endnotes, headers, footers) and write it back out with the result viewable in Word 97/2000</p>
<table>
<tr>
<th>
Task
</th>
<th>
Target Date
</th>
<th>
Owner
</th>
</tr>
<tr>
<td>
Create classes to read and
write low level data
structures with test cases
</td>
<td>
7/10/2003
</td>
<td>
Ryan
</td>
</tr>
<tr>
<td>
Create classes to read and
write FontTable and Font
names with test case
</td>
<td>
7/10/2003
</td>
<td>
Praveen
</td>
</tr>
<tr>
<td>
Final test
</td>
<td>
7/11/2003
</td>
<td>
Ryan
</td>
</tr>
</table>
<p>Develop user friendly API so it is fun and easy to read and write word documents
with java.</p>
<table>
<tr>
<th>
Task
</th>
<th>
Target Date
</th>
<th>
Owner
</th>
</tr>
<tr>
<td>
Develop a way for SPRMS to
be compressed and
uncompressed
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Override CHPAbstractType
with a concrete class that
exposes attributes with
human readable names
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Override PAPAbstractType
with a concrete class that
exposes attributes with
human readable names
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Override SEPAbstractType
with a concrete class that
exposes attributes with
human readable names
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Override DOPAbstractType
with a concrete class that
exposes attributes with
human readable names
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Override TAPAbstractType
with a concrete class that
exposes attributes with
human readable names
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Override TCAbstractType
with a concrete class that
exposes attributes with
human readable names
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Develop a VerifyIntegrity
class for testing so it is easy
to determine if a Word
Document is well-formed.
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Develop general intuitive
API to tie everything together
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<p>Add support for lists and tables</p>
<table>
<tr>
<th>
Task
</th>
<th>
Target Date
</th>
<th>
Owner
</th>
</tr>
<tr>
<td>
Add data structures for
reading and writing list data
with test cases.
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Add data structures for
reading and writing tables
with test cases.
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
<p>HWPF 1.0-alpha release with documentation and examples</p>
<table>
<tr>
<th>
Task
</th>
<th>
Target Date
</th>
<th>
Owner
</th>
</tr>
<tr>
<td>
Document the user model
API
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Document the low level
classes
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Come up with detailed How-To&#8217;s
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</body>
</document>

View File

@ -0,0 +1,88 @@
<?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-HWPF - A Quick Guide</title>
<subtitle>Overview</subtitle>
<authors>
<person name="Nick Burch" email="nick at torchbox dot com"/>
</authors>
</header>
<body>
<p>HWPF is still in early development. It is in the <link
href="http://svn.apache.org/viewcvs.cgi/poi/trunk/src/scratchpad/">
scratchpad section of the SVN.</link> You will need to ensure you
either have a recent SVN checkout, or a recent SVN nightly build
(including the scratchpad jar!)</p>
<section><title>Basic Text Extraction</title>
<p>For basic text extraction, make use of
<code>org.apache.poi.hwpf.extractor.WordExtractor</code>. It accepts an input
stream or a <code>HWPFDocument</code>. The <code>getText()</code>
method can be used to
get the text from all the paragraphs, or <code>getParagraphText()</code>
can be used to fetch the text from each paragraph in turn. The other
option is <code>getTextFromPieces()</code>, which is very fast, but
tends to return things that aren't text from the page. YMMV.
</p>
</section>
<section><title>Specific Text Extraction</title>
<p>To get specific bits of text, first create a
<code>org.apache.poi.hwpf.HWPFDocument</code>. Fetch the range
with <code>getRange()</code>, then get paragraphs from that. You
can then get text and other properties.
</p>
</section>
<section><title>Headers and Footers</title>
<p>To get at the headers and footers of a word document, first create a
<code>org.apache.poi.hwpf.HWPFDocument</code>. Next, you need to create a
<code>org.apache.poi.hwpf.usermodel.HeaderStores</code>, passing it your
HWPFDocument. Finally, the HeaderStores gives you access to the headers and
footers, including first / even / odd page ones if defined in your
document. Additionally, HeaderStores provides a method for removing
any macros in the text, which is helpful as many headers and footers
do end up with macros in them.</p>
</section>
<section><title>Changing Text</title>
<p>It is possible to change the text via
<code>insertBefore()</code> and <code>insertAfter()</code>
on a <code>Range</code> object (either a <code>Range</code>,
<code>Paragraph</code> or <code>CharacterRun</code>).
It is also possible to delete a <code>Range</code>.
This code will work in many, but not all cases, and patches to
improve it are gratefully received!
</p>
</section>
<section><title>Further Examples</title>
<p>For now, the best source of additional examples is in the unit
tests. <link
href="http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/">
Browse the HWPF unit tests.</link>
</p>
</section>
</body>
</document>

View File

@ -0,0 +1,175 @@
<?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 - the Java API for Microsoft Documents</title>
<authors>
<person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
<person id="GJS" name="Glen Stampoultzis" email="user@poi.apache.org"/>
<person id="AS" name="Avik Sengupta" email="user@poi.apache.org"/>
<person id="RK" name="Rainer Klute" email="klute@apache.org"/>
<person id="DF" name="David Fisher" email="dfisher@jmlafferty.com"/>
</authors>
</header>
<body>
<section><title>Project News</title>
<section><title>8 February 2014 - POI 3.10-FINAL available</title>
<p>The Apache POI team is pleased to announce the release of 3.10-FINAL.
Featured are significant performance improvements and numerous bug fixes.
See the release notes for more details.</p>
<p>A full list of changes is available in the <link href="changes.html">change log</link>.
People interested should also follow the <link href="mailinglists.html">dev mailing list</link> to track further progress.</p>
<p>See the <link href="download.html">downloads</link> page for more details.</p>
</section>
<section><title>3 December 2012 - POI 3.9 available</title>
<p>The Apache POI team is pleased to announce the release of 3.9. This includes a large number of bug fixes, and some
enhancements (especially text extraction). See the
<link href="http://www.apache.org/dist/poi/release/RELEASE-NOTES.txt">release notes</link> for more details.
</p>
<p>A full list of changes is available in the <link href="changes.html">change log</link>.
People interested should also follow the <link href="mailinglists.html">dev mailing list</link> to track further progress.</p>
<p>See the <link href="download.html">downloads</link> page for more details.</p>
</section>
<section><title>28 August 2011 - The Apache POI project is celebrating its 10th anniversary</title>
<p>
The Apache POI project is celebrating its 10th anniversary. On the 28th of August 2001, the first 0.1 alpha version of POI was released.
<link href="https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces14">Read more...</link></p>
</section>
</section>
<section><title>Mission Statement</title>
<p>
The Apache POI Project's mission is to create and maintain Java APIs for manipulating various file formats
based upon the Office Open XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2).
In short, you can read and write MS Excel files using Java.
In addition, you can read and write MS Word and MS PowerPoint files using Java. Apache POI is your Java Excel
solution (for Excel 97-2008). We have a complete API for porting other OOXML and OLE2 formats and welcome others to participate.
</p>
<p>
OLE2 files include most Microsoft Office files such as XLS, DOC, and PPT as well as MFC serialization API based file formats.
The project provides APIs for the <link href="poifs/index.html">OLE2 Filesystem (POIFS)</link> and
<link href="hpsf/index.html">OLE2 Document Properties (HPSF)</link>.
</p>
<p>
Office OpenXML Format is the new standards based XML file format found in Microsoft Office 2007 and 2008.
This includes XLSX, DOCX and PPTX. The project provides a low level API to support the Open Packaging Conventions
using <link href="oxml4j/index.html">openxml4j</link>.
</p>
<p>
For each MS Office application there exists a component module that attempts to provide a common high level Java api to both OLE2 and OOXML
document formats. This is most developed for <link href="spreadsheet/index.html">Excel workbooks (SS=HSSF+XSSF)</link>.
Work is progressing for <link href="hwpf/index.html">Word documents (HWPF+XWPF)</link> and
<link href="slideshow/index.html">PowerPoint presentations (HSLF+XSLF)</link>.
</p>
<p>
The project has recently added support for <link href="hsmf/index.html">Outlook (HSMF)</link>. Microsoft opened the specifications
to this format in October 2007. We would welcome contributions.
</p>
<p>
There are also projects for
<link href="hdgf/index.html">Visio (HDGF)</link>,
<link href="hmef/index.html">TNEF (HMEF)</link>,
and <link href="hpbf/index.html">Publisher (HPBF)</link>.
</p>
<p>
As a general policy we collaborate as much as possible with other projects to
provide this functionality. Examples include: <link href="http://xml.apache.org/cocoon">Cocoon</link> for
which there are serializers for HSSF;
<link href="http://www.openoffice.org">Open Office.org</link> with whom we collaborate in documenting the
XLS format; and <link href="http://tika.apache.org/">Tika</link> /
<link href="http://lucene.apache.org/">Lucene</link>,
for which we provide format interpretors. When practical, we donate
components directly to those projects for POI-enabling them.
</p>
<section><title>Why should I use Apache POI?</title>
<p>
A major use of the Apache POI api is for <link href="text-extraction.html">Text Extraction</link> applications
such as web spiders, index builders, and content management systems.
</p>
<p>
So why should you use POIFS, HSSF or XSSF?
</p>
<p>
You'd use POIFS if you had a document written in OLE 2 Compound Document Format, probably written using
MFC, that you needed to read in Java. Alternatively, you'd use POIFS to write OLE 2 Compound Document Format
if you needed to inter-operate with software running on the Windows platform. We are not just bragging when
we say that POIFS is the most complete and correct implementation of this file format to date!
</p>
<p>
You'd use HSSF if you needed to read or write an Excel file using Java (XLS). You'd use
XSSF if you need to read or write an OOXML Excel file using Java (XLSX). The combined
SS interface allows you to easily read and write all kinds of Excel files (XLS and XLSX)
using Java.
</p>
</section>
<section><title>Components</title>
<p>
The Apache POI Project provides several component modules some of which may not be of interest to you.
Use the information on our <link href="overview.html#components">Components</link> page to determine which
jar files to include in your classpath.
</p>
</section>
</section>
<section><title>Contributing </title>
<p>
So you'd like to contribute to the project? Great! We need enthusiastic, hard-working, talented folks to help
us on the project. So if you're motivated, ready, and have the time time download the source from the
<link href="subversion.html">Subversion Repository</link>, <link href="howtobuild.html">build the code</link>,
join the <link href="mailinglists.html">mailing lists</link> and we'll be happy to help you get started on the project!
</p>
<p>
Please read our <link href="guidelines.html">Contribution Guidelines</link>. When your contribution is ready
submit a patch to our <link href="https://issues.apache.org/bugzilla/buglist.cgi?product=POI">Bug Database</link>.
</p>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</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:2
sgml-indent-data:t
sgml-parent-document:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->

View 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.3//EN" "./dtd/document-v13.dtd">
<document>
<header>
<title>Apache POI - Legal Stuff</title>
<authors>
<person id="TK" name="Tetsuya Kitahata" email="tetsuya@apache.org"/>
<person id="DF" name="David Fisher" email="dfisher@jmlafferty.com"/>
</authors>
</header>
<body>
<section><title>License and Notice</title>
<p>
Apache POI releases are available under the <link href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0.</link>
See the NOTICE file contained in each release artifact for applicable copyright attribution notices. Release artifacts are available
from the <link href="download.html">Download</link> page.
</p>
</section>
<section><title>Copyrights and Trademarks</title>
<p>
All material on this website is Copyright &#169; 2002-2010, The Apache
Software Foundation.
</p>
<p>
Apache POI, POI, Apache, the Apache feather logo, and the Apache POI
project logo are trademarks of The Apache Software Foundation.
</p>
<p>
Sun, Sun Microsystems, Solaris, Java, JavaServer Web Development Kit,
and JavaServer Pages are trademarks or registered trademarks of Sun
Microsystems, Inc. UNIX is a registered trademark in the United States
and other countries, exclusively licensed through 'The Open Group'.
Microsoft, Windows, WindowsNT, Excel, Word, PowerPoint, Viso, Publisher, Outlook,
and Win32 are registered trademarks of Microsoft Corporation.
Linux is a registered trademark of Linus Torvalds.
All other product names mentioned herein and throughout the entire
web site are trademarks of their respective owners.
</p>
<section><title>Cryptography Notice</title>
<p>
This distribution includes cryptographic software. The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of
encryption software. BEFORE using any encryption software, please
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to
see if this is permitted. See
<link href="http://www.wassenaar.org/">http://www.wassenaar.org/</link>
for more information.
</p>
<p>
The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms. The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS
Export Administration Regulations, Section 740.13) for both object
code and source code.
</p>
<p>
The cryptographic software used is from <em>java.security</em> and
<em>javax.crypto</em> and is used when processing encrypted and
protected documents.
</p>
</section>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View File

@ -0,0 +1,99 @@
<?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>Mailing Lists</title>
<authors>
<person id="NB" name="Nick Burch" email="nick@apache.org"/>
</authors>
</header>
<body>
<section><title>Mailing Lists - Guidelines</title>
<p>
<strong>Before subscribing to any of the mailing lists, please make
sure that you have read and understand the following
guidelines:</strong>
</p>
<ul>
<li><link href="http://www.apache.org/foundation/mailinglists.html">ASF guide to Mailing Lists</link></li>
<li><link href="http://www.apache.org/dev/contrib-email-tips.html">ASF Tips for email contributors</link></li>
<li><link href="http://jakarta.apache.org/site/mail.html">The Jakarta guide to Mailing Lists</link></li>
</ul>
</section>
<section><title>Lists</title>
<section><title>The POI User List</title>
<p>
<strong>Medium Traffic</strong>
<link href="mailto:user-subscribe@poi.apache.org">Subscribe</link>
<link href="mailto:user-unsubscribe@poi.apache.org">Unsubscribe</link>
<link href="http://mail-archives.apache.org/mod_mbox/poi-user/">Archive</link>
<link href="http://news.gmane.org/thread.php?group=gmane.comp.jakarta.poi.user">gmane.org</link>
</p>
<p>
This list is for users of POI to ask questions, share knowledge,
and discuss issues. POI developers are also expected to be
lurking on this list to offer support to users of POI.
</p>
</section>
<section><title>The POI Developer List</title>
<p>
<strong>Low Traffic</strong>
<link href="mailto:dev-subscribe@poi.apache.org">Subscribe</link>
<link href="mailto:dev-unsubscribe@poi.apache.org">Unsubscribe</link>
<link href="http://mail-archives.apache.org/mod_mbox/poi-dev/">Archive</link>
<link href="http://news.gmane.org/gmane.comp.jakarta.poi.devel">gmane.org</link>
</p>
<p>
This is the list where participating developers of the POI
project meet and discuss issues, code changes/additions, etc.
Subscribers to this list also get notices of each and every
code change, build results, testing notices, etc.
<strong>Do not send mail to this list with usage questions or
configuration problems.</strong>
</p>
</section>
<section><title>The POI General List</title>
<p>
<strong>Low Traffic</strong>
<link href="mailto:general-subscribe@poi.apache.org">Subscribe</link>
<link href="mailto:general-unsubscribe@poi.apache.org">Unsubscribe</link>
<link href="http://mail-archives.apache.org/mod_mbox/poi-general/">Archive</link>
</p>
<p>
This list exists for general discussions on POI, not specific to
code or problems with code. Used for discussion of general matters
relating to all of the POI project, such as the website and
changes in procedures.
</p>
</section>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View File

@ -0,0 +1,57 @@
<?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 Mirror Site</title>
<authors>
<person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
</authors>
</header>
<body>
<section><title>Mirrors</title>
<p>
These are mirrors of the
<link href="http://poi.apache.org/">POI</link> website.
If you know of others...report them! :-)
</p>
</section>
<section><title>Austria</title>
<ul>
<li><link href="http://gd.tuwien.ac.at/infosys/servers/http/apache-jakarta-site/poi/index.html">Austrian Mirror of Jakarta POI</link></li>
</ul>
</section>
<section><title>Korea</title>
<ul>
<li><link href="http://jakarta.ktech21.co.kr/">Jakarta site partially translated into Korean and Mirrored</link></li>
</ul>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View File

@ -0,0 +1,233 @@
<?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 - In the News over the world</title>
<authors>
<person id="AO" name="Andrew C. Oliver" email="acoliver@apache.org"/>
<person id="TK" name="Tetsuya Kitahata" email="tetsuya@apache.org"/>
</authors>
</header>
<body>
<section><title>POI in the news</title>
<p>
These are articles/etc. posted about POI around the web. If you
see POI in the news or mentioned at least somewhat prominently
on a site (not your homepage that you put the work POI on in
order to get us to link you and by the why here is a picture of
your wife in kids) then send a patch to the list. In general
equal time will be given so please feel free to send inflamatory
defamation as well as favorable, technical and factual. Really
stupid things won't be mentioned (sorry).
</p>
</section>
<section><title>English</title>
<ul>
<li>
<link href="http://archive.midrange.com/web400/200204/msg00023.html">Discussion about using POI on AS/400s</link>
</li>
<li>
<link href="http://www.somelist.com/mails/23819.html">Discussion from back when we almost had POI as the filter for KOffice if politics and licenses hadn't killed iit</link>
</li>
<li>
<link href="http://www.oreillynet.com/pub/wlg/1552?page=last&amp;x-showcontent=text">Java discussion on O'Reilly Network including discussion about POI</link> - O'Reilly.net
</li>
<li>
<link href="http://www.rollerweblogger.org/page/roller/20020715">Poor Obfuscation Implementation.</link> - Blog of David M. Johnson
</li>
<li>
<link href="http://www.jsurfer.org/article.php?sid=322">
POI 1.5-dev-rc2 released </link> - JSurfer
</li>
<li>
<link href="http://directory.google.com/Top/Computers/Programming/Languages/Java/Class_Libraries/Data_Formats/Microsoft_Formats/"> Google says we're the most important in our category </link>
</li>
<li>
<link href="http://www.javaworld.com/javaworld/javaqa/2002-05/01-qa-0503-excel3.html">It's POI-fect</link> - Tony Sintes, Javaworld
</li>
<li>
<link href="http://www.need-a-cake.com/categories/cocoonWeblog/2002/03/07.html">
Nicola announces POI serialization code
</link> - Matthew Langham's Radio Weblog
</li>
<li>
<link href="http://javalobby.org/discussionContext/showThreaded/frm/javalobby?folderId=20&amp;discussionContextId=11523">
Jakarta POI 1.4583 Released</link> - JavaLobby
</li>
<li>
<link href="http://javalobby.org/discussionContext/showThreaded/frm/javalobby?discussionContextId=11442&amp;folderId=20">
POI project moves to Jakarta (OLE 2 CDF/Excel/Word in
pure java)</link> - JavaLobby
</li>
<li>
<link
href="http://www.geocities.com/marcoschmidt.geo/java-image-coding.html">
List of Java libraries to read and write image and document files
</link> Marco Schmidt's homepage (normally we wouldn't
feature someone's homepage but its an extensive list of
information including "alternatives to POI" (for those
of you who are very wealthy). But heck I think I'll
bookmark his page for myself since he's like got every
piece of info known to man linked or featured on it!
</li>
<li>
<link href="http://radio.weblogs.com/0101350/">
The Experiences of an Operator (M&#229;ns af Klercker)
</link> - radio.weblogs.com
</li>
<li>
<link href="http://dataconv.org/apps_office.html">
DATACONV - Data Conversion Tools: Office
</link> DATACONV
</li>
<li>
<link href="http://chicago.sourceforge.net/devel/">
Chicago Developer Page
</link>
</li>
<li>
<link href="http://www.onjava.com/pub/d/1157">
POI/POI Serialization Project
</link> - Man you know you've hit the bigtime when
O'Reilly Likes you.. ;-)
</li>
<li>
<link
href="http://www.javaworld.com/netnews/index.shtml">
News Around the Net
</link> - Java World
</li>
</ul>
</section>
<section><title>Nederlandstalige (Dutch)</title>
<ul>
<li>
<link
href="http://www.ster.be/java/java9.html">
Een Excel-werkboek maken vanuit Java - Lieven Smits
</link>
</li>
</ul>
</section>
<section><title>Deutsch (German)</title>
<ul>
<li> <link
href="http://www.entwickler.com/itr/news/show.php3?id=6132&amp;nodeid=82 ">Apache POI verffentlicht</link> - entwicker.com
</li>
<li>
<link
href="http://www.jsp-develop.de/newsletter/10/">
Apache Jakarta-Projekt bringt Word und Excel in die Java-Welt </link> - jsp-develop.de (for the misguided who use JSP ;-) )
</li>
<li>
<link
href="http://www.entwickler.com/news/2002/02/5718/news.shtml">
Neues Apache-Projekt bringt Word- und Excel nach Java
</link> - entwickler.com
</li>
</ul>
</section>
<section><title>Espa&#241;ol (Spanish)</title>
<ul>
<li>
<link href="http://www.javahispano.com/noticias/todas.jsp">
OLE2 desde Java nativo
</link> - javaHispano
</li>
<li>
<link href="http://p2p.wrox.com/archive/java_espanol/2002-08/3.asp">Spanish discussion about Excel and Java including POI from Wrox forums</link>
</li>
</ul>
</section>
<section><title>Fran&#231;ais (French)</title>
<ul>
<li>
<link href="http://linuxfr.org/section/D%E9veloppeur,0,1,8,0.html">
Excel/OLE accessibles
</link> - Da Linux French Page
</li>
<li>
<link href="http://www.sogid.com/javalist/f2002/traiter_word_java.html">Discussion on POI in French</link>
</li>
</ul>
</section>
<section><title>Nihongo (Japanese)</title>
<ul>
<li>
<link href="http://drpanda.freezope.org/Memo/docs/jakarta/poi/poi_sample">100% PureJava...</link> - Dr. Panda Portal
</li>
<li>
<link
href="http://www.gimlay.org/~andoh/java/javanew.html">
What's new with java?
</link> - gimlay.org
</li>
<li><link href="http://taka-2.com/jclass/POI/">Java de Excel</link> - How to use Japanese with POI</li>
<li><link href="http://www.tech-arts.co.jp/macosx/webobjects-jp/htdocs/3200/3218.html">Various discussion in Japanese including on POI</link></li>
<li><link href="http://muimi.com/j/jakarta/">Japanese resources on Jakarta projects including POI</link></li>
<li><link href="http://www.fk.urban.ne.jp/home/kishida/">Kishida's site</link> -- Weekly Forte Lectures -- includes a snip about POI and Japanese.</li>
</ul>
</section>
<section><title>Russkii Yazyk (Russian)</title>
<ul>
<li>
<link href="http://www.nestor.minsk.by/kg/kg02/21/kg22108.html">
Probably a translation of the Javalobby announcement of 1.5-final
</link> -- Computer News (What's New)
</li>
</ul>
</section>
<section><title>Hangul (Korean)</title>
<ul>
<li>
<link href="http://www.javabrain.co.kr/AnswerView?questionId=1189&amp;categoryId=8">Various discussion in Korean about Excel output/APIs including POI</link>
</li>
</ul>
</section>
<section><title>No freaking idea</title>
<p>
If you can read one of these languages, send mail to the list
telling us what language it is and we'll categorize it!
</p>
<ul>
<li>
<link
href="http://www.javacentrix.com/index.htm">
If I had to guess, I'd say this is Thai, but
maybe you actually know</link> - javacentrix.com
</li>
</ul>
</section>
</body>
<footer>
<legal>
Copyright (c) @year@ The Apache Software Foundation All rights reserved.
<br />
Apache POI, POI, Apache, the Apache feather logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</legal>
</footer>
</document>

View File

@ -0,0 +1,37 @@
<?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="POI Project News Pages"
copyright="@year@ POI Project">
<menu label="Navigation">
<menu-item label="Main" href="../index.html"/>
</menu>
<menu label="News">
<menu-item label="Logo Submissions" href="logocontest.html"/>
</menu>
</book>

Some files were not shown because too many files have changed in this diff Show More