blob: 295e77255329d7429ef199fd6937dcd7b279eb33 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2003 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Runs a file in $1 through a giant sed script, transforming normal
# C++ comments to Doxygen comments. The resultant file is placed in
# $2/$1, so $2 must be a subdirectory.
#
# Usage: scripts/doxify.sh filename destination_directory
set -u # exit the script if any variable is uninitialized
set -e # exit script if any command returns an error
filename=$1
destination_directory=$2
outfile=$destination_directory/$filename
mkdir -p "$(dirname $outfile)"
sed -r 's~/\*([^\*])~/\*\*\1~; # /* -> /** \
s~///*~///~; # // -> /// \
s~;[ ]*/\*\*([^<*]*)~; /\*\*<\1~; # /** -> /**< on right after code \
s~;[ ]*///*([^<])~; ///<\1~; # /// -> ///< on right after code \
s~,([ ]*)///*([^<])~,\1///<\2~; # /// -> ///< on right after enum \
s~([[:alnum:]][ ]*)///*([^<])~\1///<\2~; # /// -> ///< on right after enum \
s~DISALLOW_COPY_AND_ASSIGN\(.*\)\;~~; # /// -> ///< on right after code \
s~(///) *---+([^-].+[^-]) *---+~\1\2~; # /// ---- Bla ---- -> /// Bla
s~(///) *===+([^=].+[^=]) *===+~\1\2~; # /// ==== Bla ==== -> /// Bla
s~(///) *\*\*\*+([^\*].+[^\*]) *\*\*\*+~\1\2~; # /// **** Bla **** -> /// Bla
s~(///) *----*( *)~\1\2~; # /// -------- -> ///
s~(///) *====*( *)~\1\2~; # /// ======== -> ///
s~(///) *\*\*\*\**( *)~\1\2~; # /// ******** -> ///
s~(///) *\* \* \*( \*)* *~\1~; # /// * * * * * -> ///
s~(([^A-Z_])((TODO|FIXME)[^A-Z_].*))~\2 @todo \3~; # TODO* -> @todo TODO* \
s~(([^A-Z_])((BUG)[^A-Z_].*))~\2 @bug \3~; # BUG* -> @bug BUG* \
s~([ \t]*)ABSTRACT([ \t]*\;)~\1\=0\2~; # void f() ABSTRACT; -> void f() =0; \
s~DECLARE_string(.*)~DECLARE_STRING\1~; # /// -> ///< on right after code \
s~DECLARE_bool(.*)~DECLARE_BOOL\1~; # /// -> ///< on right after code \
s~DECLARE_int32(.*)~DECLARE_INT32\1~; # /// -> ///< on right after code \
s~DECLARE_uint32(.*)~DECLARE_UINT32\1~; # /// -> ///< on right after code \
s~DECLARE_int64(.*)~DECLARE_INT64\1~; # /// -> ///< on right after code \
s~DECLARE_uint64(.*)~DECLARE_UINT64\1~; # /// -> ///< on right after code \
s~/// *(Copyright(.*))~// \1~; # clutter \
s~/// *(All [rR]ights [rR]eserved(.*))~// \1~; # clutter \
s~/// *(Date: (.*))~/// @file~; # clutter \
s~/// *Author:(.*)~/// @file~; # /// Author -> /// @file \
s~/// *Author(.*)~/// @file~; # /// Author -> /// @file ' \
< $filename > $outfile