daffodil.git
2 days agoAdd 'exisa' to help message for infoset types. main
Josh Adams [Thu, 22 Sep 2022 11:47:18 +0000 (07:47 -0400)] 
Add 'exisa' to help message for infoset types.

Missed this during the initial implementation.

DAFFODIL-1959

4 days agoBump codecov/codecov-action from 3.1.0 to 3.1.1
dependabot[bot] [Mon, 19 Sep 2022 19:16:23 +0000 (19:16 +0000)] 
Bump codecov/codecov-action from 3.1.0 to 3.1.1

Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
5 days agoUpdate log4j-api, log4j-core to 2.19.0
Scala Steward [Mon, 19 Sep 2022 12:47:10 +0000 (12:47 +0000)] 
Update log4j-api, log4j-core to 2.19.0

5 days agoUpdate scalacheck to 1.17.0
Scala Steward [Mon, 19 Sep 2022 12:47:18 +0000 (12:47 +0000)] 
Update scalacheck to 1.17.0

8 days agoEnsure layers work well with suspensions and bitOrder
Steve Lawrence [Fri, 16 Sep 2022 11:31:36 +0000 (07:31 -0400)] 
Ensure layers work well with suspensions and bitOrder

Prior to these changes, the combination of layers and suspensions could
cause issues with bit order checking, which could lead to suspensions
trying to create new suspensions, which isn't allowed.

- When creating layers, rather than writing directly to the current DOS
  stream, we instead create a new buffered DOS just for this layer. This
  ensures that the layer is written starting with a zero offset and no
  fragments or bitOreder state to cause confusion.
- The original DOS is marked as finished, allowing the new layer DOS to
  be flushed to it when marked as finished. If the original DOS was
  direct, it would make this new layer DOS direct and so buffered data
  should be minimized.
- We must create a clone of the UState that is passed into the layer
  creation functions as well as used to finish the original DOS. This
  ensures the new layer DOS and original DOS use the correct state
  snapshot if suspensions cause their evaluation and flushing of data to
  be delayed.

DAFFODIL-2726

12 days agoRequire EPEL when building Daffodil on CentOS/RHEL
Steve Lawrence [Thu, 8 Sep 2022 18:11:35 +0000 (14:11 -0400)] 
Require EPEL when building Daffodil on CentOS/RHEL

The mxml-dependency is available in the EPEL repos for EL 7, 8, and 9.
Rather than requiring that users build mxml from scratch on CentOS/RHEL,
modify the build instructions to just require the EPEL repository, and
provide a link to the instructions.

This also combines the CentOS and Fedora instructions to avoid any
potential confusion or errors caused by users following Fedora
instructions to build on RHEL.

DAFFODIL-2710

2 weeks agoUpdate mbeckerle signing key to sha-512
Michael Beckerle [Fri, 9 Sep 2022 16:03:29 +0000 (11:03 -0500)] 
Update mbeckerle signing key to sha-512

DAFFODIL-2727

2 weeks agoBump actions/setup-java from 3.4.1 to 3.5.0
dependabot[bot] [Thu, 8 Sep 2022 19:20:10 +0000 (19:20 +0000)] 
Bump actions/setup-java from 3.4.1 to 3.5.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.4.1 to 3.5.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.4.1...v3.5.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2 weeks agoFix EXI issues and enable schema aware EXI
Josh Adams [Thu, 1 Sep 2022 00:52:51 +0000 (20:52 -0400)] 
Fix EXI issues and enable schema aware EXI

We do not want to escape characters before handing them off to the SAX
ContentHandler. Also, in order for Exificient's library to maintain nil
elements the SAX_NAMESPACE_PREFIXES_FEATURE flag must be enabled on the
XMLReader that is passing events to the EXI ContentHandler.

Schema aware EXI infosets can now be enabled using the "-I exisa" flag.
This has shown significant size reduction compared to non-schema aware
EXI.  One limitation however is that it may not play well with large
values of maxOccurs, but maxOccurs="unbounded" is OK. This is a known
behavior in Exificient and just a limitation to its behavior.

DAFFODIL-1959

2 weeks agoUpdate jackson-core to 2.13.4
Scala Steward [Mon, 5 Sep 2022 12:42:11 +0000 (12:42 +0000)] 
Update jackson-core to 2.13.4

3 weeks agoUpdate to Scala XML 2.1.0
Steve Lawrence [Tue, 30 Aug 2022 14:43:36 +0000 (10:43 -0400)] 
Update to Scala XML 2.1.0

The main difference in this new Scala XML version is changing the
XML.load() function to not ignore comments and processing instructions
and not coalesce cdata. These changes caused  some tests to fail which
required minor modifications. There are no changes to transitive
dependencies or license that need to be incorporated.

Additionally, the DaffodilConstructionLoader is modified to drop
processing instructions and comments. This gives a similar behavior to
the old XML.load function, and fixes bugs related to unexpected
comments.

DAFFODIL-2685, DAFFODIL-2237

3 weeks agoBump actions/github-script from 6.1.1 to 6.2.0
dependabot[bot] [Fri, 26 Aug 2022 19:20:08 +0000 (19:20 +0000)] 
Bump actions/github-script from 6.1.1 to 6.2.0

