~ubuntu-dev/ubuntu/lucid/mutt/lucid-201002110857

« back to all changes in this revision

Viewing changes to doc/makedoc.c

  • Committer: Bazaar Package Importer
  • Author(s): Bhavani Shankar
  • Date: 2009-06-07 17:30:03 UTC
  • mto: (16.2.1 experimental) (2.3.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: james.westby@ubuntu.com-20090607173003-rg37ui3h2bbv7wl0
Tags: upstream-1.5.19
ImportĀ upstreamĀ versionĀ 1.5.19

Show diffs side-by-side

added added

removed removed

Lines of Context:
76
76
#define D_DT            (1 << 7)
77
77
#define D_DD            (1 << 8)
78
78
#define D_PA            (1 << 9)
 
79
#define D_IL            (1 << 10)
 
80
#define D_TT            (1 << 11)
79
81
 
80
82
enum
81
83
{
82
84
  SP_START_EM,
83
85
  SP_START_BF,
 
86
  SP_START_TT,
84
87
  SP_END_FT,
85
88
  SP_NEWLINE,
86
89
  SP_NEWPAR,
93
96
  SP_DD,
94
97
  SP_END_DD,
95
98
  SP_END_DL,
 
99
  SP_START_IL,
 
100
  SP_END_IL,
96
101
  SP_END_SECT,
97
102
  SP_REFER
98
103
};
112
117
static void handle_confline (char *, FILE *);
113
118
static void makedoc (FILE *, FILE *);
114
119
static void pretty_default (char *, size_t, const char *, int);
115
 
static int sgml_fputc (int, FILE *);
116
 
static int sgml_fputs (const char *, FILE *);
 
120
static int sgml_fputc (int, FILE *, int);
 
121
static int sgml_fputs (const char *, FILE *, int);
117
122
static int sgml_id_fputs (const char *, FILE *);
118
123
 
119
124
int main (int argc, char *argv[])
584
589
    if (*v <  ' ' || *v & 0x80)
585
590
    {
586
591
      char_to_escape (buff, (unsigned int) *v);
587
 
      sgml_fputs (buff, out);
 
592
      sgml_fputs (buff, out, 1);
588
593
      continue;
589
594
    }
590
 
    sgml_fputc ((unsigned int) *v, out);
 
595
    sgml_fputc ((unsigned int) *v, out, 1);
591
596
  }
592
597
}
593
598
 
594
 
static int sgml_fputc (int c, FILE *out)
 
599
static int sgml_fputc (int c, FILE *out, int full)
595
600
{
596
601
  switch (c)
597
602
  {
 
603
    /* the bare minimum for escaping */
598
604
    case '<': return fputs ("&lt;", out);
599
605
    case '>': return fputs ("&gt;", out);
600
 
    case '$': return fputs ("&dollar;", out);
601
 
    case '_': return fputs ("&lowbar;", out);
602
 
    case '%': return fputs ("&percnt;", out);
603
606
    case '&': return fputs ("&amp;", out);
604
 
    case '\\': return fputs ("&bsol;", out);
605
 
    case '"': return fputs ("&quot;", out);
606
 
    case '[': return fputs ("&lsqb;", out);
607
 
    case ']': return fputs ("&rsqb;", out);
608
 
    case '~': return fputs ("&tilde;", out);
 
607
    /* map to entities, fall-through to raw if !full */
 
608
    case '$': if (full) return fputs ("&dollar;", out);
 
609
    case '_': if (full) return fputs ("&lowbar;", out);
 
610
    case '%': if (full) return fputs ("&percnt;", out);
 
611
    case '\\': if (full) return fputs ("&bsol;", out);
 
612
    case '"': if (full) return fputs ("&quot;", out);
 
613
    case '[': if (full) return fputs ("&lsqb;", out);
 
614
    case ']': if (full) return fputs ("&rsqb;", out);
 
615
    case '~': if (full) return fputs ("&tilde;", out);
 
616
    case '|': if (full) return fputs ("&verbar;", out);
 
617
    case '^': if (full) return fputs ("&circ;", out);
609
618
    default:  return fputc (c, out);
610
619
  }
611
620
}
612
621
 
613
 
static int sgml_fputs (const char *s, FILE *out)
 
622
static int sgml_fputs (const char *s, FILE *out, int full)
614
623
{
615
624
  for (; *s; s++)
616
 
    if (sgml_fputc ((unsigned int) *s, out) == EOF)
 
625
    if (sgml_fputc ((unsigned int) *s, out, full) == EOF)
617
626
      return EOF;
618
 
  
 
627
 
619
628
  return 0;
620
629
}
621
630
 
