]> nuage.metani.fr Git - 3GPP.git/blob - bin/docx2asn.sh
Add command to set git proxy to windows system proxy
[3GPP.git] / bin / docx2asn.sh
1 #!/bin/bash
2
3 if [[ $# -eq 0 ]] ; then
4 echo "Usage: ${0##*/} file [files]"
5 echo "Extract ASN.1 from one or more 3GPP 38.331 docx files and save then to .asn files"
6 exit 1
7 fi
8
9 if [[ ! -w . ]] ; then
10 echo "Cannot write to current directory"
11 exit 1
12 fi
13
14 platform=$(uname)
15
16 case $platform in
17 Linux) libreoffice="libreoffice" ;;
18 CYGWIN*) libreoffice="soffice" ;;
19 *) echo "Unkown platform $platform"
20 exit 1;;
21 esac
22
23 if [[ ! -x $(which "$libreoffice") ]] ; then
24 echo "Cannot find libreoffice executable"
25 echo "Make sure it is installed and the PATH variable includes its path"
26 exit 1
27 fi
28
29 while [ "$#" -gt 0 ]; do
30
31 echo "Processing $1"
32
33 if [[ ! -f "$1" ]] || [[ ! -r "$1" ]] ; then
34 echo "$1 is not a readable file"
35 shift
36 continue
37 fi
38
39 if [[ -e "${1%.docx}.txt" ]] ; then
40 echo "${1%.docx}.txt already exists: skipping conversion"
41
42 else
43 $libreoffice --convert-to txt "$1"
44
45 if [[ ! -f "${1%.docx}.txt" ]] || [[ ! -r "${1%.docx}.txt" ]] ; then
46 echo "libreoffice did not create ${1%.docx}.txt"
47 shift
48 continue
49 fi
50
51 case $platform in
52 # Replace EN-DASH (UTF-8 encoding) at line start with -
53 Linux) LC_ALL=C sed -i $'s/^\u2013/-/g' "${1%.docx}.txt" ;;
54
55 # Replace EN-DASH (Windows-1252 encoding) at line start with -
56 # Remove CR (0x0d) put by libreoffice in windows before each LF (0x0a)
57 CYGWIN*) LC_ALL=C sed -i $'s/^\x96/-/g; s/\r$//' "${1%.docx}.txt" ;;
58 *) echo "Unkown platform $platform"
59 exit 1;;
60 esac
61
62 # Changes things that should not be so in the specification
63 # Change "-- Cond N3C MP" to "-- Cond N3C-MP" (to respect condition naming rules)
64 LC_ALL=C sed -i 's/-- Cond N3C MP/-- Cond N3C-MP/' "${1%.docx}.txt"
65 LC_ALL=C sed -i 's/^N3C MP/N3C-MP/' "${1%.docx}.txt"
66 LC_ALL=C sed -i 's/-- Cond HOAndServCellAdd,$/-- Cond HOAndServCellAdd/' "${1%.docx}.txt"
67 fi
68
69 if [[ -e "${1%.docx}.asn" ]] ; then
70 echo "${1%.docx}.asn already exists: not regenerated"
71 shift
72 continue
73 fi
74
75
76 cat "${1%.docx}.txt" | awk '/^-- ASN1START$/,/^-- ASN1STOP$/' | grep -Evxe '-- ASN1ST(ART|OP)' | grep -v '^--' | awk 'NF || p; { p = NF }' p=0 > "${1%.docx}.asn"
77
78 if [[ -e "${1%.docx}.asn" ]] ; then
79 echo "${1%.docx}.asn was generated"
80 fi
81 shift
82 done
83