#------------------------------------------------------------------------------
# $File: rtf,v 1.9 2020/12/12 20:01:47 christos Exp $
# rtf:  file(1) magic for Rich Text Format (RTF)
#
# Duncan P. Simpson, [email protected]
# Update:       Joerg Jenderek
# URL:          https://en.wikipedia.org/wiki/Rich_Text_Format
# Reference:    http://www.snake.net/software/RTF/RTF-Spec-1.7.rtf
#               http://www.kleinlercher.at/tools/Windows_Protocols/Word2007RTFSpec9.pdf
0       string          {\\rtf
# skip DROID fmt-355-signature-id-522.rtf by looking for valid version
>5      ubyte           !0xAB
# skip also \ in DROID fmt-50-signature-id-158.rtf by looking for valid version
>>5     ubyte           !0x5C           Rich Text Format data
!:mime  text/rtf
!:apple ????RTF
!:ext   rtf
>>>0    use             rtf-info
#       display information like version, language and code page of RTF
0       name            rtf-info
# 1 mostly, 2 for newer Pocket Word documents, space for test like fdo78502.rtf, { for some urtf
>5      ubyte           !0x7b           \b, version %c
# The word for character set must precede any text or most other control words
>6      string          \\mac           \b, Apple Macintosh
>6      string          \\pc
# control word \pca
>>9     ubyte           =0x61           \b, IBM PS/2, code page 850
>>9     ubyte           !0x61           \b, IBM PC, code page 437
# unknown character set or ANSI later after control words like
# \adeflang1025 \info \title \author \category \manager
# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
#>6     search/105      \\ansi          \b, ANSI
>6      search/502      \\ansi          \b, ANSI
>6      default         x               \b, unknown character set
# look for explicit codepage keyword
# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
#>5     search/110      \\ansicpg
>5      search/500      \\ansicpg
# skip unknown or buggy codepage string 0 like in fdo78502.rtf
>>&0    ubyte           !0x30           \b, code page
# codepage string: 437~United States IBM, ..., 1252~WesternEuropean, ..., 57011~Punjabi
>>>&-1          string  x               %-.3s
# skip space or \ and display possible 4th digit of code page string
>>>&2           ubyte   >0x2F
>>>>&-1         ubyte   <0x3A           \b%c
# possible 5th digit of code page string
>>>>>&0         ubyte   >0x2F
>>>>>>&-1       ubyte   <0x3A           \b%c
# look again at version byte to use default clause
>5      ubyte           x
# Default language ID for South Asian/Middle Eastern text
# language ID: 1025, ..., 1065~Persian, ..., 2057~English_UnitedKingdom, ..., 58380~French_NorthAfrica
# Readme-0.72-Persian.rtf
#>6     search/1        \\adeflang      \b, default middle east language ID
>>6     search/497      \\adeflang      \b, default middle east language ID
# https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a
>>>&0   string          x               %.4s
# skip \ and NL and show possible 5th digit of language string
>>>&4   ubyte           >0x2F
>>>>&-1 ubyte           <0x3A           \b%c
# else look for default language to be used when the \plain control word is encountered
>>6     default         x
# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
#>>>6   search/127      \\deflang
>>>6    search/505      \\deflang
>>>>&0  string          >0              \b, default language ID %-.4s
# possible 5th digit of language string
>>>>&4          ubyte   >0x2F
>>>>>&-1        ubyte   <0x3A           \b%c

# Reference:    http://latex2rtf.sourceforge.net/rtfspec_63.html
# Note:         no real world example found
0       string          {\\urtf         Rich Text Format unicoded data
!:mime  text/rtf
#!:apple        ????RTF
!:ext   rtf
>1      use             rtf-info

# URL:          https://en.wikipedia.org/wiki/Microsoft_Word
# Reference:    http://fileformats.archiveteam.org/wiki/Microsoft_Word
# Note: called by TrID "Pocket Word document"
#       by PlanMaker "Pocket Word-Handheld PC" for pwd
#       by PlanMaker "Pocket Word-Pocket PC" for psw
0       string          {\\pwd          Pocket Word document or template
# by SoftMaker Office   http://extension.nirsoft.net/pwd
#!:mime application/msword
# https://reposcope.com/mimetype/application/x-pocket-word
!:mime  application/x-pocket-word
# PWD for Handheld PC variant and PSW for Pocket PC variant
# PWT for template
!:ext   pwd/psw/pwt
>0      use             rtf-info