624
633
{
625
634
  char id;
626
635
 
 
636
  if (*s == '<')
 
637
    s++;
 
638
 
627
639
  for (; *s; s++)
628
640
  {
629
641
    if (*s == '_')
630
642
      id = '-';
631
643
    else
632
644
      id = *s;
 
645
    if (*s == '>' && !*(s+1))
 
646
      break;
633
647
 
634
648
    if (fputc ((unsigned int) id, out) == EOF)
635
649
      return EOF;
697
711
      fputs ("\n<sect2 id=\"", out);
698
712
      sgml_id_fputs(varname, out);
699
713
      fputs ("\">\n<title>", out);
700
 
      sgml_fputs (varname, out);
 
714
      sgml_fputs (varname, out, 1);
701
715
      fprintf (out, "</title>\n<literallayout>Type: %s", type2human (type));
 
716
 
702
717
      
703
718
      if (type == DT_STR || type == DT_RX || type == DT_ADDR || type == DT_PATH)
704
719
      {
705
 
        fputs ("\nDefault: &quot;", out);
706
 
        sgml_print_strval (val, out);
707
 
        fputs ("&quot;</literallayout>\n", out);
 
720
        if (val && *val)
 
721
        {
 
722
          fputs ("\nDefault: <quote><literal>", out);
 
723
          sgml_print_strval (val, out);
 
724
          fputs ("</literal></quote>", out);
 
725
        }
 
726
        else
 
727
        {
 
728
          fputs ("\nDefault: (empty)", out);
 
729
        }
 
730
        fputs ("</literallayout>\n", out);
708
731
      }
709
732
      else
710
733
        fprintf (out, "\nDefault: %s</literallayout>\n", val);
733
756
 ** - .dt starts a term in a definition list.
734
757
 ** - .dd starts a definition in a definition list.
735
758
 ** - .de on a line finishes a definition list.
 
759
 ** - .il on a line starts an itemzied list
 
760
 ** - .dd starts an item in an itemized list
 
761
 ** - .ie on a line finishes an itemized list
736
762
 ** - .ts on a line starts a "tscreen" environment (name taken from SGML).
737
763
 ** - .te on a line finishes this environment.
738
764
 ** - .pp on a line starts a paragraph.
766
792
  if (docstat & (D_DL))
767
793
    docstat = print_it (SP_END_DL, NULL, out, docstat);
768
794
 
769
 
  if (docstat & (D_EM | D_BF))
 
795
  if (docstat & (D_EM | D_BF | D_TT))
770
796
    docstat = print_it (SP_END_FT, NULL, out, docstat);
771
797
 
772
798
  docstat = print_it (SP_END_SECT, NULL, out, docstat);
794
820
      {
795
821
        static int Continuation = 0;
796
822
 
797
 
        case SP_END_FT: docstat &= ~(D_EM|D_BF); break;
 
823
        case SP_END_FT: docstat &= ~(D_EM|D_BF|D_TT); break;
798
824
        case SP_START_BF: docstat |= D_BF; break;
799
825
        case SP_START_EM: docstat |= D_EM; break;
 
826
        case SP_START_TT: docstat |= D_TT; break;
800
827
        case SP_NEWLINE: 
801
828
        {
802
829
          if (onl)
850
877
        }
851
878
        case SP_DD:
852
879
        {
 
880
          if (docstat & D_IL)
 
881
            fputs ("- ", out);
853
882
          Continuation = 0;
854
883
          break;
855
884
        }
859
888
          docstat &= ~D_DL;
860
889
          break;
861
890
        }
 
891
        case SP_START_IL:
 
892
        {
 
893
          docstat |= D_IL;
 
894
          break;
 
895
        }
 
896
        case SP_END_IL:
 
897
        {
 
898
          Continuation = 0;
 
899
          docstat &= ~D_IL;
 
900
          break;
 
901
        }
862
902
        case SP_STR:
863
903
        {
864
904
          if (Continuation)
890
930
        case SP_END_FT: 
891
931
        {
892
932
          fputs ("\\fP", out);
893
 
          docstat &= ~(D_EM|D_BF);
 
933
          docstat &= ~(D_EM|D_BF|D_TT);
894
934
          break;
895
935
        }
896
936
        case SP_START_BF: 
897
937
        {
898
938
          fputs ("\\fB", out);
899
939
          docstat |= D_BF;
900
 
          docstat &= ~D_EM;
 
940
          docstat &= ~(D_EM|D_TT);
901
941
          break;
902
942
        }
903
943
        case SP_START_EM:
904
944
        {
905
945
          fputs ("\\fI", out);
906
946
          docstat |= D_EM;
907
 
          docstat &= ~D_BF;
 
947
          docstat &= ~(D_BF|D_TT);
908
948
          break;
909
949
        }
 
950
        case SP_START_TT:
 
951
        {
 
952
          fputs ("\\fC", out);
 
953
          docstat |= D_TT;
 
954
          docstat &= ~(D_BF|D_EM);
 
955
          break;
 
956
        }
910
957
        case SP_NEWLINE:
911
958
        {
912
959
          if (onl)
959
1006
        }
960
1007
        case SP_DD:
961
1008
        {
962
 
          fputs ("\n", out);
 
1009
          if (docstat & D_IL)
 
1010
            fputs (".TP\n\\(hy ", out);
 
1011
          else
 
1012
            fputs ("\n", out);
963
1013
          break;
964
1014
        }
965
1015
        case SP_END_DL:
968
1018
          docstat &= ~D_DL;
969
1019
          break;
970
1020
        }
 
1021
        case SP_START_IL:
 
1022
        {
 
1023
          fputs (".RS\n.PD 0\n", out);
 
1024
          docstat |= D_IL;
 
1025
          break;
 
1026
        }
 
1027
        case SP_END_IL:
 
1028
        {
 
1029
          fputs (".RE\n.PD 1", out);
 
1030
          docstat &= ~D_DL;
 
1031
          break;
 
1032
        }
971
1033
        case SP_STR:
972
1034
        {
973
1035
          while (*str)
1007
1069
        {
1008
1070
          if (docstat & D_EM) fputs ("</emphasis>", out);
1009
1071
          if (docstat & D_BF) fputs ("</emphasis>", out);
1010
 
          docstat &= ~(D_EM|D_BF);
 
1072
          if (docstat & D_TT) fputs ("</literal>", out);
 
1073
          docstat &= ~(D_EM|D_BF|D_TT);
1011
1074
          break;
1012
1075
        }
1013
1076
        case SP_START_BF: 
1014
1077
        {
1015
1078
          fputs ("<emphasis role=\"bold\">", out);
1016
1079
          docstat |= D_BF;
1017
 
          docstat &= ~D_EM;
 
1080
          docstat &= ~(D_EM|D_TT);
1018
1081
          break;
1019
1082
        }
1020
1083
        case SP_START_EM:
1021
1084
        {
1022
1085
          fputs ("<emphasis>", out);
1023
1086
          docstat |= D_EM;
1024
 
          docstat &= ~D_BF;
 
1087
          docstat &= ~(D_BF|D_TT);
1025
1088
          break;
1026
1089
        }
 
1090
        case SP_START_TT:
 
1091
        {
 
1092
          fputs ("<literal>", out);
 
1093
          docstat |= D_TT;
 
1094
          docstat &= ~(D_BF|D_EM);
 
1095
          break;
 
1096
        }
1027
1097
        case SP_NEWLINE:
1028
1098
        {
1029
1099
          if (onl)
1062
1132
        }
1063
1133
        case SP_START_TAB:
1064
1134
        {
 
1135
          if (docstat & D_PA)
 
1136
          {
 
1137
            fputs ("\n</para>\n", out);
 
1138
            docstat &= ~D_PA;
 
1139
          }
1065
1140
          fputs ("\n<screen>\n", out);
1066
1141
          docstat |= D_TAB | D_NL;
1067
1142
          break;
1075
1150
        }
1076
1151
        case SP_START_DL:
1077
1152
        {
 
1153
          if (docstat & D_PA)
 
1154
          {
 
1155
            fputs ("\n</para>\n", out);
 
1156
            docstat &= ~D_PA;
 
1157
          }
1078
1158
          fputs ("\n<variablelist>\n", out);
1079
1159
          docstat |= D_DL;
1080
1160
          break;
1087
1167
        case SP_DD:
1088
1168
        {
1089
1169
          docstat |= D_DD;
1090
 
          fputs ("</term>\n<listitem><para>", out);
 
1170
          if (docstat & D_DL)
 
1171
            fputs("</term>\n", out);
 
1172
          fputs ("<listitem><para>", out);
1091
1173
          break;
1092
1174
        }
1093
1175
        case SP_END_DD:
1094
1176
        {
1095
1177
          docstat &= ~D_DD;
1096
 
          fputs ("</para></listitem></varlistentry>\n", out);
 
1178
          fputs ("</para></listitem>", out);
 
1179
          if (docstat & D_DL)
 
1180
            fputs("</varlistentry>\n", out);
1097
1181
          break;
1098
1182
        }
1099
1183
        case SP_END_DL:
1102
1186
          docstat &= ~(D_DD|D_DL);
1103
1187
          break;
1104
1188
        }
 
1189
        case SP_START_IL:
 
1190
        {
 
1191
          if (docstat & D_PA)
 
1192
          {
 
1193
            fputs ("\n</para>\n", out);
 
1194
            docstat &= ~D_PA;
 
1195
          }
 
1196
          fputs ("\n<itemizedlist>\n", out);
 
1197
          docstat |= D_IL;
 
1198
          break;
 
1199
        }
 
1200
        case SP_END_IL:
 
1201
        {
 
1202
          fputs ("</para></listitem></itemizedlist>\n", out);
 
1203
          docstat &= ~(D_DD|D_DL);
 
1204
          break;
 
1205
        }
1105
1206
        case SP_END_SECT:
1106
1207
        {
1107
1208
          fputs ("</sect2>", out);
1110
1211
        case SP_STR:
1111
1212
        {
1112
1213
          if (docstat & D_TAB)
1113
 
            fputs (str, out);
 
1214
            sgml_fputs (str, out, 0);
1114
1215
          else
1115
 
            sgml_fputs (str, out);
 
1216
          {
 
1217
            while (*str)
 
1218
            {
 
1219
              for (; *str; str++)
 
1220
              {
 
1221
                if (!strncmp (str, "``", 2))
 
1222
                {
 
1223
                  fputs ("<quote>", out);
 
1224
                  str++;
 
1225
                }
 
1226
                else if (!strncmp (str, "''", 2))
 
1227
                {
 
1228
                  fputs ("</quote>", out);
 
1229
                  str++;
 
1230
                }
 
1231
                else
 
1232
                  sgml_fputc (*str, out, 1);
 
1233
              }
 
1234
            }
 
1235
          }
1116
1236
          break;
1117
1237
        }
1118
1238
      }
1143
1263
    fputs ("\">", out);
1144
1264
    if (output_dollar)
1145
1265
      fputs ("&dollar;", out);
1146
 
    sgml_fputs (ref, out);
 
1266
    sgml_fputs (ref, out, 1);
1147
1267
    fputs ("</link>", out);
1148
1268
    break;
1149
1269
 
1183
1303
    return print_it (SP_START_DL, NULL, out, docstat);
1184
1304
  else if (!strncmp (l, ".de", 3))
1185
1305
    return print_it (SP_END_DL, NULL, out, docstat);
 
1306
  else if (!strncmp (l, ".il", 3))
 
1307
    return print_it (SP_START_IL, NULL, out, docstat);
 
1308
  else if (!strncmp (l, ".ie", 3))
 
1309
    return print_it (SP_END_IL, NULL, out, docstat);
1186
1310
  else if (!strncmp (l, ". ", 2))
1187
1311
    *l = ' ';
1188
1312
 
1210
1334
      docstat = print_it (SP_START_BF, NULL, out, docstat);
1211
1335
      s += 2;
1212
1336
    }
 
1337
    else if (!strncmp (s, "\\fC", 3))
 
1338
    {
 
1339
      docstat = commit_buff (buff, &d, out, docstat);
 
1340
      docstat = print_it (SP_START_TT, NULL, out, docstat);
 
1341
      s += 2;
 
1342
    }
1213
1343
    else if (!strncmp (s, "\\fP", 3))
1214
1344
    {
1215
1345
      docstat = commit_buff (buff, &d, out, docstat);
1229
1359
    }
1230
1360
    else if (!strncmp (s, ".dd", 3))
1231
1361
    {
 
1362
      if ((docstat & D_IL) && (docstat & D_DD))
 
1363
      {
 
1364
        docstat = commit_buff (buff, &d, out, docstat);
 
1365
        docstat = print_it (SP_END_DD, NULL, out, docstat);
 
1366
      }
1232
1367
      docstat = commit_buff (buff, &d, out, docstat);
1233
1368
      docstat = print_it (SP_DD, NULL, out, docstat);
1234
1369
      s += 3;
1252
1387
      else
1253
1388
      {
1254
1389
        ref = s;
1255
 
        while (isalnum ((unsigned char) *s) || *s == '-' || *s == '_')
 
1390
        while (isalnum ((unsigned char) *s) || (*s && strchr("-_<>", *s)))
1256
1391
          ++s;
1257
1392
 
1258
1393
        docstat = commit_buff (buff, &d, out, docstat);