summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--l10ntools/scripts/update_tree.pl394
-rw-r--r--nlpsolver/Extension_nlpsolver.mk3
-rw-r--r--nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/help.tree19
-rw-r--r--nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/tree_strings.xhp29
-rw-r--r--sdext/Extension_presenter.mk4
-rw-r--r--sdext/source/presenter/help/en-US/com.sun.PresenterScreen/help.tree18
-rw-r--r--sdext/source/presenter/help/en-US/com.sun.PresenterScreen/tree_strings.xhp29
-rw-r--r--solenv/gbuild/Extension.mk14
-rw-r--r--solenv/gbuild/ExtensionTarget.mk51
-rw-r--r--swext/Extension_wiki-publisher.mk2
-rw-r--r--swext/mediawiki/help/help.tree22
-rw-r--r--swext/mediawiki/help/tree_strings.xhp29
12 files changed, 612 insertions, 2 deletions
diff --git a/l10ntools/scripts/update_tree.pl b/l10ntools/scripts/update_tree.pl
new file mode 100644
index 000000000000..568d99e36ad5
--- /dev/null
+++ b/l10ntools/scripts/update_tree.pl
@@ -0,0 +1,394 @@
+:
+eval 'exec perl -wS $0 ${1+"$@"}'
+ if 0;
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+use Cwd 'abs_path';
+use File::Find;
+use File::Copy qw/cp mv/;
+use File::Basename;
+
+# update the tree files in <platform>/misc/*
+
+$| = 1;
+
+my $prj = $ENV{PWD};
+
+my $inpath = $ENV{WORKDIR};
+terminate() if ( ! defined $inpath );
+
+my $destpath = $inpath;
+my $with_lang = $ARGV[1];
+my $xmllint = $ENV{XMLLINT};
+
+$tree_target_prefix = $ARGV[4];
+
+# Always use / directory separators
+$prj =~ s/\\/\//g if defined($prj);
+$inpath =~ s/\\/\//g;
+$destpath =~ s/\\/\//g;
+
+if ( ! defined $prj ) {
+# do someting that works for manual call
+ ($scriptname = `pwd`) =~ s/\n/\/$0/;
+ ($tree_src = $scriptname) =~ s/\/update_tree.pl/\/..\/source\/auxiliary/;
+ ($tree_dest = $scriptname) =~ s/\/update_tree.pl/\/..\/$destpath\/misc/;
+ ($source_dir = $scriptname) =~ s/\/update_tree.pl/\/..\/source/;
+ ($source_dir_xhp = $scriptname) =~ s/\/update_tree.pl/\/..\/source/;
+
+ if ( defined $ENV{TRYSDF} || defined $ENV{LOCALIZESDF} )
+ {
+ if( defined $ENV{LOCALIZATION_FOUND} && $ENV{LOCALIZATION_FOUND} eq "YES" )
+ {
+ $source_dir = $ENV{TRYSDF};
+ }
+ elsif( defined $ENV{LOCALIZESDF} && $ENV{LOCALIZESDF} ne "" )
+ {
+ $source_dir = $ENV{LOCALIZESDF};
+ }
+ $source_dir =~ s/\/auxiliary\/localize.sdf$// ;
+ }
+ $treestrings = "$ARGV[0]";
+ $treestrings=~ s/\/*.tree//g;
+} else {
+ $source_dir_xhp = "$prj/source/presenter/help";
+ $tree_src = "$ARGV[0]";
+ $tree_src =~ s/\/help.tree//g;
+ $tree_dest = "$ARGV[3]";
+ $tree_dest =~ s/\/help.tree//g;
+ $source_dir = "$ARGV[2]";
+ $source_dir =~ s/\/localize.sdf//g;
+ $treestrings = "$ARGV[0]";
+ $treestrings=~ s/\/help.tree/\/tree_strings.xhp/g;
+
+ if( defined $ENV{LOCALIZATION_FOUND} && $ENV{LOCALIZATION_FOUND} eq "YES" )
+ {
+ $source_dir = $ENV{TRYSDF};
+ }
+ elsif ( defined $ENV{LOCALIZESDF} && $ENV{LOCALIZESDF} ne "" )
+ {
+ $source_dir = $ENV{LOCALIZESDF};
+ }
+ $source_dir =~ s/\/auxiliary\/localize.sdf$// ;
+}
+
+# Get the English tree files as master
+#-------------------------------
+# Update English from xhp
+#-------------------------------
+&do_english;
+#-------------------------------
+# Update localizations from sdf
+#-------------------------------
+
+if( defined $with_lang && $with_lang ne "" )
+{
+ @langs = split /\s+/, $with_lang;
+ &read_loc;
+ for $l(@langs)
+ {
+ #if ($l ne "en-US") {
+ &do_lang($l);
+ #}
+ }
+}
+else
+{
+ print "\nNo WITH_LANG set, skipping l10n\n";
+}
+#-------------------------------
+#
+
+####################
+# SUBS
+####################
+sub terminate {
+ $err = shift;
+ print "$err\n\n";
+ $msg = <<"MSG";
+
+update_tree.pl
+ all languages in WITH_LANG are processed. WITH_LANG=ALL is
+ not supported in manual calls.
+
+ Updates the *.tree files.
+ At first, the English file is updated based on the English
+ help topic titles as read from the help files. Then, the
+ localized tree files are written based on the English tree
+ file and the localized help topic titles.
+
+ Requires a valid LibreOffice build environment.
+MSG
+ print "$msg\n";
+ exit( -1 );
+ # die "$msg\n";
+}
+
+#---------------------------------------------------
+
+sub do_english {
+ undef %helpsection; undef %node;
+ &readtreestrings;
+ &gettreefiles;
+}
+
+#---------------------------------------------------
+sub do_lang {
+ $lng = shift;
+ print "Processing $lng\n";
+ &processtreefiles($lng);
+}
+
+#---------------------------------------------------
+sub readtreestrings {
+ if (open TREE, $treestrings) {
+ print "Processing readtreestrings\n";
+ while (<TREE>) {
+ chomp;
+ s/<\/*help:productname>//gis;
+ if (/help_section/) {
+ s/^\s*<.*help_section//;
+ s/<\/.*$//;
+ ($id = $_) =~ s/^.*id=&quot;(\d+)&quot;.*$/$1/;
+ ($title = $_) =~ s/^.*title=&quot;(.*)&quot;.*$/$1/;
+ $helpsection{$id} = $title;
+ }
+
+ if (/node id=/) {
+ s/^\s*<.*node //;
+ s/<\/.*$//;
+ ($id = $_) =~ s/^.*id=&quot;(\d+)&quot;.*$/$1/;
+ ($title = $_) =~ s/^.*title=&quot;(.*)&quot;.*$/$1/;
+ $node{$id} = $title;
+ }
+ }
+ close TREE;
+ } else {
+ &terminate("Error opening $treestrings");
+ }
+}
+
+#------------------------------------
+sub gettreefiles {
+ # Read the tree files from the directory
+ # this list is also used for all foreign languages
+ if (opendir ENUS, "$tree_src") {
+ @treeviews = grep /\.tree/, readdir ENUS;
+ closedir ENUS;
+ } else {
+ &terminate("Cannot open directory $tree_src");
+ }
+}
+
+#------------------------------------
+sub processtreefiles {
+ $lng = shift;
+ use File::Temp qw/ tempfile /;
+ use File::Spec;
+
+ for $tv(@treeviews) {
+ @lines = &readtv("$tree_src/$tv");
+ for $l(@lines) {
+ if ($l =~ /topic/) {
+ ($id = $l) =~ s/^.*id="([^"]*)".*$/$1/gis;
+ ($module = $id) =~ s/^([^\/]*).*$/$1/;
+ $id =~ s/^.*?\///;
+ $file = "$source_dir_xhp/$lng/$id";
+
+ if ($lng eq 'en-US') { # english comes from the file
+ $temp = $l;
+ $temp =~ s/^.*<topic[^>]+id=".*"[^>]*>([^<]*)<\/topic>.*$/$1/gis;
+ $temp =~ s/&apos;/\'/gis; $temp=~ s/&amp;/+/gis;
+ $temp =~ s/&quot;/\'/gis; $temp =~ s/&/+/gis;
+
+ $id =~s/^.*\/(.*.xhp)/$1/;
+ $l = "<topic id=\"$module/$tree_target_prefix/$id\">$temp</topic>\n";
+ } else { # localized comes from the localize sdf
+ if (defined($loc_title{$lng}->{$id})) {
+ $xhpname = $id;
+ $xhpname =~s/^.*\/(.*.xhp)/$1/;
+ $l = "<topic id=\"$module/$tree_target_prefix/$xhpname\">$loc_title{$lng}->{$id}</topic>\n";
+ } else {
+ }
+ }
+ }
+
+ if ($l =~/<node/) {
+ ($id = $l) =~ s/^.*id="(\d+)".*$/$1/gis;
+ if ($lng eq 'en-US') {
+ if (defined($node{$id})) {
+ $l =~ s/title="(.*)"/title="$node{$id}"/;
+ } else {
+ $l =~ s/title="(.*)"/title="NOTFOUND:$id"/;
+ }
+ } else {
+ if (defined($node{$lng}->{$id})) {
+ $l =~ s/title="(.*)"/title="$node{$lng}->{$id}"/;
+ }
+ }
+ }
+
+ if ($l =~/<help_section/) {
+ ($id = $l) =~ s/^.*id="(\d+)".*$/$1/gis;
+ if ($lng eq 'en-US') {
+ if (defined($helpsection{$id})) {
+ $l =~ s/title="(.*)"/title="$helpsection{$id}"/;
+ } else {
+ $l =~ s/title="(.*)"/title="NOTFOUND:$id"/;
+ }
+ } else {
+ if (defined($helpsection{$lng}->{$id})) {
+ $l =~ s/title="(.*)"/title="$helpsection{$lng}->{$id}"/;
+ }
+ }
+ }
+ }
+
+
+ my $treeoutdir = "$tree_dest";
+ my $tmpname_template=$tv."_XXXXX";
+ my ( $treetmpfilehandle, $treetmpfile ) = tempfile($tmpname_template , DIR => File::Spec->tmpdir() );
+ close $treetmpfilehandle ;
+
+ if (open TV, ">$treetmpfile") {
+ for $line(@lines) {
+ $line =~ s/\$\[officename\]/%PRODUCTNAME/g;
+ $line =~ s/\$\[officeversion\]/%PRODUCTVERSION/g;
+ print TV $line;
+ }
+ close TV;
+ chmod 0664, $treetmpfile or &terminate("Cannot change rights on $treetmpfile");
+ if( $^O eq 'MSWin32' )
+ {
+ $tree_dest =~ s/\//\\/g ;
+ unlink "$tree_dest\\$tv" ;
+ mv $treetmpfile , "$tree_dest\\$tv" or &terminate("Cannot mv $treetmpfile to $tree_dest\\$tv" );
+ }
+ else
+ {
+ unlink "$tree_dest/$tv" ;
+ my $ret=mv $treetmpfile , "$tree_dest/$tv" or &terminate("Cannot write to $tree_dest/$tv - Error $!");
+ my $ret=mv "$tree_dest/$tv" , "$tree_dest/$tv" or &terminate("Cannot write to $tree_dest/$tv - Error $!");
+ #xmllint is crashing on windows, fixme
+ if( $^O ne 'cygwin' )
+ {
+ system("$xmllint --noout --noent $tree_dest/$tv") == 0 or &terminate("$tree_dest/$tv is illformed xml ($xmllint on $^O)" );
+ }
+ }
+ } else {
+ &terminate("Cannot write to $tvout");
+ }
+ }
+}
+
+#------------------------------------
+sub readtv {
+ my $f = shift;
+ if (open TV, $f) {
+ $/ = "\n";
+ my @l = <TV>;
+ close TV;
+ return @l;
+ } else {
+ &terminate("Error opening $f");
+ }
+}
+
+#-------------------------------------
+# read entries from localize.sdf files
+#-------------------------------------
+sub read_loc {
+ $/ = "\n";
+ my $path = "$source_dir";
+ @files = `find $source_dir -name localize.sdf`;
+ for my $fname (@files) {
+ $FS = '\t';
+ open(LOCALIZE_SDF, $fname) || die 'Cannot open "localize.sdf".'."$fname";
+ while (<LOCALIZE_SDF>) {
+ my $sdf_line = $_;
+ my ($Fld1,$file,$Fld3,$Fld4,$id,$Fld6,$Fld7,$Fld8,$Fld9,$lang,$text) = split($FS, $sdf_line , 12);
+ next if ( $Fld1 =~ /^#/);
+ if ($id eq 'tit') {
+ #strip filename
+ $file =~ s/.*text\\/text\\/g;
+ #convert \ to / in filename
+ $file =~ s/\\/\//g;
+ $file =~ s/^.*\/(.*)\/(.*)$/$1\/$2/;
+ #fpe: i46823 - need to encode &s, added encoding
+ $text =~ s/&(?!amp;)/&amp;/g;
+ #help xml tags are not allowed in .tree files
+ $text =~ s/\\<.*?\\>//g;
+ # add entry to the hash
+
+ $loc_title{$lang}->{$file} = $text;
+ }
+ if ($file =~ /tree_strings.xhp/) {
+ #strip filename
+ $file =~ s/.*text/text/g;
+ #convert \ to / in filename
+ $file =~ s/\\/\//g;
+ if ($text =~ /^<help_section/) {
+ #example: <help_section application="scalc" id="08" title="表計算ドキュメント">
+ my ($fld1,$app,$fld3,$id,$fld5,$sec_title) = split('"', $text, 7);
+ #fpe: i46823 - need to encode &s, added encoding
+ if( defined $sec_title )
+ {
+ $sec_title =~ s/&(?!amp;)/&amp;/g;
+ #help xml tags are not allowed in .tree files
+ $sec_title =~ s/\\<.*?\\>//g;
+ #unquot \<item ... /\>
+ terminate( "\n\nERROR: Bad string in file '$fname' will cause invalid xml tree file \n---\n'$sdf_line'\n---\nPlease remove or replace < = '&lt;' and > = '&gt;' within the title attribute '$sec_title'\n") , if( $sec_title =~ /[\<\>]/ );
+ $helpsection{$lang}->{$id} = $sec_title;
+ }
+ } elsif ($text =~/<node id=/) {
+ # example: <node id="0205" title="Tabelas em documentos de texto">
+ # BEWARE: title may contain escaped '"' so only match " not preceded by \
+ # using a zero‐width negative look‐behind assertion.
+ my ($fld1,$id,$fld3,$node_title,$Fld5) = split(/(?<!\\)"/, $text, 5);
+ #fpe: i46823 - need to encode &s, added encoding
+ if( defined $node_title )
+ {
+ $node_title =~ s/&(?!amp;)/&amp;/g;
+ #help xml tags are not allowed in .tree files
+ $node_title =~ s/\\<.*?\\>//g;
+ terminate( "\n\nERROR: Bad string in '$fname' will cause invalid xml tree file \n---\n'$sdf_line'\n---\nPlease remove or replace < = '&lt;' and > = '&gt;' within the title attribute '$node_title'\n") , if( $node_title =~ /[\<\>]/ );
+ }
+ $node{$lang}->{$id} = $node_title;
+ }
+ }
+ }
+ close LOCALIZE_SDF;
+ }
+ # statistics
+ $total_elements=0;
+ foreach $lang (keys %loc_title) {
+ $no_elements = scalar(keys(%{$loc_title{$lang}}));
+ push(@langstat, "$lang:\t ".$no_elements." matches\n");
+ $total_elements += $no_elements;
+ }
+}
diff --git a/nlpsolver/Extension_nlpsolver.mk b/nlpsolver/Extension_nlpsolver.mk
index 6f2690f1ebd9..75c8f7f4a3f5 100644
--- a/nlpsolver/Extension_nlpsolver.mk
+++ b/nlpsolver/Extension_nlpsolver.mk
@@ -45,4 +45,7 @@ $(eval $(call gb_Extension_add_helpfiles,nlpsolver,$(SRCDIR)/nlpsolver/help/en,
com.sun.star.comp.Calc.NLPSolver/Usage.xhp \
))
+$(eval $(call gb_Extension_add_helptreefile,nlpsolver,$(SRCDIR)/nlpsolver/help/en,/help.tree,com.sun.star.comp.Calc.NLPSolver/help.tree,com.sun.star.comp.Calc.NLPSolver))
+
+
# vim: set noet sw=4 ts=4:
diff --git a/nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/help.tree b/nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/help.tree
new file mode 100644
index 000000000000..7ccf4d6c25a9
--- /dev/null
+++ b/nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/help.tree
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<tree_view>
+<help_section application="scalc" id="08" title="Solver for Nonlinear Problems">
+ <node id="0816" title="Solver for Nonlinear Problems">
+ <topic id="help/com.sun.star.comp.Calc.NLPSolver/Usage.xhp">Usage</topic>
+ <topic id="help/com.sun.star.comp.Calc.NLPSolver/Options.xhp">Options</topic>
+ </node>
+</help_section>
+</tree_view>
diff --git a/nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/tree_strings.xhp b/nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/tree_strings.xhp
new file mode 100644
index 000000000000..f6403c45c42b
--- /dev/null
+++ b/nlpsolver/help/en/com.sun.star.comp.Calc.NLPSolver/tree_strings.xhp
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<helpdocument version="1.0">
+
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<meta>
+ <topic id="tree_stringsxml" indexer="include" status="PUBLISH">
+ <title xml-lang="en-US" id="tit" localize="false">Note to translators:</title>
+ <filename>/help/en/com.sun.star.comp.Calc.NLPSolver/tree_strings.xhp</filename>
+ </topic>
+</meta>
+
+<body>
+ <comment>This file contains extra strings for the contents (*.tree) files. No indexing!</comment>
+ <switch select="sys"> <case select="OS2">
+ <paragraph role="heading" level="1" id="hd_id3150150" xml-lang="en-US" localize="false">File: help.tree</paragraph>
+ <paragraph role="paragraph" id="par_id3160160" xml-lang="en-US">&lt;help_section application=&quot;scalc&quot; id=&quot;08&quot; title=&quot;Solver for Nonlinear Problems&quot;&gt;</paragraph>
+ <paragraph role="paragraph" id="par_id3170170" xml-lang="en-US">&lt;node id=&quot;0816&quot; title=&quot;Solver for Nonlinear Problems&quot;&gt;</paragraph>
+ </case> </switch>
+</body>
+
+</helpdocument>
diff --git a/sdext/Extension_presenter.mk b/sdext/Extension_presenter.mk
index ba5a51a68694..66f93a8f2a81 100644
--- a/sdext/Extension_presenter.mk
+++ b/sdext/Extension_presenter.mk
@@ -143,4 +143,8 @@ $(eval $(call gb_Extension_add_files,presenter-screen,registry/data/org/openoffi
$(eval $(call gb_Extension_add_helpfile,presenter-screen,$(WORKDIR)/CustomTarget/sdext/source/presenter/help/en-US,com.sun.PresenterScreen-$(sdext_PLATFORM)/presenter.xhp,com.sun.PresenterScreen/presenter.xhp))
+$(eval $(call gb_Extension_add_helptreefile,presenter-screen,$(SRCDIR)/sdext/source/presenter/help/en-US,/help.tree,com.sun.PresenterScreen/help.tree,com.sun.PresenterScreen-$(sdext_PLATFORM)))
+
+
+
# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sdext/source/presenter/help/en-US/com.sun.PresenterScreen/help.tree b/sdext/source/presenter/help/en-US/com.sun.PresenterScreen/help.tree
new file mode 100644
index 000000000000..44b3a6767d51
--- /dev/null
+++ b/sdext/source/presenter/help/en-US/com.sun.PresenterScreen/help.tree
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<tree_view>
+<help_section application="simpress" id="04" title="Presenter Console Keyboard Shortcuts">
+ <node id="0411" title="Presenter Console Keyboard Shortcuts">
+ <topic id="help/com.sun.PresenterScreen/presenter.xhp">Presenter Console Keyboard Shortcuts</topic>
+ </node>
+</help_section>
+</tree_view>
diff --git a/sdext/source/presenter/help/en-US/com.sun.PresenterScreen/tree_strings.xhp b/sdext/source/presenter/help/en-US/com.sun.PresenterScreen/tree_strings.xhp
new file mode 100644
index 000000000000..322cd6967fd6
--- /dev/null
+++ b/sdext/source/presenter/help/en-US/com.sun.PresenterScreen/tree_strings.xhp
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<helpdocument version="1.0">
+
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<meta>
+ <topic id="tree_stringsxml" indexer="include" status="PUBLISH">
+ <title xml-lang="en-US" id="tit" localize="false">Note to translators:</title>
+ <filename>/source/presenter/help/en-US/com.sun.PresenterScreen/tree_strings.xhp</filename>
+ </topic>
+</meta>
+
+<body>
+ <comment>This file contains extra strings for the contents (*.tree) files. No indexing!</comment>
+ <switch select="sys"> <case select="OS2">
+ <paragraph role="heading" level="1" id="hd_id3150150" xml-lang="en-US" localize="false">File: help.tree</paragraph>
+ <paragraph role="paragraph" id="par_id3160160" xml-lang="en-US">&lt;help_section application=&quot;simpress&quot; id=&quot;04&quot; title=&quot;Presenter Console Keyboard Shortcuts&quot;&gt;</paragraph>
+ <paragraph role="paragraph" id="par_id3170170" xml-lang="en-US">&lt;node id=&quot;0411&quot; title=&quot;Presenter Console Keyboard Shortcuts&quot;&gt;</paragraph>
+ </case> </switch>
+</body>
+
+</helpdocument>
diff --git a/solenv/gbuild/Extension.mk b/solenv/gbuild/Extension.mk
index 2779dda1c2b6..c728e0d83d15 100644
--- a/solenv/gbuild/Extension.mk
+++ b/solenv/gbuild/Extension.mk
@@ -116,6 +116,20 @@ $(call gb_ExtensionTarget_add_helpfiles,$(1),$(2),$(3))
endef
+# add a help.tree file, to be localized and compiled
+# $(1): extension identifier
+# $(2): absolute path prefix of en-US source file without $(3) (resp. $(4))
+# suffix
+# $(3): relative path of (target) help.tree file (e.g.,
+# com.sun.wiki-publisher/help.tree)
+# $(4): optional relative path of source help.tree file, when it differs from $(3)
+# (i.e., if $(4) is empty the en-US source file is $(2)/$(3), otherwise it
+# is $(2)/$(4))
+define gb_Extension_add_helptreefile
+$(call gb_ExtensionTarget_add_helptreefile,$(1),$(2),$(3),$(4),$(5))
+
+endef
+
define gb_Extension_use_package
$(call gb_ExtensionTarget_use_package,$(1),$(2))
diff --git a/solenv/gbuild/ExtensionTarget.mk b/solenv/gbuild/ExtensionTarget.mk
index 14b50e01f055..d89cfa867c92 100644
--- a/solenv/gbuild/ExtensionTarget.mk
+++ b/solenv/gbuild/ExtensionTarget.mk
@@ -38,6 +38,10 @@ gb_ExtensionTarget_XRMEXCOMMAND := \
gb_ExtensionTarget_PROPMERGETARGET := $(OUTDIR_FOR_BUILD)/bin/propmerge
gb_ExtensionTarget_PROPMERGECOMMAND := \
$(PERL) $(gb_ExtensionTarget_PROPMERGETARGET)
+
+gb_ExtensionTarget_UPDATETREETARGET := $(SRCDIR)/l10ntools/scripts/update_tree.pl
+gb_ExtensionTarget_UPDATETREECOMMAND := $(PERL) $(gb_ExtensionTarget_UPDATETREETARGET)
+
gb_ExtensionTarget_HELPEXTARGET := $(call gb_Executable_get_target_for_build,helpex)
gb_ExtensionTarget_HELPEXCOMMAND := \
$(gb_Helper_set_ld_path) $(gb_ExtensionTarget_HELPEXTARGET)
@@ -239,6 +243,21 @@ $(foreach lang,$(gb_ExtensionTarget_ALL_LANGS), \
$(call gb_ExtensionTarget__add_compiled_help_dependency_onelang,$(1),$(lang)))
endef
+# add a help.tree file, to be localized and compiled
+# $(1): extension identifier
+# $(2): absolute path prefix of en-US source file without $(3) (resp. $(4))
+# suffix
+# $(3): relative path of (target) help.tree file (e.g.,
+# com.sun.wiki-publisher/help.tree)
+# $(4): optional relative path of source help.tree file, when it differs from $(3)
+# (i.e., if $(4) is empty the en-US source file is $(2)/$(3), otherwise it
+# is $(2)/$(4))
+define gb_ExtensionTarget_add_helptreefile
+$(foreach lang,$(gb_ExtensionTarget_ALL_LANGS), \
+ $(call gb_ExtensionTarget__localize_helptreefile_onelang,$(1),$(2),$(3),$(4),$(lang),$(5)) \
+ $(call gb_ExtensionTarget__add_compiled_help_dependency_onelang,$(1),$(lang)))
+endef
+
# add a list of .xhp help files, to be localized and compiled
# $(1): extension identifier
# $(2): absolute path prefix of en-US source files without $(3) suffixes
@@ -282,6 +301,35 @@ $(call gb_ExtensionTarget_get_workdir,$(1))/help/$(5)/$(3) : \
endef
+# localize one help.tree for one language; the result is stored as
+# help/$(4)/$(3) in the extension's workdir; as a special case, if $(4) is
+# "en-US", the source file is just copied, not passed through update_tree.pl
+# $(1): extension identifier
+# $(2): absolute path prefix of en-US source file without $(3) (resp. $(4))
+# suffix
+# $(3): relative path of (target) help.tree file (see
+# gb_ExtensionTarget_add_helptreefile)
+# $(4): optional relative path of source help.tree file (see
+# gb_ExtensionTarget_add_helptreefile)
+# $(5): language
+define gb_ExtensionTarget__localize_helptreefile_onelang
+$(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(5).done : \
+ $(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(5)/$(3)
+$(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(5)/$(3) : \
+ SDF := $(gb_SDFLOCATION)$(subst $(SRCDIR),,$(subst $(WORKDIR)/CustomTarget,,$(2)/$(dir $(or $(4),$(3)))))localize.sdf
+$(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(5)/$(3) : $$(SDF)
+$(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(5)/$(3) : \
+ $(if $(filter-out en-US,$(WITH_LANG)),$(gb_ExtensionTarget_UPDATETREETARGET)) | \
+ $(2)/$(4)
+$(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(5)/$(3) : \
+ $(2)/$(or $(4),$(3))
+ $$(call gb_Output_announce,$(1) $(3) $(5),$(true),TRE,3)
+ $$(call gb_Helper_abbreviate_dirs, \
+ mkdir -p $$(dir $$@) && \
+ $(gb_ExtensionTarget_UPDATETREECOMMAND) $$< $(5) $$(SDF) $$@ $(6) )
+
+endef
+
# compile help for one language; the result is stored as help/$(3)/ in the
# extension's rootdir and marked for zipping into the .oxt
# $(1): extension identifier
@@ -298,8 +346,7 @@ $(call gb_ExtensionTarget_get_rootdir,$(1))/help/$(2).done : \
$(call gb_ExtensionTarget_get_rootdir,$(1))/help/.dir
$$(call gb_Output_announce,$(1) $(2),$(true),XHC,3)
$$(call gb_Helper_abbreviate_dirs, \
- rm -rf $$(basename $$@) && \
- mkdir $$(basename $$@) && \
+ mkdir -p $$(basename $$@) && \
$(gb_ExtensionTarget_HELPLINKERCOMMAND) -mod help \
-extlangsrc $(call gb_ExtensionTarget_get_workdir,$(1))/help/$(2) \
-sty $(OUTDIR_FOR_BUILD)/bin/embed.xsl \
diff --git a/swext/Extension_wiki-publisher.mk b/swext/Extension_wiki-publisher.mk
index e9e5088990ef..6f4e4a3d2eb4 100644
--- a/swext/Extension_wiki-publisher.mk
+++ b/swext/Extension_wiki-publisher.mk
@@ -68,4 +68,6 @@ $(eval $(call gb_Extension_add_helpfile,wiki-publisher,$(SRCDIR)/swext/mediawiki
$(eval $(call gb_Extension_add_helpfile,wiki-publisher,$(SRCDIR)/swext/mediawiki/help,com.sun.wiki-publisher/wiki.xhp,wiki.xhp))
$(eval $(call gb_Extension_add_helpfile,wiki-publisher,$(SRCDIR)/swext/mediawiki/help,com.sun.wiki-publisher/wikisettings.xhp,wikisettings.xhp))
+$(eval $(call gb_Extension_add_helptreefile,wiki-publisher,$(SRCDIR)/swext/mediawiki/help,/help.tree,/help.tree,com.sun.wiki-publisher))
+
# vim: set noet sw=4 ts=4:
diff --git a/swext/mediawiki/help/help.tree b/swext/mediawiki/help/help.tree
new file mode 100644
index 000000000000..d258c948bdbb
--- /dev/null
+++ b/swext/mediawiki/help/help.tree
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<tree_view>
+<help_section application="swriter" id="02" title="MediaWiki">
+ <node id="0224" title="MediaWiki">
+ <topic id="help/help/wiki.xhp">MediaWiki</topic>
+ <topic id="help/help/wikiaccount.xhp">Wiki Publisher</topic>
+ <topic id="help/help/wikiformats.xhp">MediaWiki Formats</topic>
+ <topic id="help/help/wikisend.xhp">Send to MediaWiki</topic>
+ <topic id="help/help/wikisettings.xhp">MediaWiki Options</topic>
+ </node>
+</help_section>
+</tree_view>
diff --git a/swext/mediawiki/help/tree_strings.xhp b/swext/mediawiki/help/tree_strings.xhp
new file mode 100644
index 000000000000..2ccabc71c7b9
--- /dev/null
+++ b/swext/mediawiki/help/tree_strings.xhp
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<helpdocument version="1.0">
+
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+
+<meta>
+ <topic id="tree_stringsxml" indexer="include" status="PUBLISH">
+ <title xml-lang="en-US" id="tit" localize="false">Note to translators:</title>
+ <filename>/mediawiki/help/treestrings.xhp</filename>
+ </topic>
+</meta>
+
+<body>
+ <comment>This file contains extra strings for the contents (*.tree) files. No indexing!</comment>
+ <switch select="sys"> <case select="OS2">
+ <paragraph role="heading" level="1" id="hd_id3150150" xml-lang="en-US" localize="false">File: help.tree</paragraph>
+ <paragraph role="paragraph" id="par_id3160160" xml-lang="en-US">&lt;help_section application=&quot;swriter&quot; id=&quot;02&quot; title=&quot;MediaWiki&quot;&gt;</paragraph>
+ <paragraph role="paragraph" id="par_id3170170" xml-lang="en-US">&lt;node id=&quot;0224&quot; title=&quot;MediaWiki&quot;&gt;</paragraph>
+ </case> </switch>
+</body>
+
+</helpdocument>