#!/bin/bash
# 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/.

# This script looks up <embed ...> tags in helpcontent, checks whether the
# referenced file and id exist, and prints a warning if either one does not.
# Execute from the root directory of the helpcontent2 repository.
# No parameters are used.

# Example output of this git grep:
# source/text/sbasic/shared/03010000.xhp:  <embed href="text/sbasic/shared/03010300.xhp#farbe"/>
lines=$(git grep "embed href=" source/);

while read nextline ; do
    # source file is before the first :
    sourcefile=${nextline%%:*};
    # There may be more than one <embed ...> in one line, split it up,
    # but first cut off everything before the first <embed
    # and anything after the last >
    processline="<embed${nextline#*<embed}";
    processline="${processline%>*}>";
    while [ -n "$processline" ] ; do
        # Start processing the first xml tag
        target=$(expr "$processline" : '\(<[^>]*>\)');
        # Check if there is an <embed at the beginning
        if [ $(expr "$target" : "<embed") -ne "0" ] ; then
            # Get the embedded filename#section part
            target=${target#*\"};
            target=${target%\"*};
            # target file is before the #
            targetfile=${target%#*};
            # target section is after the #
            targetsection=${target#*#};
            # does the target file exist?
            if [ -f "source/$targetfile" ] ; then
                # The target file exist, does the section inside the target file too?
                grep -q "id=\"$targetsection\">" source/"$targetfile";
                if [ "$?" -ne "0" ] ; then
                    echo "$sourcefile: In 'source/$targetfile' there is no section called '$targetsection'";
                fi
            else
                # target file does not exist
                echo "$sourcefile: Embedded target file 'source/$targetfile' does not exist!" ;
            fi
        fi
        # Remove the first xml tag from the parts still to be processed
        processline=${processline#<*>};
        # There may be characters after this, i.e. "foo <embed ...>"
        if [ -n "$processline" ] ; then
            processline="<${processline#*<}";
        fi
    done
done <<< "$lines"
