home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / insetlabel.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  2KB  |  88 lines

  1. /* This file is part of
  2.  * ======================================================
  3.  * 
  4.  *           LyX, The Document Processor
  5.  *      
  6.  *        Copyright (C) 1995 Matthias Ettrich
  7.  *          Copyright (C) 1995-1998 The LyX Team.
  8.  *
  9.  *======================================================*/
  10.  
  11. #include <config.h>
  12.  
  13. #ifdef __GNUG__
  14. #pragma implementation
  15. #endif
  16.  
  17. #include "insetlabel.h"
  18.  
  19. //     $Id: insetlabel.C,v 1.1.1.1 1998/04/23 16:02:51 larsbj Exp $    
  20.  
  21. #if !defined(lint) && !defined(WITH_WARNINGS)
  22. static char vcid[] = "$Id: insetlabel.C,v 1.1.1.1 1998/04/23 16:02:51 larsbj Exp $";
  23. #endif /* lint */
  24.  
  25. /* Label. Used to insert a label automatically */
  26.  
  27.  
  28. InsetLabel::InsetLabel(LString const & cmd)
  29. {
  30.     scanCommand(cmd);
  31. }
  32.  
  33.  
  34. InsetLabel::~InsetLabel()
  35. {
  36. }
  37.  
  38.  
  39. Inset* InsetLabel::Clone()
  40. {
  41.     InsetLabel *result = new InsetLabel(getCommand());
  42.     return result;
  43. }
  44.  
  45.  
  46. int InsetLabel::GetNumberOfLabels() const
  47. {
  48.     return 1;
  49. }
  50.  
  51.  
  52. LString InsetLabel::getLabel(int) const
  53. {
  54.     return contents;
  55. }
  56.  
  57. int InsetLabel::Latex(FILE *file, signed char /*fragile*/)
  58. {
  59.     fprintf(file, "%s", escape(getCommand()).c_str());
  60.     return 0;
  61. }
  62.  
  63.  
  64. int InsetLabel::Latex(LString &file, signed char /*fragile*/)
  65. {
  66.     file += escape(getCommand());
  67.     return 0;
  68. }
  69.  
  70. // This function escapes 8-bit characters and other problematic characters
  71. // It's exactly the same code as in insetref.C.
  72. LString InsetLabel::escape(LString const & lab) const {
  73.     char hexdigit[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
  74.                   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  75.     LString enc;
  76.     for (int i=0; i<lab.length(); i++) {
  77.         unsigned char c=lab[i];
  78.         if (c >= 128 || c=='=' || c=='%') {
  79.             enc += '=';
  80.             enc += hexdigit[c>>4];
  81.             enc += hexdigit[c & 15];
  82.         } else {
  83.             enc += (char) c;
  84.         }
  85.     }
  86.     return enc;
  87. }
  88.