summaryrefslogtreecommitdiff
path: root/xsd/cxx/tree
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-02-19 10:31:47 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-02-19 10:31:47 +0200
commit5ec1c8ff21b5c19e39d5bd12aa3a017a78b56b98 (patch)
treea137f9321fcdeaf838cbf3cb8a286d5f09fc3955 /xsd/cxx/tree
parente571ff926d9736f48bb37948e29db90e7c6e68d5 (diff)
Add support for translating schema paths in fpt mode
New options: --schema-file-regex, --schema-file-regex-trace.
Diffstat (limited to 'xsd/cxx/tree')
-rw-r--r--xsd/cxx/tree/elements.cxx8
-rw-r--r--xsd/cxx/tree/generator.cxx38
-rw-r--r--xsd/cxx/tree/generator.hxx1
3 files changed, 35 insertions, 12 deletions
diff --git a/xsd/cxx/tree/elements.cxx b/xsd/cxx/tree/elements.cxx
index aafc442..503ca72 100644
--- a/xsd/cxx/tree/elements.cxx
+++ b/xsd/cxx/tree/elements.cxx
@@ -1253,6 +1253,7 @@ namespace CXX
//
Type t (type_);
Boolean weak (u.context ().count ("weak"));
+ SemanticGraph::Schema& s (u.schema ());
if (weak && t == header)
{
@@ -1262,7 +1263,7 @@ namespace CXX
t = forward;
else
{
- schema_.dispatch (u.schema ());
+ schema_.dispatch (s);
return;
}
}
@@ -1270,7 +1271,10 @@ namespace CXX
if (t == source && !weak)
return;
- SemanticGraph::Path path (u.path ());
+ SemanticGraph::Path path (
+ s.context ().count ("renamed")
+ ? s.context ().get<SemanticGraph::Path> ("renamed")
+ : u.path ());
// Try to use the portable representation of the path. If that
// fails, fall back to the native representation.
diff --git a/xsd/cxx/tree/generator.cxx b/xsd/cxx/tree/generator.cxx
index ae86767..c13bf1f 100644
--- a/xsd/cxx/tree/generator.cxx
+++ b/xsd/cxx/tree/generator.cxx
@@ -834,6 +834,7 @@ namespace CXX
generate (Tree::CLI::Options const& ops,
Schema& schema,
Path const& file_path,
+ Boolean fpt,
StringLiteralMap const& string_literal_map,
const WarningSet& disabled_warnings,
FileList& file_list,
@@ -1048,19 +1049,13 @@ namespace CXX
Path (cxx_expr.merge (name), boost::filesystem::native));
}
- if (NarrowString dir = ops.value<CLI::output_dir> ())
+ Path out_dir;
+
+ if (NarrowString dir = ops.value<CLI::output_dir> ())
{
try
{
- Path path (dir, boost::filesystem::native);
-
- hxx_path = path / hxx_path;
- ixx_path = path / ixx_path;
- fwd_path = path / fwd_path;
-
- for (Paths::Iterator i (cxx_paths.begin ());
- i != cxx_paths.end (); ++i)
- *i = path / *i;
+ out_dir = Path (dir, boost::filesystem::native);
}
catch (InvalidPath const&)
{
@@ -1069,6 +1064,29 @@ namespace CXX
}
}
+ if (fpt && !generate_xml_schema)
+ {
+ // In the file-per-type mode the schema files are always local
+ // unless the user added the directory so that we propagate this
+ // to the output files.
+ //
+ Path fpt_dir (file_path.branch_path ());
+
+ if (!fpt_dir.empty ())
+ out_dir /= fpt_dir;
+ }
+
+ if (!out_dir.empty ())
+ {
+ hxx_path = out_dir / hxx_path;
+ ixx_path = out_dir / ixx_path;
+ fwd_path = out_dir / fwd_path;
+
+ for (Paths::Iterator i (cxx_paths.begin ());
+ i != cxx_paths.end (); ++i)
+ *i = out_dir / *i;
+ }
+
//
//
WideOutputFileStream hxx (hxx_path, ios_base::out);
diff --git a/xsd/cxx/tree/generator.hxx b/xsd/cxx/tree/generator.hxx
index 0bb5bb2..2e50392 100644
--- a/xsd/cxx/tree/generator.hxx
+++ b/xsd/cxx/tree/generator.hxx
@@ -37,6 +37,7 @@ namespace CXX
generate (CLI::Options const& options,
XSDFrontend::SemanticGraph::Schema&,
XSDFrontend::SemanticGraph::Path const& file,
+ Boolean file_per_type,
StringLiteralMap const&,
const WarningSet& disabled_warnings,
FileList& file_list,