#!/bin/bash
#2007 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html)

#info screen
#choose input file
#specify output file name
#result notification
#
##----------- convert file to pdf ---------->
#
# author: thoughtjourney, 13/06/2005
#
##------------------------------------------>


#------------------------------variables--------------------------------->

INPUT=""
OUTPUT=""
TEMP="temp.ps"
GUI=0
SUPP="このパピーPDF変換ウィザード（puppyPDF）は入力ファイルを取り込み、\n それをPDFフォーマットに変換します。このウィザードは外部の３つのプログラムに依存します：\n\nbash、Abiword、とps2pdfです。\n\nそしてパピーバージョン 1.03以降の使用をお薦めします。\nなぜなら、これらのプログラムは標準ISOファイルに含まれているからです。\n\n=== サポートされているファイルフォーマット ===\n\nAbiwordドキュメント（.abw、.awt）\n\nマイクロソフト・ワードドキュメント（.doc、.dot）\n\nRich Textフォーマットドキュメント（.rtf）\n\nテキスト・ドキュメント（.txt、.text）\n\n=============================="


#-------------------------------functions-------------------------------->

#---prints puppyPDF help--->
function usage  
{
   echo
   echo -e "puppyPDF [OPTIONS... ]\n"
   echo -e "-i                   input file"
   echo -e "-o                   output file"
   echo -e "-h, --help           prints help"
   echo
   echo -e "$SUPP"
}

#---gui version of events--->
function gui
{
   splash
   exit 0
}

#---checks to ensure cli arguments are valid--->
function checkArgs  
{
   if [ -f "$INPUT" ]; then

        #--- check to ensure file is not already pdf --->
        file "$INPUT" > /tmp/type
        test=`grep -n PDF /tmp/type`


        if [ "$test" = "" ]; then
           rm -f /tmp/type #not a pdf file

        else
           #--- if gui is running... --->
           if [ $GUI -eq 1 ]; then
                Xdialog --title "PDFファイルを選択して下さい"\
                        --yesno "PDFファイルが選択されました。\n\n「YES」をクリックしてもう一度試して下さい。\n\n あるいは「NO」をクリックして終了して下さい。\n\n" 0 0
                case $? in
                 0)
                   chooseFile
                   exit 0;;
                 1)
                   exit 0;;
                 255)
                  echo "";;
                esac
           else 
                #--- for cli interface --->
                echo -e "\n有効な入力ファイルを指定して下さい\n"
                usage
                exit 0
          fi
        fi
        rm -f /tmp/type

   else

      #--- input is not a file --->
      if [ $GUI -eq 1 ]; then
           Xdialog --title "ファイルが選択されていません"\
                   --yesno "不正なファイルが選択されました。\n\n「YES」を押してもう一度試して下さい。\n\n あるいは「NO」を押して終了して下さい\n\n" 0 0
         case $? in
           0)
             chooseFile
             exit 0;;
           1)
             exit 0;;
           255)
             echo "";;
         esac
      else 
         echo -e "\n有効な入力ファイルを指定して下さい\n"
         usage
         exit 0
      fi
   fi


   #--- no output filename specified --->
   if [ "$OUTPUT" = "" ]; then
      OUTPUT="$INPUT.pdf"
      echo -e "no output filename specified, using $INPUT.pdf\n"
      if [ $GUI -eq 1 ]; then
         Xdialog --title "INFO BOX" \
                 --infobox "出力ファイル名を指定されませんでしたので、\n $INPUT.pdfを使います。" 13 45 20000
      fi         
   fi


   #--- specified output file already exists --->
   if [ -f "$OUTPUT" ]; then
       if [ $GUI -eq 1 ]; then
            Xdialog --title "ファイル名はすでに存在します"\
                    --yesno "$OUTPUT　はすでに存在します\n\n「YES」を押して上書き\n\nあるいは「NO」で変更\n\n" 0 0
         case $? in
           0)
             echo "";;
           1)
             outputName;;
           255)
             echo "";;
         esac

       else      
         echo -e "$OUTPUT already exists! Press ENTER to continue or CTRL-C to quit\n"
         read in
       fi
   fi

}