Bumps [actions/github-script](https://github.com/actions/github-script) from 6.1.1 to 6.2.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v6.1.1...v6.2.0)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
4 weeks agoAdded TDML with precompiled binary schema feature.
Michael Beckerle [Fri, 19 Aug 2022 20:06:38 +0000 (16:06 -0400)] 
Added TDML with precompiled binary schema feature.

DAFFODIL-2725

5 weeks agoAll InfosetOutputter functions now return Unit
Steve Lawrence [Fri, 19 Aug 2022 13:14:37 +0000 (09:14 -0400)] 
All InfosetOutputter functions now return Unit

Commit 3b213ce30b deprecated InfosetOutputter functions that returned
false, and instead expected them to throw an Exception. If an
implementation returned false from one of these functions, then Daffodil
threw a usageError and stopped processing, with the assumption that no
one actually used this.

Unfortunately, the SAXInfosetOutputter actually does return false to
signify errors, which could lead to usageErrors when outputting SAX (or
EXI which uses SAX behind the scenes).

This changes the InfosetOutputter API to remove the Boolean return
value, and changes all concrete implementations to use this new API and
throw an Exception when an error is encountered. This breaks backwards
compatibility, but ensures consistence and a cleaner API.

Note that this does not completely address DAFFODIL-2721, but is a quick
change to fix the SAX and EXI regression. Additional work is needed to
fully resolve the issue.

DAFFODIL-2721

5 weeks agoCreate dependency-scan.yml
Justin Hutchings [Wed, 17 Aug 2022 17:02:57 +0000 (10:02 -0700)] 
Create dependency-scan.yml

Update name

Remove PR scans

Update license

Update dependency-scan.yml

5 weeks agoAllow DataProcessor's copy function to be public.
Michael Beckerle [Wed, 17 Aug 2022 01:18:12 +0000 (21:18 -0400)] 
Allow DataProcessor's copy function to be public.

I need this function for various test rigs I am creating for large schemas where copying the DP saves 10 seconds a test for reloading another one just because I can't copy the object.

DAFFODIL-2723

5 weeks agoSet starting absolute bit positions of DOSs more often, avoid deadlocks
Steve Lawrence [Tue, 16 Aug 2022 14:44:38 +0000 (10:44 -0400)] 
Set starting absolute bit positions of DOSs more often, avoid deadlocks

Currently we are very pessimistic about specifying a known length of a
simple type suspension by always returning Nope (i.e. there is no known
length). This meant that it was impossible to determine the absolute
starting position of split buffers from those suspensions. And because
absolute bit positions are so important for allowing suspensions to
evaluate (e.g. alignment, length calculations) it increased the chance
that a suspension would deadlock.

To resolve this issue, this modifies the simple type suspension to use
the actual length where possible. This isn't always possible, like when
padding or right fill might be needed, but that often isn't the case.

Even with that change, the absolute starting positions could not be
calculated for a new split in cases where the current DOS did not have
an absolute position and only had a relative position. This meant
deadlocks were still fairly likely. So in these cases, we calculate and
store the length of the DOS (relative bit position + suspension length).
Once the absolute starting position of the DOS it determined, we can use
that length to set the starting absolute position of the following DOS.

Also add an assert to ensure that these new length calculations are
correct by checking that the ending bit position of one DOS matches the
starting bit position of the next DOS when merging. This discovered unit
tests with an off by one error.

These changes increase the chance of an absolute starting bit position
being known and allows more suspensions to be evaluated which should
lead to less deadlocks.

Unrelated, remove println from a previous commit that was used for
debugging and accidentally made it into the commit.

DAFFODIL-2717

5 weeks agoBump actions/github-script from 6.1.0 to 6.1.1
dependabot[bot] [Fri, 12 Aug 2022 19:16:51 +0000 (19:16 +0000)] 
Bump actions/github-script from 6.1.0 to 6.1.1

Bumps [actions/github-script](https://github.com/actions/github-script) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v6.1.0...v6.1.1)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
5 weeks agoUpdate woodstox-core to 6.3.1
Scala Steward [Sun, 14 Aug 2022 12:47:59 +0000 (12:47 +0000)] 
Update woodstox-core to 6.3.1

6 weeks agoUpdate Saxon-HE to 11.4
Scala Steward [Fri, 29 Jul 2022 12:16:10 +0000 (12:16 +0000)] 
Update Saxon-HE to 11.4

6 weeks agoSupport XML strings in XMLTextInfosetInputter/Outputter
Steve Lawrence [Fri, 12 Aug 2022 16:06:32 +0000 (12:06 -0400)] 
Support XML strings in XMLTextInfosetInputter/Outputter

- When outputting string elements with the stringAsXml runtime property
  set to true, instead of escaping the simple element content, we
  instead output the content to raw XML as if it were part of the
  infoset. When inputting, we read the XML and convert it back to a
  string as the simple content. When the XML is added to the infoset, a
  wrapper element called "stringAsXml" is added to ensure the default
  namespace is reset. As an example:

  Infoset without the stringAsXml property:

    <foo>&lt;payload&gt;content&lt;/payload&gt;</foo>

  Infoset with the stringAsXml property:

    <foo><stringAsXml xmlns=""><payload>content</payload></stringAsXml></foo>

  Note that there are multiple ways to read/write XML that are
  syntactically different but semantically the same, making it unlikely
  that unparsed XML will be byte-for-byte the same as the original XML.

  Also note that the result of the XMLTextInfosetOutputter is used for
  "full" validation. Because this changes its output, essentially
  converting a simple string type into a complex type, this will break
  full validation if stringAsXml is used. If full validation is needed,
  one must use external validation with a modified schema. And example
  of this schema is included in new tests.

- We currently ignore the return value of InfosetOutputter functions,
  and any exceptions thrown just bubble to the top and appear as an
  unexpected exception. Instead, if the InfosetOutputter throws an
  exception, we create an SDE. The logic for finalizing the walker is
  moved into the doParse function so that the SDE is caught and
  correctly added as a diagnostic. This is need to handle
  non-well-formed XML. Additionally, InfosetOutputter's returning false
  has been deprecated and will result in a usage error.

- We cannot use normal TDML tests to test this behavior because the
  XMLTextInfosetOutputter outputs a different infoset than the other
  infoset outputters, hand written tests added to verify the correct
  behavior.

DAFFODIL-2708

6 weeks agoAdd tests to show fixed len + nillable case.
Michael Beckerle [Mon, 8 Aug 2022 19:41:41 +0000 (15:41 -0400)] 
Add tests to show fixed len + nillable case.

Came up in user support.

DAFFODIL-2719

8 weeks agoImprove release candidate container build cachability and reproducability
Steve Lawrence [Thu, 21 Jul 2022 19:12:25 +0000 (15:12 -0400)] 
Improve release candidate container build cachability and reproducability

The release candidate container setup script makes reusing cached image
layers difficult because any change to the setup script (e.g. sbt/npm
version) invalidates the previous cached layers. This means anytime a
change is made to this script the entire container image must be rebuilt
which takes a lot of time and wasted space.

To avoid this, the container setup script is removed and all
functionality is moved to the Dockerfile. This results in more layers,
but makes it less likely to need to rebuild layers if there are changes.
Commands that are more likely to change due to versions or contents
(e.g. sbt/yarn install, release-candidate script) are put closer to the
end so if they are changed, less needs to be rebuilt.

More importantly, the installation of yarn and sbt do not provide a
specific version, so the version in the container depends on the latest
version available in the npm/sbt repositories when the container is
built. To improve reproducability, they are changed to install a
pinned version (the latest versions as of this change).

Additional minor updates to the container:
- Switch from fedora-minimal to fedora. The size difference is minimal
  compared to the final size of the container, and it replaces microdnf
  with dnf, which has more capabilities to make the Dockerfile cleaner,
  (e.g. quieter build, repo/repofrompath options).
- Add the "--group-add keep-groups" option to the podman run command
  needed for newer versions of podman.
- Some files only need to be verified when building Daffodil and not VS
  Code, only mention the correct files to avoid confusion.
- Update sbt-pgp plugin to latest version
- Update wix_wine.sh to remove debug message that SBT makes look like
  errors.

DAFFODIL-2713

2 months agoUse Exificient to support EXI format for infosets
alexanderrevello [Fri, 20 May 2022 21:26:50 +0000 (17:26 -0400)] 
Use Exificient to support EXI format for infosets

Demonstrates how to use Exificient's EXI library with Daffodil by using
SAX.  Adds support to the daffodil-cli tool to parse and unparse EXI
infosets.

2 months agovscode-candidate: Update commads to create vscode-candidate
Shane Dell [Tue, 19 Jul 2022 15:10:09 +0000 (11:10 -0400)] 
vscode-candidate: Update commads to create vscode-candidate

2 months agoBump actions/setup-java from 3.4.0 to 3.4.1
dependabot[bot] [Mon, 11 Jul 2022 19:14:12 +0000 (19:14 +0000)] 
Bump actions/setup-java from 3.4.0 to 3.4.1

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.4.0...v3.4.1)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2 months agoUpdate woodstox-core to 6.3.0
Scala Steward [Thu, 7 Jul 2022 13:44:19 +0000 (13:44 +0000)] 
Update woodstox-core to 6.3.0

2 months agoUpdate log4j-api, log4j-core to 2.18.0
Scala Steward [Thu, 7 Jul 2022 13:44:32 +0000 (13:44 +0000)] 
Update log4j-api, log4j-core to 2.18.0

2 months agoUpdate sbt to 1.7.1
Scala Steward [Wed, 13 Jul 2022 13:10:57 +0000 (13:10 +0000)] 
Update sbt to 1.7.1

2 months agoFix output of info parser / info unparser in debug
Varun Zaver [Wed, 29 Jun 2022 12:30:30 +0000 (07:30 -0500)] 
Fix output of info parser / info unparser in debug

When the user is in debug mode with the subcommand parse, the ouput for
info unparser will now display correctly.
When the user is in debug mode with the subcommand unparse, the output
for info parser will now display correctly.

When the user is in debug mode while calling the parse or unparse
subcommand, we want to make sure that the info printed to the screen for
parser and unparser are accurate. This is done by comparing the
subcommand and the info argument. The "info parser" command prints the
parser information only when the parser subcommand is utilized. The "info
unparser" command prints the unparser information only when the unparse
subcommand is utilitzed.

DAFFODIL-2488

2 months agoWarn when expression cannot be compiled because of no context
Steve Lawrence [Wed, 22 Jun 2022 18:01:36 +0000 (14:01 -0400)] 
Warn when expression cannot be compiled because of no context

In some cases it is possible for an expression to exist without any
compilation context needed for paths, such as when in a global group or
complex type that is never referenced. Daffodil still attempts to
compile all expressions for correctness, but it cannot do so in these
cases.

When this is detected, we provide a warning that compilation is skipped
for this expression. Even though the expression is never used, the
Daffodil codebase still expects to have a CompiledExpression in these
cases. To support this without major changes, this creates a new
RuntimeAbortOp expression recipe, which causes the expression to be
treated as non-constant during compilation but leads to an error if ever
evaluated at runtime.

DAFFODIL-2654

2 months agoUpdates to the release candidate script
dependabot[bot] [Tue, 21 Jun 2022 12:47:27 +0000 (08:47 -0400)] 
Updates to the release candidate script

- Bumps fedora-minimal from 35 to 36
- Add set -x to the container build script so that we immediately exit
  and fail if there are any build errors instead of silently ignoring
- Disable the fedora updates repository when installing needed RPMs.
  This way, no matter when we build this container and no matter what
  updates Fedora adds, we will always get the same reproducable results
- Clean up the dnf cache after installation. This saves a little space
  and avoids errors about certain cache socket files that can't be saved
  in the container
- Verify the hash of the WIX binaries. We download these from github so
  it's possible that the files could change without us knowing. This
  will fail if those files ever change
- Update the daffodil-release-candidate script to run yarn install
  before building the vsix file
- Allow users to select key from a list instead of needing to copy/paste

2 months agoBump actions/setup-java from 3.3.0 to 3.4.0
dependabot[bot] [Tue, 21 Jun 2022 19:19:50 +0000 (19:19 +0000)] 
Bump actions/setup-java from 3.3.0 to 3.4.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.3.0...v3.4.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
3 months agoAdd support for comment syntax in BitDocumentPart/ByteDocumentPart
Varun Zaver [Tue, 31 May 2022 14:26:56 +0000 (09:26 -0500)] 
Add support for comment syntax in BitDocumentPart/ByteDocumentPart

By creating a comment syntax, we allow users to be able to create labels
within documentPart elements of type bit and byte.

Two regexes are used to check for the comment syntax, // and /**/.
Anything from // to the end of the line and anything from /* to */ will
be ignored and not interpreted as user data. The remaining data will be
parsed and any non-valid character will be ignored and a log warning
will be generated notifying the user that the data contains non-valid
characters and that a label should be considered. There are some
non-valid characters that are ignored and do not trigger a log because
of their extensive use in the code already.

DAFFODIL-2369

3 months agoFix deadlock issue with custom Enum implementation
Steve Lawrence [Wed, 15 Jun 2022 18:45:01 +0000 (14:45 -0400)] 
Fix deadlock issue with custom Enum implementation

Our Enum implementation use for property values/lookups has important
benefits over Scala Enumerations. However, it seems like the way we
implement it can lead to circular deadlocks. When a Value is initialized
it causes the Enum to be initialized. And the Enum initialized calls
forceConstruction to initialized all the Values. This leads to circular
instantiating that works in most cases, but sometimes leads to a
deadlock. Where this deadlock exists or how to fix it is not clear. It's
also not clear what changed to make this deadlock much more likely.

To avoid this, we this change removes the forceConstruction function and
replaces it with a manually managed Array of Enum Values. This Array is
lazily evaluated so that instantiated an Enum does not also directly
instantiate the Enum Value, avoiding the circular deadlock. This does
require extra code to define an Enum, but the majority of Enums are in
generated code so doesn't add much maintenance burden.

DAFFODIL-2704

3 months agoEliminate build warning on VSCode IDE
Michael Beckerle [Tue, 7 Jun 2022 15:19:53 +0000 (11:19 -0400)] 
Eliminate build warning on VSCode IDE

DAFFODIL-2702

3 months agoRun TDML tests with user-chosen TDML implementation
John Interrante [Mon, 6 Jun 2022 15:09:10 +0000 (11:09 -0400)] 
Run TDML tests with user-chosen TDML implementation

Define TDMLImplementation using simple enumerated type in dafext.xsd.
Add TDML implementation option to Daffodil's CLI test subcommand and
pass Option[TDMLImplementation] argument to Runner to allow CLI to run
TDML tests with different TDMLImplementations (formerly we had to edit
the TDML file, but that become undesirable).  Remove tunable
tdmlImplementation from dafext.xsd and runtime2 TDML files.  Modify
runtime2 Scala tests to pass TDMLImplementation.DaffodilC to Runner
instead.  Look up TDML_IMPLEMENTATION environment variable in
DFDLTestSuite to allow "sbt test" to run tests with different TDML
implementations too.  Add CLI integration tests to increase test
coverage of new and changed lines.

Interaction between environment variable, CLI option, and JUnit tests
is simple to understand.  CLI option or JUnit argument passed to
Runner always specifies TDML implementation.  In their absence,
environment variable specifies TDML implementation.  Otherwise, tests
run with TDMLImplementation.Daffodil (runtime1).

Also fix some inconsistencies with fill bits overlooked by a previous
pull request which extended runtime2 to read and write N-bit numbers.
See more detailed changelog below.

DAFFODIL-2697

testNonCompatibleImplementation.tdml: Add another test schema and test
case to increase test coverage of "daffodil test -I" option.

Util.scala: Use standard Scala idioms for getting DAFFODIL_HOME
environment variable and composing environment variables.

TestCLIexecuting.scala: Add new error and normal test cases to
increase test coverage of "daffodil test -I" option.  Update "not
compatible" error test case due to change in error message.

Main.scala: Import TDMLImplementation (defined in dafext.xsd) to tell
CLI and user which TDML implementations Daffodil supports.  Add TDML
implementation option to CLI test subcommand.  Pass specified TDML
implementation or None to Runner for TDML file's tests.  Include TDML
implementation's name in "not compatible with implementation" message.

tdml.xsd: Update names of TDML implementations to match names of TDML
implementations in dafext.xsd.  Change runtime2 implementation name
from "daffodil-runtime2" to "daffodilC" because a TDML implementation
name must be a valid identifier in both XML and Scala and you can't
embed a dash within a Scala identifier.

dafext.xsd: Remove tdmlImplementation tunable to avoid overly
complicated interaction between tunable, environment variable, and CLI
-I option.  Add TunableTDMLImplementation simple type (can't remove
"Tunable" from its name because TunableGenerator filters out types not
beginning with "Tunable") with enumerations listing every TDML
implementation Daffodil supports, which also creates a
TDMLImplementation enumerated type we can import into Scala files.
Add comment to clarify you still need different classpaths to call ibm
as a cross tester.  Change all enumerated simple types to use standard
xs:token idiom instead of xs:string.

parsers.c: Rename parse_fill_bytes to parse_fill_bits and make it read
exactly N fill bits (no more, no less).

parsers.h: Rename parse_fill_bytes to parse_fill_bits and rename its
first parameter to correct name end_bitPos0b (not end_bytePos0b).

unparsers.c: Rename unparse_fill_bytes to unparse_fill_bits and make
it write exactly N fill bits (no more, no less).

unparsers.h: Rename unparse_fill_bytes to unparse_fill_bits and rename
its first parameter to correct name end_bitPos0b (not end_bytePos0b).

CodeGenerator.scala: Use standard Scala idiom for getting CC and PATH
environment variables.

CodeGeneratorState.scala: Rename calls of (un)parse_fill_bytes to
(un)parse_fill_bits in generated C code.

ex_nums.tdml: Make comments show how to run CLI test subcommand with
both daffodil and daffodilC implementations.  Remove config-runtime1
and config-runtime2 since tunable tdmlImplementation doesn't exist
anymore.  Add implementation-specific error tests with
implementations="daffodil" and implementations="daffodilC" to
demonstrate how runtime1 and runtime2 handle non-fixed values in
elements with fixed attributes slightly differently depending on
validation levels.  Combine runtime2 error_limited and error_on tests
into error_parse since runtime2 doesn't have a validation option.

nested.tdml: Replace tdmlImplementation configs with comments showing
how to run CLI test subcommand with different TDML implementations.

RunnerFactory.scala: Extend Runner API with TDMLImplementation
parameter in first apply method, Option[TDMLImplementation] parameter
in new two-argument apply method, and Option[TDMLImplementation]
parameter in base constructor to allow CLI and JUnit code to pass TDML
implementation to Runner(...) if they choose to.  Put all known TDML
implementations in defaultImplementationsDefaultDefault to make it
easier to run TDML tests with any TDML implementation.

TDMLRunner.scala: Extend DFDLTestSuite constructor with
Option[TDMLImplementation] parameter to allow Runner to pass TDML
implementation, also remove __nl parameter which was only difference
between first and second constructors since second constructor isn't
called anymore and can be removed.  Make DFDLTestSuite responsible for
defining defaultTDMLImplementation (either
sys.env.get("TDML_IMPLEMENTATION") or daffodil) and
tdmlDFDLProcessorFactory (moved to DFDLTestSuite from TestCase) to try
to minimize number of times code looks up TDML_IMPLEMENTATION and
matching TDMLDFDLProcessorFactory class and constructs new factory.
Unfortunately, both CLI Main class and JUnit tests run individual TDML
test cases one by one, not en masse, and each individual test calls
Runner.getTS which always creates a new DFDLTestSuite, so every single
test will fail and throw TDMLException if TDML_IMPLEMENTATION names an
invalid TDML implementation.  Didn't try it, but maybe could move
defaultTDMLImplementation and tdmlDFDLProcessorFactory to Runner and
pass tdmlDFDLProcessorFactory instead of optTDMLImplementation to
DFDLTestSuite.  Then only first test might fail and rest of tests
might run with daffodil implementation.

Runtime2TDMLDFDLProcessor.scala: Don't set implementationName to
"daffodil-runtime2" literal string, set it to
TDMLImplementation.DaffodilC.toString to get the correct name instead.

TestRunnerFactory.java: Pass Option.apply(null) [closest Java
equivalent to passing None] to Runner in first test case.  Noticed
that IDEA complains TestRunnerFactory is calling private Runner
constructor, but sbt still compiles TestRunnerFactory with no problem.

ISRM_green_to_orange_60000.tdml: Replace tunable configs with comments
showing how to run CLI test subcommand with different TDML
implementations.

ISRM_orange_to_green_60002.tdml: Replace tunable configs with comments
showing how to run CLI test subcommand with different TDML
implementations.

MPU_green_to_orange_60004.tdml: Replace tunable configs with comments
showing how to run CLI test subcommand with different TDML
implementations.

MPU_orange_to_green_60006.tdml: Replace tunable configs with comments
showing how to run CLI test subcommand with different TDML
implementations.

collisions.tdml: Replace tunable configs with comments showing how to
run CLI test subcommand with different TDML implementations.

egress_xdcc_bw.tdml: Replace tunable configs with comments showing how
to run CLI test subcommand with different TDML implementations.

ingress_xdcc_bw.tdml: Replace tunable configs with comments showing
how to run CLI test subcommand with different TDML implementations.

orion.tdml: Replace tunable configs with comments showing how to run
CLI test subcommand with different TDML implementations.

TestCollisions.scala: Pass TDMLImplementation.DaffodilC to Runner.

TestEgressXdccBw.scala: Pass TDMLImplementation.DaffodilC to Runner.

TestExNums.scala: Pass TDMLImplementation.Daffodil and
TDMLImplementation.DaffodilC to two Runners to run both runtime1 and
runtime2 tests side by side.  Combine runtime2 error_limited and
error_on tests into error_parse since runtime2 doesn't have a
validation option.

TestIngressXdccBw.scala: Pass TDMLImplementation.DaffodilC to Runner.

TestIsrmGreenToOrange60000.scala: Pass TDMLImplementation.DaffodilC to
Runner.

TestIsrmOrangeToGreen60002.scala: Pass TDMLImplementation.DaffodilC to
Runner.

TestMpuGreenToOrange60004.scala: Pass TDMLImplementation.DaffodilC to
Runner.

TestMpuOrangeToGreen60006.scala: Pass TDMLImplementation.DaffodilC to
Runner.

TestNested.scala: Pass TDMLImplementation.DaffodilC to Runner.

TestOrion.scala: Pass TDMLImplementation.DaffodilC to Runner.

4 months agoAdded support for pluggable charsets
alexanderrevello [Mon, 7 Mar 2022 16:27:49 +0000 (11:27 -0500)] 
Added support for pluggable charsets

Refactored existing charsets to use the BitsCharsetDefinition and created support for it. To implement a charset follow the format and add the classpath in the file in resources/META-INF/services. This process has been shown in daffodil-test/.../charsets

DAFFODIL-2663

4 months agoExtend runtime2 to N-bit booleans and integers (1 <= N <= 64)
John Interrante [Mon, 16 May 2022 14:47:55 +0000 (10:47 -0400)] 
Extend runtime2 to N-bit booleans and integers (1 <= N <= 64)

Allow runtime2 to read and write N-bit booleans and integers where N
is an explicit length from 1 to 64 bits.  Add C-language unit tests
for easier debugging of N-bit-long numbers (requires Criterion test
framework with MIT license, https://github.com/Snaipe/Criterion, but
never used by or deployed with Daffodil itself so no need to change
Daffodil's LICENSE or NOTICE files).

Also avoid overwriting fields when initializing ERDs and fields of
structures containing choices within choices.  Tweak how runtime2
outputs float numbers in XML to reduce textual differences between
runtime1 and runtime2.  See more detailed file-level changelog below.

DAFFODIL-2696

build.sbt: Compile only the library C source files (not the test
source files).

Makefile: Add test goal to build and run new C-language unit tests.
Tidy C-language test source files in clean, format, and iwyu goals.

daffodil_main.c: Call flushUState after unparsing to write out any
unwritten bits still buffered inside ustate.

xml_writer.c: Revise how fixNumberIfNeeded and xmlSimpleElem print
floats to reduce textual differences between runtime1 and runtime2 to
a few cases where different numbers of significant digits get printed.

infoset.c: Add flushUState to flush any buffered bits not written yet.

intoset.h: Remove initSelf from ERD struct since we call initSelf
statically and don't need to look it up from ERD objects.  Add/change
PState/UState fields to store bits not yet written or consumed by
Daffodil in a fractional byte and maintain a number-of-bits position
of the last successful parse or unparse.  Declare flushUState to flush
any buffered bits not written yet.

parsers.c: Add read_bits helper function to store bits not yet
consumed by Daffodil in a fractional byte.  Replace helper macros with
helper functions for easier debuggability since the debugger cannot
step through helper macros (they expand to only one source line).
Merge bool8, bool16, bool32 into just one bool parse function.  Change
parse_fill_bytes to take end_bitPos0b instead of end_bytePos0b.  Make
sure all parse functions update pstate->bitPos0b only after their
parse finishes successfully, otherwise leave it unchanged.

parsers.h: Pass num_bits to parse functions to allow them to read
numbers using fewer bits.  Merge parse_{bool8, bool16, bool32} into
just one parse_bool.  Change parse_fill_bytes to take end_bitPos0b
instead of end_bytePos0b.

unparsers.c: Add write_bits helper function to store bits not yet
written by Daffodil in a fractional byte.  Replace helper macros with
helper functions for easier debuggability since the debugger cannot
step through helper macros (they expand to only one source line).
Merge bool8, bool16, bool32 into just one bool unparse function.
Change unparse_fill_bytes to take end_bitPos0b instead of
end_bytePos0b.  Make sure all unparse functions update
ustate->bitPos0b only after their unparse finishes successfully,
otherwise leave it unchanged.

unparsers.h: Pass num_bits to unparse functions to allow them to write
numbers using fewer bits.  Merge unparse_{bool8, bool16, bool32} into
just one unparse_bool.  Change unparse_fill_bytes to take end_bitPos0b
instead of end_bytePos0b.

bits.c: Add C unit tests to check that unparse and parse functions can
write and read numbers using N bits correctly (if not, these tests
help debug these functions more quickly).  These unit tests require a
C test framework library called Criterion which has to be built and
installed manually on Ubuntu 20.04, so we don't want to make build.sbt
or main.yml run these unit tests.  Developers can manually install
Criterion and run the tests with "make test" during development.

extras.c: Define rootElement to avoid an undefined reference when
linking C unit tests.

CodeGenerator.scala: Skip test files when compiling C source files
from within Daffodil itself.

BinaryBooleanCodeGenerator.scala: Pass boolean lengths from 1 to 32
bits to booleanValueAddField and parse/unparse functions as `num_bits`
parameter.  Replace bool8, bool16, bool32 function names with just one
bool function name.

BinaryFloatCodeGenerator.scala: Makes no sense to accept any lengths
other than 32 bits or 64 bits, but modify to pass lengths in bits to
valueAddField and parse/unparse functions anyway.

BinaryIntegerKnownLengthCodeGenerator.scala: Accept all integer
lengths between 1 and 64 bits in DFDL.  Map to quantized lengths (8,
16, 32, 64 bits) for C numbers but pass actual lengths in bits to
valueAddField and parse/unparse functions.

BinaryValueCodeGenerator.scala: Pass actual lengths in bits from
valueAddField to parse/unparse functions.

CodeGeneratorState.scala: Avoid overwriting fields when initializing
ERDs and fields of structures containing choices within choices by
separating initStatements into initERDStatements and
initSelfStatements and making C code call initSelf functions in
rootElement but call initERD functions in initChoice functions when
choices are resolved.  Skip whitespace characters when generating
relative paths from choice dispatch key expressions.  Insert padding
using lengths in bits instead of lengths in bytes.  Relax pattern
matching in getPrimType to accept all boolean and integer lengths
allowed by DFDL.

ElementParseAndUnspecifiedLengthCodeGenerator.scala: Update a couple
of comments.

HexBinaryCodeGenerator.scala: Move some initialization from initSelf
to initERD to avoid overwriting fields when initializing choices
within choices.

{NestedUnion,ex_nums}/generated_code.c: Show changes to generated code
(updated automatically by sbt compile) due to code generator changes
as well as renaming and rearrangement of elements in ex_nums.dfdl.xsd.

ex_nums}/generated_code.h: Show changes to generated code (updated
automatically by sbt compile) due to renaming and rearrangement of
elements in ex_nums.dfdl.xsd.

ex_nums.dat, ex_nums.dat.xml: Reduce number of significant digits in
doubles and floats to help eliminate textual differences between
runtime1 and runtime2 (allowing ex_nums.runtime{1,2}.dat.xml to be
merged into ex_nums.dat.xml).  Change some test elements to test N-bit
booleans and numbers.

ex_nums.dfdl.xsd: Force all elements to be 1-bit aligned to eliminate
differences between runtime1 and runtime2 (runtime2 doesn't pay any
attention to alignment yet).  Change some test elements to test N-bit
booleans and numbers.

ex_nums.error.dat, ex_nums.error.dat.xml: Same changes as ex_nums.dat,
ex_nums.dat.xml (also merging ex_nums.runtime{1,2}.error.dat.xml into
ex_nums.error.dat.xml).

ex_nums.tdml: Add comments to show how to run tests with daffodil
commands.  Since float numbers (for our test cases) look the same now,
need only one ex_nums.dat.xml and one ex_nums.error.dat.xml for both
runtime1 and runtime2 tests.

egress_xdcc_bw.15.dat, egress_xdcc_bw.15.dat.xml: Reduce number of
significant digits in alt, lon doubles to eliminate differences
between runtime1 and runtime2.

egress_xdcc_bw.19.dat, egress_xdcc_bw.19.dat.xml: Reduce number of
significant digits in some x,y,z doubles to eliminate differences
between runtime1 and runtime2.

ingress_xdcc_bw.115.dat, ingress_xdcc_bw.115.dat.xml: Reduce number of
significant digits in some alt,bearing,confidence,lat,lon,speed
doubles to eliminate differences between runtime1 and runtime2.

4 months agoUpdate jackson-core to 2.13.3
Scala Steward [Sat, 14 May 2022 19:03:14 +0000 (21:03 +0200)] 
Update jackson-core to 2.13.3

4 months agoBump actions/github-script from 6.0.0 to 6.1.0
dependabot[bot] [Fri, 13 May 2022 19:13:52 +0000 (19:13 +0000)] 
Bump actions/github-script from 6.0.0 to 6.1.0

Bumps [actions/github-script](https://github.com/actions/github-script) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v6.0.0...v6.1.0)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
4 months agoBump actions/setup-java from 3.2.0 to 3.3.0
dependabot[bot] [Wed, 4 May 2022 19:12:29 +0000 (19:12 +0000)] 
Bump actions/setup-java from 3.2.0 to 3.3.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.2.0...v3.3.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
4 months agoBump actions/setup-java from 3.1.1 to 3.2.0
dependabot[bot] [Thu, 28 Apr 2022 12:43:21 +0000 (08:43 -0400)] 
Bump actions/setup-java from 3.1.1 to 3.2.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

- Set `cache: sbt` settting to enable dependency caching
- Move checkout to before setup-java, needed for cache: sbt to work

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoBump actions/checkout from 3.0.1 to 3.0.2
dependabot[bot] [Thu, 21 Apr 2022 19:15:58 +0000 (19:15 +0000)] 
Bump actions/checkout from 3.0.1 to 3.0.2

Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.0.1...v3.0.2)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoBump codecov/codecov-action from 3.0.0 to 3.1.0
dependabot[bot] [Thu, 21 Apr 2022 19:15:55 +0000 (19:15 +0000)] 
Bump codecov/codecov-action from 3.0.0 to 3.1.0

Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoBump actions/checkout from 3.0.0 to 3.0.1
dependabot[bot] [Thu, 14 Apr 2022 19:15:44 +0000 (19:15 +0000)] 
Bump actions/checkout from 3.0.0 to 3.0.1

Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoBump actions/setup-java from 3.1.0 to 3.1.1
dependabot[bot] [Mon, 11 Apr 2022 19:19:50 +0000 (19:19 +0000)] 
Bump actions/setup-java from 3.1.0 to 3.1.1

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoUpdate scalacheck to 1.16.0
Scala Steward [Fri, 8 Apr 2022 08:07:11 +0000 (10:07 +0200)] 
Update scalacheck to 1.16.0

5 months agoUpdate icu4j to 71.1
Scala Steward [Thu, 7 Apr 2022 20:03:31 +0000 (22:03 +0200)] 
Update icu4j to 71.1

bin.LICENSE: Incorporate icu4c/LICENSE changes from ICU 71.1.

5 months agoBump codecov/codecov-action from 2.1.0 to 3.0.0
dependabot[bot] [Tue, 5 Apr 2022 19:13:17 +0000 (19:13 +0000)] 
Bump codecov/codecov-action from 2.1.0 to 3.0.0

Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 2.1.0 to 3.0.0.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v2.1.0...v3.0.0)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoUpdate Saxon-HE to 11.3
Scala Steward [Mon, 28 Mar 2022 16:04:39 +0000 (18:04 +0200)] 
Update Saxon-HE to 11.3

