Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 57 additions & 28 deletions configure.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -84,6 +84,8 @@ function usage() // {{{
--disable-libxml-check Disable the libxml 2.7.4+ requirement check
--with-php=PATH Path to php CLI executable [detect]
--with-lang=LANG Language to build [{$acd['LANG']}]
--with-base-lang=LANG Language directory that is the base
(authoritative) manual tree [{$acd['LANG_BASE_DIR']}]
--with-partial=my-xml-id Root ID to build (e.g. <book xml:id="MY-ID">) [{$acd['PARTIAL']}]
--with-jing=auto|yes|no Validate with Jing (requires Java) instead of
libxml [{$acd['JING']}]
Expand DownExpand Up@@ -211,7 +213,7 @@ function print_dom_errors()
function print_xml_errors()
{
global $ac;
$report = $ac['LANG'] == 'en' || $ac['XPOINTER_REPORTING'] == 'yes';
$report = is_single_language() || $ac['XPOINTER_REPORTING'] == 'yes';
$output = ( $ac['STDERR_TO_STDOUT'] == 'yes' ) ? STDOUT : STDERR ;

$errors = libxml_get_errors();
Expand DownExpand Up@@ -296,7 +298,9 @@ function find_xml_files($path) // {{{
'CHMONLY_INCL_BEGIN' => '<!--',
'CHMONLY_INCL_END' => '-->',
'LANG' => 'en',
'LANGS' => ['en'],
'LANGDIR' => "{$rootdir}/en",
'LANG_BASE_DIR' => 'en',
'ENCODING' => 'utf-8',
'PARTIAL' => 'no',
'DETAILED_ERRORMSG' => 'no',
Expand DownExpand Up@@ -382,6 +386,10 @@ function find_xml_files($path) // {{{
$ac['LANG'] = $v;
break;

case 'base-lang':
$ac['LANG_BASE_DIR'] = $v;
break;

case 'partial':
if ($v == "yes") {
if (isset($_SERVER['argv'][$k+1])) {
Expand DownExpand Up@@ -510,23 +518,39 @@ function find_xml_files($path) // {{{
} else if ($ac['LANG'] == 'yes') {
$ac['LANG'] = 'en';
}
if ($ac["LANG"] == "en") {
// Language dirs in consideration, in overwriting order (last wins):
// the base manual tree first, an optional translation overlay second.

if (!in_array('LANG', $overridden_settings)) {
$ac['LANG'] = $ac['LANG_BASE_DIR'];
}
$ac['LANGS'] = [$ac['LANG_BASE_DIR']];
if ($ac['LANG'] !== $ac['LANG_BASE_DIR']) {
$ac['LANGS'][] = $ac['LANG'];
}

if (is_single_language()) {
$ac["TRANSLATION_ONLY_INCL_BEGIN"] = "<!--";
$ac["TRANSLATION_ONLY_INCL_END"] = "-->";
}

checkvalue($ac['LANG']);
file_put_contents( __DIR__ . "/temp/lang" , $ac['LANG'] );

checking("whether the language is supported");
$LANGDIR = "{$ac['rootdir']}/{$ac['LANG']}";
if (!file_exists($LANGDIR) || !is_readable($LANGDIR)) {
checkerror("No language directory found.");
}

$ac['LANGDIR'] = basename($LANGDIR);
$ac['EN_DIR'] = 'en';
checkvalue("yes");

function is_single_language() : bool
{
global $ac;
return count($ac['LANGS']) === 1;
}

checking("for partial build");
checkvalue($ac['PARTIAL']);

Expand DownExpand Up@@ -560,9 +584,9 @@ function git_status()
return;

$repos = array();
$repos['doc-base'] = $ac['basedir'];
$repos['en'] = "{$ac['rootdir']}/{$ac['EN_DIR']}";
$repos[$ac['LANG']] = "{$ac['rootdir']}/{$ac['LANG']}";
$repos['doc-base'] = $ac['basedir'];
$repos[$ac['LANG_BASE_DIR']] = "{$ac['rootdir']}/{$ac['LANG_BASE_DIR']}";
$repos[$ac['LANG']] = "{$ac['rootdir']}/{$ac['LANG']}";

$output = "";
foreach ( $repos as $name => $path )
Expand DownExpand Up@@ -609,11 +633,13 @@ function dtd_pe_body( string $filename = '' )
$baseEnt2 = dtd_pe_body( __DIR__ . '/temp/file-entities.ent' );
$baseEnt3 = dtd_pe_body( __DIR__ . '/temp/entities.ent' );

$langOne1 = dtd_pe_body( __DIR__ . '/../en/language-defs.ent' );
$langOne2 = dtd_pe_body( __DIR__ . '/../en/language-snippets.ent' );
$langOne3 = dtd_pe_body( __DIR__ . '/../en/extensions.ent' );
$base = $ac['LANG_BASE_DIR'];

if ( $lang == 'en ' )
$langOne1 = dtd_pe_body( __DIR__ . "/../$base/language-defs.ent" );
$langOne2 = dtd_pe_body( __DIR__ . "/../$base/language-snippets.ent" );
$langOne3 = dtd_pe_body( __DIR__ . "/../$base/extensions.ent" );

if ( is_single_language() )
{
$langTwo1 = dtd_pe_body();
$langTwo2 = dtd_pe_body();
Expand All@@ -632,7 +658,9 @@ function dtd_pe_body( string $filename = '' )
$chmpath = dtd_pe_body();

$conf = [];

$conf[] = "<!ENTITY LANG '$lang'>";

$conf[] = "<!ENTITY manual.chmonly $chmpath>";

$conf[] = "<!ENTITY % base-entities $baseEnt1>";
Expand All@@ -647,7 +675,7 @@ function dtd_pe_body( string $filename = '' )
$conf[] = "<!ENTITY % translation-snippets $langTwo2>";
$conf[] = "<!ENTITY % translation-extensions $langTwo3>";

$outdir = __DIR__ . '/../en/temp';
$outdir = __DIR__ . "/../$base/temp";
realpain( $outdir , mkdir: true );
file_put_contents( "{$outdir}/conf.dtd" , implode( "\n" , $conf ) );
}
Expand All@@ -662,7 +690,8 @@ function dtd_file_entities()
$parts = array();
$parts[] = $withphp;
$parts[] = __DIR__ . "/scripts/file-entities.php";
if ( $lang != "en" )
$parts[] = $ac['LANG_BASE_DIR'];
if ( $lang != $ac['LANG_BASE_DIR'] )
$parts[] = $lang;
if ( $withchm )
$parts[] = '--chmonly';
Expand All@@ -688,8 +717,8 @@ function dtd_text_entities()

$parts = [ $php
, __DIR__ . "/scripts/text-entities.php"
, "en" ];
if ( $lang != "en" )
, $ac['LANG_BASE_DIR'] ];
if ( $lang != $ac['LANG_BASE_DIR'] )
$parts[] = $lang;

foreach ( $parts as & $part )
Expand DownExpand Up@@ -739,7 +768,7 @@ function dom_saveload( DOMDocument $dom , string $filename = "" ) : string
echo "Creating monolithic temp/manual.xml... ";
$dom = new DOMDocument();

if ( dom_load( $dom , __DIR__ . '/../en/manual.xml' , true ) )
if ( dom_load( $dom , __DIR__ . "/../{$ac['LANG_BASE_DIR']}/manual.xml" , true ) )
{
echo " done.\n";
print_dom_errors();
Expand DownExpand Up@@ -795,10 +824,10 @@ function xinclude_no_fallback( DOMDocument $dom )

if ( $xifallbacks->length > 0 )
{
if ( $GLOBALS['ac']['LANG'] == 'en' )
if ( is_single_language() )
{
print "\n<xi:fallback> cause silent errors in all languages.\n";
print "Not allowed on doc-en.\n";
print "Not allowed on base manual trees.\n";
errors_are_bad( 1 );
}
else
Expand DownExpand Up@@ -1012,9 +1041,9 @@ function xinclude_residual_fixup( DOMDocument $dom )
echo "\n\n";
}

// Duplicated structural xml:ids are fatal on doc-en
// Duplicated structural xml:ids are fatal on base manual trees

$fatal = $GLOBALS['ac']['LANG'] == 'en';
$fatal = is_single_language();

if ( $structural && $fatal )
errors_are_bad( 1 );
Expand DownExpand Up@@ -1134,7 +1163,7 @@ function xml_validate_jing()
if ( preg_match( '/IDREF "[^"]+" without matching ID/', $line ) )
$countFatal--;

if ( $GLOBALS['ac']['LANG'] === 'en' || $countFatal > 0 )
if ( is_single_language() || $countFatal > 0 )
errors_are_bad( 1 );
}

Expand All@@ -1143,7 +1172,7 @@ function xml_validate_libxml( $dom )
echo "Validating temp/manual.xml (libxml)... ";
$ok = $dom->relaxNGValidate( RNG_SCHEMA_FILE );

if ( ! $ok && $GLOBALS['ac']['LANG'] != 'en' )
if ( ! $ok && ! is_single_language() )
{
$errors = libxml_get_errors();
$warnings = 0;
Expand DownExpand Up@@ -1207,7 +1236,7 @@ function phd_conf_json()
'rootdir' => $ac['rootdir'],
'srcdir' => $ac['srcdir'],
'lang' => $ac['LANG'],
'enDir' => $ac['EN_DIR'],
'enDir' => $ac['LANG_BASE_DIR'],
'langDir' => $ac['LANGDIR'],
'generate' => $ac['GENERATE'],
'xpointerReporting' => $ac['XPOINTER_REPORTING'] === 'yes',
Expand DownExpand Up@@ -1240,7 +1269,7 @@ function php_history()

echo 'PhD history:';

$lang_mod_file = (($ac['LANG'] !== 'en') ? ("{$ac['rootdir']}/{$ac['EN_DIR']}") : ("{$ac['rootdir']}/{$ac['LANGDIR']}")) . "/fileModHistory.php";
$lang_mod_file = "{$ac['rootdir']}/{$ac['LANG_BASE_DIR']}/fileModHistory.php";
$doc_base_mod_file = __DIR__ . "/fileModHistory.php";

$history_file = null;
Expand DownExpand Up@@ -1275,12 +1304,12 @@ function phd_sources()

echo ' reading,';
$source_map = array();
$en_dir = "{$ac['rootdir']}/{$ac['EN_DIR']}";
$base_dir = "{$ac['rootdir']}/{$ac['LANG_BASE_DIR']}";
$source_langs = array(
array('base', $ac['srcdir'], array('manual.xml', 'funcindex.xml')),
array('en', $en_dir, find_xml_files($en_dir)),
array($ac['LANG_BASE_DIR'], $base_dir, find_xml_files($base_dir)),
);
if ($ac['LANG'] !== 'en') {
if (!is_single_language()) {
$lang_dir = "{$ac['rootdir']}/{$ac['LANGDIR']}";
$source_langs[] = array($ac['LANG'], $lang_dir, find_xml_files($lang_dir));
}
Expand DownExpand Up@@ -1339,7 +1368,7 @@ function phd_version()
$globdir = dirname($ac["GENERATE"]) . "/{../../}versions.xml";
}
else {
$globdir = $ac['rootdir'] . '/en';
$globdir = "{$ac['rootdir']}/{$ac['LANG_BASE_DIR']}";
$globdir .= "/*/*/versions.xml";
}
echo ' transforming,';
Expand Down
13 changes: 8 additions & 5 deletions scripts/file-entities.php
Original file line numberDiff line numberDiff line change
Expand Up@@ -62,18 +62,21 @@

// Usage

$lang = "";
$langs = [ "en" ];
$langs = [];
$langBase = realpain( __DIR__ . "/../.." );
$chmonly = false;

array_shift( $argv );
foreach( $argv as $arg )
{
$lang = rtrim( $arg , "\\/" );
$langs[] = $lang;
$langs[] = rtrim( $arg , "\\/" );
}

// Languages are passed base first, translation second.
// Without arguments, default to the base manual tree.

if ( count( $langs ) == 0 )
$langs = [ "en" ];

// Generation

print "Running file-entities.php... ";
Expand Down