#---splashscreen--->
function splash
{
   Xdialog --title "パピーPDF変換ウィザード"\
           --help "$SUPP"\
           --yesno "パピーPDF変換ウィザードへようこそ！\n\n\
「YES」を押して変換するファイルを選択して下さい。\n\n 「NO」で終了、\n\n あるいは「HELP」でヘルプ情報\n\n" 0 0

   case $? in
     0)
       chooseFile;;
     1)
       echo ""
       exit 1;;
     255)
       echo "";;
   esac
}

#---choose file to convert to pdf--->
function chooseFile
{
   INPUT=`Xdialog --title "変換するファイルの選択" --fselect /root/my-documents 28 60 2>&1`

   case $? in
	   0)
             Xdialog --title "次のステップ： 名前を付けて保存..."\
                     --infobox "次のステップはPDFファイル名を指定して下さい。\n\n 「OK」を押して続けて下さい。\n\n" 0 0 10000
             outputName;;
	   1)
             splash;;
	   255)
             echo "";;
   esac

}


#---select output filename--->
function outputName
{
   OUTPUT=`Xdialog --title "Save As..." --fselect "$INPUT.pdf" 28 60 2>&1`

   case $? in
	   0)
             finalConfirm;;
	   1)
             splash;;
	   255)
             echo "";;
   esac
}

#---final confirmation--->
function finalConfirm
{
   checkArgs
   Xdialog --wrap --title "確認..."\
           --yesno "パピーPDF変換ウィザードは \n\n\
$INPUT\n\nをPDFファイルに書き換えます。\n\n$OUTPUT\n\n\
もし正しいければ「YES」を選択、\n 中止するなら「NO」を選択して下さい\n\n" 0 0

   case $? in
     0)
       convert
       display;;
     1)
       splash;;
     255)
       echo "";;
   esac 
}

#---performs the file conversion--->
function convert 
{
   echo printing...

   #-- convert to ps--->
   res=`abiword --print="$TEMP" "$INPUT"`
 
   if [ "$res" = "" ]; then

       #-- convert to pdf--->
       res2=`ps2pdf "$TEMP" "$OUTPUT"`

       if [ "$res2" = "" ]; then

          #--- cleanup --->
          rm -f "$TEMP"

          echo -e "done!\n"

       else
          echo RES2 equals $res2
          echo -e "ps2pdf エラー! Exiting..."
          Xdialog --title "ファイル変換エラー！"\
                  --infobox "ファイル変換中にエラーが起こりました！\n\n入力ファイルのフォーマットがサポートされている事をチェックして下さい。\n\n\
「OK」を押して終了して下さい。\n\n" 0 0 20000
          rm -f "$OUTPUT"	
          exit 1
       fi
   else
      echo RES equals $res
      echo -e "abiword エラー! Exiting..."
      Xdialog --title "ファイル変換エラー！"\
                  --infobox "ファイル変換中にエラーが起こりました！\n\n入力ファイルのフォーマットがサポートされている事をチェックして下さい。\n\n\
「OK」を押して終了して下さい。\n\n" 0 0 20000
      rm -f "$OUTPUT"
      exit 1
   fi	
}

#---opens the pdf document--->
function display
{
   ghostview "$OUTPUT" &
}

#---commandline sequence--->
function cli
{
   checkArgs
   convert
   display
}
#---------------------------------main-------------------------------->

if [ "$1" ]; then
   #cli
   while [ "$1" != "" ]; do
    case $1 in
        -i | -I)                shift
                                INPUT=$1
                                ;;
        -o | -O)                shift
                                OUTPUT=$1
                                ;;	 
        -h | --help )           usage
                                exit
                                ;;
        * )                     gui
                                exit 1
    esac
    shift
   done

   cli

else
   GUI=1
   gui
   exit 0
fi

exit 0

#------------------------------------------------------------------->