5 months agoBump actions/setup-java from 3.0.0 to 3.1.0
dependabot[bot] [Fri, 1 Apr 2022 19:13:03 +0000 (19:13 +0000)] 
Bump actions/setup-java from 3.0.0 to 3.1.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.0.0 to 3.1.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
5 months agoStandardize licenses and notices
John Interrante [Wed, 30 Mar 2022 17:10:29 +0000 (10:10 -0700)] 
Standardize licenses and notices

Bring changes that I just made to daffodil-vscode's bin.LICENSE and
bin.NOTICE back to daffodil's bin.LICENSE and bin.NOTICE since we want
to standardize both repos' licenses and notices using the same
formatting, ordering, and wording to make future comparisons easier.

NOTICE: Update Scala copyright years in sub-notice attributing
UniquenessCache.scala to match bin.NOTICE.

bin.LICENSE: Remove 'lib/' from all filenames.  If listing individual
files from a jar, list jar filename first followed by " with:" and
individual files on subsequent lines.  Change next line's wording from
"This product bundles '...' with the above files" to "This product
bundles '...'  from the above files."  Update ICU license (ICU 70 had
changed parts of it).  Sort all sub-licenses alphabetically by
filenames.

bin.NOTICE: Remove 'lib/' from all filenames.  Add daffodil-lib's
special sub-notice attributing UniquenessCache.scala to Scala library.
No need to add sub-notices for other daffodil jars since their
sub-notice is the same as top of NOTICE.  Merge sub-notice for
scala-library and scala-reflect since both libraries have identical
notices.

daffodil-lib/src/main/resources/META-INF/NOTICE: Update Scala
copyright years in sub-notice attributing UniquenessCache.scala to
match bin.NOTICE.

daffodil-schematron/src/main/resources/META-INF/LICENSE: Change
ordering and prologue of Schematron sub-licenses to match bin.LICENSE.

DAFFODIL-2680

5 months agoRefresh bin.NOTICE and improve bin.LICENSE
John Interrante [Tue, 22 Mar 2022 18:22:53 +0000 (11:22 -0700)] 
Refresh bin.NOTICE and improve bin.LICENSE

Review all transitive dependencies and refresh any missing or updated
sub-NOTICEs in bin.NOTICE.  Improve bin.LICENSE as well for
consistency with bin.NOTICE.

bin.LICENSE: List jar filenames first, then English text and then
sub-LICENSEs to be more similar to bin.NOTICE.  Add W3 schemas and
documents in lib/org.xmlresolver.xmlresolver-<VERSION>-data.jar to W3C
licensed components.  Note jar filenames are not sorted alphabetically
(yet).

bin.NOTICE: Reorder all sub-NOTICEs to match same order as alphabetic
listing of jars in lib directory.  Shrink bin.NOTICE by removing the
redundant line "This product includes software developed at The Apache
Software Foundation (https://www.apache.org/)" from all sub-NOTICEs
(explicitly allowed by Apache instructions).  Shrink bin.NOTICE even
further by listing just the jar's filename followed by its sub-NOTICE,
which nearly always mentions the binary component's name as well.
Update all out of date sub-NOTICEs and add missing sub-NOTICEs for
these new transitive dependencies,

  commons-codec.commons-codec-1.11.jar
  commons-logging.commons-logging-1.2.jar
  org.apache.httpcomponents.httpclient-4.5.13.jar
  org.apache.httpcomponents.httpcore-4.4.13.jar

DAFFODIL-2680

6 months agoUpdate copyright year to 2022
Steve Lawrence [Fri, 25 Mar 2022 14:23:08 +0000 (10:23 -0400)] 
Update copyright year to 2022

DAFFODIL-2682

6 months agoStart developing Daffodil 3.4.0
John Interrante [Tue, 22 Mar 2022 13:54:35 +0000 (06:54 -0700)] 
Start developing Daffodil 3.4.0

build.sbt: Change version to 3.4.0-SNAPSHOT.

DAFFODIL-2681

6 months agoPrepare for Release 3.3.0 v3.3.0 v3.3.0-rc1
John Interrante [Thu, 17 Mar 2022 16:52:02 +0000 (09:52 -0700)] 
Prepare for Release 3.3.0

build.sbt: Remove SNAPSHOT.

DAFFODIL-2677

6 months agoFix invariant broken masking of unparse error.
Michael Beckerle [Mon, 14 Mar 2022 23:16:39 +0000 (19:16 -0400)] 
Fix invariant broken masking of unparse error.

Add test files focused on enums using repType/repValues
in the simplest possible way.

DAFFODIL-2673

6 months agoCleanup solarcloud warning. Remove do-while(false) local block workaround
Michael Beckerle [Mon, 14 Mar 2022 19:20:48 +0000 (15:20 -0400)] 
Cleanup solarcloud warning. Remove do-while(false) local block workaround

Some workaround is necessary. I used a cleaner one than the do-while thing.

DAFFODIL-2674

6 months agoCLI does not output diagnostics on restore parser
Michael Beckerle [Fri, 11 Mar 2022 17:34:13 +0000 (12:34 -0500)] 
CLI does not output diagnostics on restore parser

Added CLI test that verifies SDW on save-parser, not on using it.

DAFFODIL-2267

6 months agoAdded dfdlx:alignmentKind automatic/manual property
Michael Beckerle [Thu, 10 Mar 2022 21:31:04 +0000 (16:31 -0500)] 
Added dfdlx:alignmentKind automatic/manual property

ParseError on charset not aligned.

This is a significant change in behavior, though because the compiler
puts down mandatory text alignment fill regions the automatic
alignmentby the I/O layer was redundant.

Without the mandatory text alignment regions, the I/O layer really
must not do auto alignment.

Removed dead code from TextParser and unused I/O layer getString
method.

DAFFODIL-2652

6 months agoFix saveParser CLI with config having tunables.
Michael Beckerle [Thu, 10 Mar 2022 22:50:31 +0000 (17:50 -0500)] 
Fix saveParser CLI with config having tunables.

The CLI's loading of config files was not
trimming the node, hence, getting PCDATA nodes
instead of the strings it expected.

Shares code from DaffodilTunables object now.

centralize tunables logic and config file handling

Introduced DaffodilConfig class to represent the XML config-file

DAFFODIL-2650

6 months agoRevert "Update alignment to improve correctness and prevent deadlocks"
Michael Beckerle [Wed, 9 Mar 2022 18:19:26 +0000 (13:19 -0500)] 
Revert "Update alignment to improve correctness and prevent deadlocks"

This reverts commit 9043425760dae277eff36087a2e715c70793db9c.
This was an attempt to fix DAFFODIL-2626 but it caused too many
regressions (unparser deadlocks in various schemas)

The ticket DAFFODIL-2626 will be reopened.

The tickets for NITF and P8 deadlocks (the regressions) are fixed by this.

DAFFODIL-2662, DAFFODIL-2666

6 months agoUpdate jackson-core to 2.13.2
Scala Steward [Sun, 6 Mar 2022 23:05:18 +0000 (00:05 +0100)] 
Update jackson-core to 2.13.2

6 months agoUpdate log4j-api, log4j-core to 2.17.2
Scala Steward [Sun, 27 Feb 2022 09:03:30 +0000 (10:03 +0100)] 
Update log4j-api, log4j-core to 2.17.2

6 months agoBump actions/checkout from 2.4.0 to 3.0.0
dependabot[bot] [Tue, 1 Mar 2022 19:19:32 +0000 (19:19 +0000)] 
Bump actions/checkout from 2.4.0 to 3.0.0

Bumps [actions/checkout](https://github.com/actions/checkout) from 2.4.0 to 3.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2.4.0...v3.0.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
6 months agoUpdate Apache Daffodil KEYS
Shane Dell [Wed, 2 Mar 2022 19:38:42 +0000 (14:38 -0500)] 
Update Apache Daffodil KEYS

6 months agoChange output of dfdlx:trace from stderr to the logger
U-COLUMBIA\arevello [Tue, 22 Feb 2022 21:51:12 +0000 (16:51 -0500)] 
Change output of dfdlx:trace from stderr to the logger

dfdlx:trace now outputs to the info level of the logger instead of the previous stderr. A CLI parsing test was added to demonstrate the feature

DAFFODIL-2575

6 months agoBump actions/setup-java from 2.5.0 to 3.0.0
dependabot[bot] [Thu, 24 Feb 2022 19:16:58 +0000 (19:16 +0000)] 
Bump actions/setup-java from 2.5.0 to 3.0.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 2.5.0 to 3.0.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v2.5.0...v3.0.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
7 months agoUpdate scala-parser-combinators to 2.1.1
Scala Steward [Sat, 19 Feb 2022 17:03:56 +0000 (18:03 +0100)] 
Update scala-parser-combinators to 2.1.1

7 months agoUpdate sbt-native-packager to 1.9.9
Scala Steward [Mon, 21 Feb 2022 19:03:41 +0000 (20:03 +0100)] 
Update sbt-native-packager to 1.9.9

7 months agoCheck for RepType when getting element length
Josh Adams [Thu, 2 Dec 2021 03:07:32 +0000 (22:07 -0500)] 
Check for RepType when getting element length

Now using a repElement value that is either the element itself or, if
optRepTypeElement is defined, the repTypeElement.  This avoids the
proliferating conditionals where we needed to check to see if
optRepTypeElement was defined or not.

There may be more places where repElement should be used, but this
covers all of our existing needs.

DAFFODIL-2596

7 months agoUpdate Saxon-HE to 11.2
Scala Steward [Fri, 18 Feb 2022 13:04:06 +0000 (14:04 +0100)] 
Update Saxon-HE to 11.2

7 months agoImprove diagnostic for no forward progress
Josh Adams [Thu, 17 Feb 2022 16:29:30 +0000 (11:29 -0500)] 
Improve diagnostic for no forward progress

Improved diagnostic message now contains reference to the array and
describes how it is stuck in an infinite loop.

DAFFODIL-2576

7 months agoModify the release candidate container to work for both daffodil and vscode
Steve Lawrence [Fri, 11 Feb 2022 20:49:06 +0000 (15:49 -0500)] 
Modify the release candidate container to work for both daffodil and vscode

- When running the release candidate script, prompt the user for either
  "daffodil" or "daffodil-vscode" to determine which repository to
  release. This changes which repo is checked out, how the repo is
  built, and which files are copied to the dist directory. All other
  automated build steps are common and are unchanged.
- Daffodil release files are still installed to dist.apache.org/repos/dist/dev/daffodil/
- VS Code release files are installed to dist.apache.org/repos/dist/dev/daffodil/daffodil-vscode

Also did some cleanup to the container script:

- Move wix files and Docker setup/entrypoint scripts out of /root and
  into /opt and /usr/bin, respectively. With this change, the only files
  in /root are build files, making it easier to verify release artifacts
- Add the --rm option to podman run. This container is short lived and
  does not need to exist once it finishes

DAFFODIL-2655

7 months agoAdded charset for ICAO Aircraft IDs.
Michael Beckerle [Tue, 15 Feb 2022 22:39:59 +0000 (17:39 -0500)] 
Added charset for ICAO Aircraft IDs.

Added test showing TDML Runner bug.

DAFFODIL-2659, DAFFODIL-2661

7 months agoCall setFinished on the correct data output stream
Josh Adams [Mon, 14 Feb 2022 22:51:20 +0000 (17:51 -0500)] 
Call setFinished on the correct data output stream

When splitting the data output stream during unparse for a bitOrder
change, we had been setting the incorrect DOS to finished. We need to
call dos.setFinished(UState) before we update the UState's
dataOutputStream to the new split DOS.

DAFFODIL-2653

7 months agodfdl:contentLength and valueLength for prefixed
Michael Beckerle [Mon, 14 Feb 2022 18:38:00 +0000 (13:38 -0500)] 
dfdl:contentLength and valueLength for prefixed

For lengthKind prefixed and complex types,
captures the content and value lengths.
For simple types captures the content length.

valueLength for simpleTypes unchanged.

Added test cases for complex types and
contentLength for simple types.

Test added showing prefixed + valueLength for
simple values with trimming of pad-char does
NOT work (DAFFODIL-2658)

Tests added to improve coverage of prefixed
length corner cases around lengthUnits
'characters' and utf-8/variable-width encodings.

Rename maybeComputedLength to reflect "InBits" units.

DAFFODIL-2656, DAFFODIL-2657, DAFFODIL-2658

7 months agoUpdate sbt-native-packager to 1.9.8
Scala Steward [Mon, 14 Feb 2022 21:06:57 +0000 (22:06 +0100)] 
Update sbt-native-packager to 1.9.8

7 months agoUpdate alignment to improve correctness and prevent deadlocks
Steve Lawrence [Wed, 2 Feb 2022 18:47:38 +0000 (13:47 -0500)] 
Update alignment to improve correctness and prevent deadlocks

Three changes are made to how alignment works:

1. When statically determining if alignment is needed or not, we
   previously did not implement prefixed length elements and just
   assumed no alignment information. This prevented optimizations when
   prefixed elements existed. This implements the approximate length of
   prefixed elements to be a multiple of their lengthUnits, which should
   allow many alignment parsers/unparsers to optimize out and avoid
   deadlocks.

2. When asking about the alignment of prior elements (e.g. parents,
   previous siblings) we can sometimes get an answer of no information.
   This most commonly happens when asking about the prior alignment of
   model group that is the first child in a global declaration. In these
   cases, we do not know how or where the global declaration will be
   referenced, and so it could have any alignment. And because the
   alignment algorithm only looks at lexical scope, it cannot make any
   decisions based on those references. So, in this kinds of cases where
   we have no information about prior alignment, we must assume we have
   no information. This means we will now have some alignment
   parsers/unparsers that we simply cannot optimize out, but this also
   means we fix a bug where there was required alignment that was
   incorrectly optimized out because it assumed known alignment.

3. Be less pessimistic about assigning lengths of the
   SimpleTypeRetryUnparser. This unparser previously assumed no length
   information about the suspension, which meant that we lost bit
   position information about suspensions and the locations of buffered
   data output streams. This could lead to AlignmentFillUnparsers
   getting deadlocked. This changes the logic so that when we can
   statically determine that there will be no padding/fill bytes/etc.
   and that the actual unparsed length will be exactly the same as the
   target unparse length, then we can use that length and give more
   information to the DataOutputStreams to avoid deadlocks.

DAFFODIL-2626

7 months agoBump actions/github-script from 5.1.0 to 6.0.0
dependabot[bot] [Fri, 11 Feb 2022 20:06:23 +0000 (20:06 +0000)] 
Bump actions/github-script from 5.1.0 to 6.0.0

Bumps [actions/github-script](https://github.com/actions/github-script) from 5.1.0 to 6.0.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v5.1.0...v6.0.0)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
7 months agoFix fn:exists when unparsing non-blocking expressions
Steve Lawrence [Wed, 9 Feb 2022 15:46:46 +0000 (10:46 -0500)] 
Fix fn:exists when unparsing non-blocking expressions

Unparsing non-blocking expressions represent expression that are only
backwards referencing and will not require a suspension. This means that
the associated node must be final, and so we can immediately respond
that the element exists or not. Rethrowing the associated exception not
correct in this case. That is only correct when suspensions will be
involve, in which case that exception triggers the suspension logic.

DAFFODIL-2648

7 months agoUpdate Saxon-HE to 11.1.1
Scala Steward [Fri, 4 Feb 2022 21:06:37 +0000 (22:06 +0100)] 
Update Saxon-HE to 11.1.1

Dependencies.scala: Remove xmlresolver lines now redundant since
Saxon-HE 11.1.1 has added missing transitive dependencies on
xmlresolver and xmlresolver data jars.

7 months agoUpdate typesafe:config to 1.4.2
Scala Steward [Wed, 2 Feb 2022 15:08:49 +0000 (16:08 +0100)] 
Update typesafe:config to 1.4.2

7 months agoFix Incorrect isError Scaladoc
olabusayoT [Mon, 31 Jan 2022 19:56:40 +0000 (14:56 -0500)] 
Fix Incorrect isError Scaladoc

- scaladoc described opposite behavior of isError

DAFFODIL-2641

7 months agoUpdate Saxon-HE to 11.1
Scala Steward [Tue, 1 Feb 2022 21:20:48 +0000 (22:20 +0100)] 
Update Saxon-HE to 11.1

Add new xmlresolver dependencies needed by Saxon 11.1

bin.LICENSE - Remove PCOLLECTIONS notice (gone since Saxon 9.9.1.1),
THAI (gone since Saxon 11.1), and UNICODE (ditto).  Also sort "This
product bundles 'NAME' ..."  sections alphabetically by NAME and word
each first line more uniformly.

bin.NOTICE - Add xmlresolver notice.

Dependencies.scala - Update Saxon-HE to 11.1 and add the necessary
xmlresolver dependencies.

7 months agoSDE if include/import schemaLocation not found.
Michael Beckerle [Tue, 1 Feb 2022 16:08:11 +0000 (11:08 -0500)] 
SDE if include/import schemaLocation not found.

DAFFODIL-2642

7 months agoReplace WeakHashMap TDML cache with a custom cache we have more control over
Steve Lawrence [Mon, 31 Jan 2022 13:59:31 +0000 (08:59 -0500)] 
Replace WeakHashMap TDML cache with a custom cache we have more control over

Commit 4cc0863e71 modified the TDML compile result cache to use a
WeakHashMap. While this worked in some cases, it relied on the garbage
collector not being too aggressive. If the garbage collector
aggressively cleans up our WeakHashMap entries, or something like an IDE
frequently causes the GC to be run in between tests, it becomes
difficult to share compiled results between different DFDL Test Suites.
This leads to excessive schema compilation.

To fix this, this modifies to global TDML cache to be a normal HashMap,
with expiration times stored with each compile result entry. When a DFDL
Test suite finishes, it marks the compile results it uses with an
expiration time. Entries are removed form this cache when the expire
time is reached.

To minimize the size of this global cache, we also only store
non-embedded schemas in it. Embedded schemas cannot be shared between
different TDML files/DFDL Test suites, so putting them in the global
cache is unnecessary. Instead, compile results for embedded schemas are
stored in a cache local to the DFDL Test Suite. They will be garbage
collected when the DFDL Test Suite is garbage collected.

DAFFODIL-2627

7 months agoUpdate sbt to 1.6.2
Scala Steward [Tue, 1 Feb 2022 05:11:43 +0000 (06:11 +0100)] 
Update sbt to 1.6.2

7 months agoUpdate os-lib to 0.8.1
Scala Steward [Mon, 31 Jan 2022 21:05:24 +0000 (22:05 +0100)] 
Update os-lib to 0.8.1

7 months agoUpdate daffodil-cli link syntax
Brennan Fox [Tue, 1 Feb 2022 03:15:28 +0000 (22:15 -0500)] 
Update daffodil-cli link syntax

7 months agoAdded test to confirm delimiter behavior.
Michael Beckerle [Mon, 31 Jan 2022 13:59:04 +0000 (08:59 -0500)] 
Added test to confirm delimiter behavior.

DAFFODIL-2639

7 months agoUpdate xercesImpl to 2.12.2
Scala Steward [Thu, 27 Jan 2022 11:06:54 +0000 (12:06 +0100)] 
Update xercesImpl to 2.12.2

7 months agoDisable capture value length parsers for all delimited simple types
Steve Lawrence [Wed, 26 Jan 2022 12:22:56 +0000 (07:22 -0500)] 
Disable capture value length parsers for all delimited simple types

We already disable capture value length parsers for simple types with
representation="text" because the value parsers for those simple text
types directly calculate the value length themselves. This is needed
because these parsers have special logic for excluding things like
delimiters and padding from the length.

Additionally, simple types that aren't text (e.g. hex binary, packed
decimal) but are delimited use the same simple text parsers that capture
value length. So we must also disable capture value length parsers for
delimited simple types as well. This ensures we do not have multiple
capture value length logic for the same element that may conflict.

DAFFODIL-2635

7 months agoUse setVariable value expression to get referenced elements
Steve Lawrence [Mon, 24 Jan 2022 17:56:51 +0000 (12:56 -0500)] 
Use setVariable value expression to get referenced elements

When trying to calculcate which elements are referenced via
dfdl:setVariable expressions, which is used for things like value and
content length, we incorectly used the default expression associated
with the dfdl:defineDariable instead of the actual value expression of
the dfdl:setVariable. This modifies the logic to use the correct
expression.

DAFFODIL-2629

7 months agoAdded test to reproduce prefixed length aspect.
Michael Beckerle [Mon, 24 Jan 2022 17:42:01 +0000 (12:42 -0500)] 
Added test to reproduce prefixed length aspect.

DAFFODIL-2626

7 months agoEnsure quasi elements for type calc expressions have a parent
Steve Lawrence [Mon, 24 Jan 2022 13:30:20 +0000 (08:30 -0500)] 
Ensure quasi elements for type calc expressions have a parent

These quasi elements aren't really part of the infoset so a parent
element isn't actually needed, except for in some rare cases such as
when walking the infoset in the interactive debugger. There may also be
other edge cases we are unaware of. So ensure that these quasi type calc
elements have a parent, making it the same as its related simple
element.

DAFFODIL-2627

7 months agoAdd test that reproduces Runtime SDE bug.
Michael Beckerle [Fri, 21 Jan 2022 14:05:10 +0000 (09:05 -0500)] 
Add test that reproduces Runtime SDE bug.

DAFFODIL-2629

8 months agoAdd a global TDML CompileResult cache
Steve Lawrence [Fri, 21 Jan 2022 19:30:15 +0000 (14:30 -0500)] 
Add a global TDML CompileResult cache

We previosly only cache CompileResults on individual DFDLTestSuites.
This meant that we could compiled schemas within a single test suite,
but not between tests suites. This could lead to lots of duplicate
schema compilation if multiple .tdml files referenced the same schema

To avoid this, CompileResults are now stored in a global WeakHashMap
instead of the DFDLTestSuite. And DFDLTestSuites are changed to maintain
strong references to the keys of the CompileResult they use. This
ensures that as long as a DFDLTestSuite exists, so will all of its
CompileResults, so tests within a DFDLTestSuite can share them. And
after the DFDLTestSuite is garbage collected, as long as those weak
references aren't also garbage collected, other DFDLTestSuites will be
able to use them, and help to minimize compilation same schemas used in
different TDML files.

DAFFODIL-2627

8 months agoReset genjavadoc-plugin to 0.18
Scala Steward [Fri, 14 Jan 2022 13:09:57 +0000 (08:09 -0500)] 
Reset genjavadoc-plugin to 0.18