ZWIKI

De SAP ABAP en castellano

Para copiar el código fuente de este programa, pulsa en la pestaña de editar, y copia el texto comprendido entre <source lang="abap"> y </source>

Si falla con un progama que tenga líneas mayor de 72 carácteres, utiliza la versión ZWIKI_ECC


************************************************************************
* MÓDULO      : BC
* TIPO        : Utilidad
* TITULO      : Convierte el código fuente de un programa a formato WIKI
* DESCRIPCION :                                                        *
* Convierte el código fuerte en bruto de un programa en el sistena, o  *
* cargado a partir de un fichero de texto, en formato de MediaWiki,
*   - un espacio al principio para señalar bloque de código,
*   - comentarios en cursiva
*   - marca como hipervínculos las tablas, funciones e includes
* El resultado de la conversión se deja en el portapapeles para poder
* ser pegado fácilmente en el wiki http://sap4.com/wiki
* ...                                                                  *
* AUTOR: Andrés Picazo              Fecha: 30/10/2006                  *
*                                                                      *
************************************************************************
   REPORT zwiki.
 
   DATA: d_linea(100).
   DATA: BEGIN OF source_ori OCCURS 1000,
             line(72),
         END OF source_ori.
   DATA: BEGIN OF source OCCURS 1000,
             line(100),
         END OF source.
 
   PARAMETERS: program LIKE sy-repid DEFAULT sy-repid,
               fichero  LIKE  rlgrap-filename, "Fichero local
               clipboa AS CHECKBOX.
 
   selection-screen skip.
   parameters: anchofij as checkbox default 'X'.
 
   START-OF-SELECTION.
     DATA: l_aux1(80), l_aux2(80), l_grab, l_tabla(14),
           l_aux3(80), l_aux4(80),
           l_long TYPE i,
           l_function.
 
     IF clipboa = 'X'.
       CALL FUNCTION 'CLPB_IMPORT'
            TABLES
                 data_tab   = source_ori
            EXCEPTIONS
                 clpb_error = 1
                 OTHERS     = 2.
     ELSE.
       IF NOT program IS INITIAL.
         READ REPORT program INTO source_ori.
       ELSEIF NOT fichero IS INITIAL.
         CALL FUNCTION 'WS_UPLOAD'
              EXPORTING
                   filename        = fichero
                   filetype        = 'ASC'
              TABLES
                   data_tab        = source_ori
              EXCEPTIONS
                   file_open_error = 1
                   file_read_error = 2
                   invalid_type    = 3
                   unknown_error   = 4.
       ENDIF.
     ENDIF.
 
     if anchofij = 'X'.
       PERFORM set_fixlen(saplgrap) USING '0' 76.
       PERFORM set_trail_blanks(saplgrap) USING 'X'.
     endif.
 
     source[] = source_ori[].
 
     CALL FUNCTION 'PRETTY_PRINTER'
          EXPORTING
               inctoo             = space
          TABLES
               ntext              = source
               otext              = source
          EXCEPTIONS
               enqueue_table_full = 1
               include_enqueued   = 2
               include_readerror  = 3
               include_writeerror = 4
               OTHERS             = 5.
 
     DATA:  i_token LIKE stokex OCCURS 10 WITH HEADER LINE,
           i_statements LIKE sstmnt OCCURS 10 WITH HEADER LINE,
           l_linea TYPE i,
           l_token like stokex.
 
     refresh: i_token, i_statements.
     SCAN ABAP-SOURCE source TOKENS INTO i_token
                               STATEMENTS INTO i_statements.
 
     CLEAR l_grab.
     LOOP AT source.
       l_linea = sy-tabix.
       if source is initial.
         continue.
       endif.
 
       clear i_token.
       READ TABLE i_token WITH KEY row = l_linea.
       d_linea = source.
       IF d_linea CS '[[' OR d_linea CS ']]' OR
          ( d_linea CS '<' AND d_linea CS '>' ) OR
          d_linea CS '''''' OR d_linea CS 'nowiki'.
 
         READ TABLE i_token WITH KEY row = l_linea
                                     type = 'S'
                                     str = ''''''
                            transporting no fields.
         if sy-subrc ne 0.
           READ TABLE i_token WITH KEY row = l_linea
                                       type = 'I'
                                       str = '<>'
                              transporting no fields.
           if sy-subrc ne 0.
             CONCATENATE '<nowiki>' d_linea '</nowiki>' INTO source.
             MODIFY source.
             CONTINUE.
           endif.
         endif.
       ENDIF.
       IF d_linea(1) = '*'.
         CONCATENATE '''''' source '''''' INTO source.
         MODIFY source.
         CONTINUE.
       ENDIF.
 
       IF d_linea CS '"'.
         SPLIT d_linea AT '"' INTO l_aux1 l_aux2.
         CONCATENATE l_aux1 '''''' '"' l_aux2 '''''' INTO source.
         MODIFY source.
         d_linea = source.
       ENDIF.
 
       IF i_token-type NE 'I'.
         CONTINUE.
       ENDIF.
 
       IF i_token-str = 'CALL'.
         CLEAR: l_tabla.
         SEARCH d_linea FOR 'CALL FUNCTION '''.
         IF sy-subrc = 0.
           TRANSLATE d_linea TO UPPER CASE.
           SPLIT d_linea AT 'CALL FUNCTION ''' INTO l_aux1 l_aux2.
           l_long = strlen( l_aux1 ).
           IF l_long = 0.
             l_long = strlen( l_aux2 ).
             IF l_long > 0.
               l_function = 'X'.
               SPLIT l_aux2 AT '''' INTO l_aux3 l_aux4.
           CONCATENATE l_aux1 'CALL FUNCTION ''[[' l_aux3 ']]''' l_aux4
                                                            INTO source.
               IF l_aux1 IS INITIAL.
                 SEARCH d_linea FOR 'CALL FUNCTION '''.
                 IF sy-fdpos > 0.
                   l_long = sy-fdpos.
                   source+l_long = source.
                   CLEAR source(l_long).
                 ENDIF.
               ENDIF.
               MODIFY source.
               d_linea = source.
               CONTINUE.
             ENDIF.
           ENDIF.
         ENDIF.
       ENDIF.
 
       IF l_function IS INITIAL.
         CLEAR l_tabla.
         IF i_token-str =  'TABLES '.
           TRANSLATE d_linea TO UPPER CASE.
           SPLIT d_linea AT 'TABLES' INTO l_aux1 l_aux2.
           SPLIT l_aux2 AT ':' INTO l_aux1 l_aux2.
           IF l_aux2 CA '.'.
             IF l_aux2 CA ','.
               SPLIT l_aux2 AT ',' INTO l_aux1 l_aux2.
               CONDENSE l_aux1.
               l_tabla = l_aux1.
             else.
               SPLIT l_aux2 AT '.' INTO l_aux1 l_aux2.
               CONDENSE l_aux1.
               l_tabla = l_aux1.
             endif.
           ELSE.
             l_grab = 'X'.
             SPLIT l_aux2 AT ',' INTO l_aux1 l_aux2.
             CONDENSE l_aux1.
             l_tabla = l_aux1.
           ENDIF.
         ELSE.
           TRANSLATE d_linea TO UPPER CASE.
           IF l_tabla IS INITIAL AND l_grab = 'X'.
             IF d_linea CA '.'.
               SPLIT d_linea AT '.' INTO l_aux1 l_aux2.
               CONDENSE l_aux1.
               l_tabla = l_aux1.
               CLEAR l_grab.
             ELSE.
               SPLIT d_linea AT ',' INTO l_aux1 l_aux2.
               CONDENSE l_aux1.
               l_tabla = l_aux1.
             ENDIF.
           ENDIF.
         ENDIF.
         IF NOT l_tabla IS INITIAL.
           l_long = strlen( l_tabla ).
           SPLIT d_linea AT l_tabla(l_long) INTO l_aux1 l_aux2.
           IF l_aux1 IS INITIAL.
             CONCATENATE l_aux1 '[[' l_tabla ']]' INTO l_aux3.
           ELSE.
             CONCATENATE '[[' l_tabla ']]' INTO l_aux3.
             CONCATENATE l_aux1 l_aux3 INTO l_aux3 SEPARATED BY space.
           ENDIF.
           IF l_aux1 IS INITIAL.
             SEARCH d_linea FOR l_tabla.
             IF sy-fdpos > 0.
               l_long = sy-fdpos.
               l_aux3+l_long = l_aux3.
               CLEAR l_aux3(l_long).
             ENDIF.
           ENDIF.
           CONCATENATE l_aux3 l_aux2 INTO d_linea
           SEPARATED BY space.
           source = d_linea.
           MODIFY source.
           CONTINUE.
         ENDIF.
       ENDIF.
 
       IF i_token-str =  'INCLUDE '.
         SPLIT d_linea AT 'INCLUDE ' INTO l_aux1 l_aux2.
         SEARCH l_aux2 FOR 'STRUCTURE'.
         IF sy-subrc NE 0.
           IF l_aux2 CA '.'.
             SPLIT l_aux2 AT '.' INTO l_aux1 l_aux2.
           ELSE.
             SPLIT l_aux2 AT ',' INTO l_aux1 l_aux2.
           ENDIF.
           l_tabla = l_aux1.
           CONDENSE l_tabla.
           l_long = strlen( l_tabla ).
           IF l_long > 0.
             SPLIT d_linea AT l_tabla(l_long) INTO l_aux1 l_aux2.
             IF l_aux1 IS INITIAL.
               CONCATENATE l_aux1 '[[' l_tabla ']]' l_aux2 INTO d_linea.
             ELSE.
               CONCATENATE '[[' l_tabla ']]' l_aux2 INTO l_aux3.
               CONCATENATE l_aux1 l_aux3 INTO d_linea
               SEPARATED BY space.
             ENDIF.
             source = d_linea.
             MODIFY source.
             CONTINUE.
           ENDIF.
         ENDIF.
       ENDIF.
 
       IF i_token-str =  'FORM ' OR i_token-str =  'ENDFORM' OR
       i_token-str =  'DEFINE ' OR i_token-str = 'END-OF-DEFINITION' OR
    i_token-str ='START-OF-SELECTION' OR i_token-str = 'INITIALIZATION'
       OR i_token-str ='END-OF-SELECTION' OR i_token-str = 'REPORT' or
       i_token-str = 'AT SELECCION-SCREEN' or
       i_token-str = 'SELECTION-SCREEN' or
        i_token-str = 'FUNCTION' OR I_TOKEN-STR = 'ENDFUNCTION'.
         CONCATENATE '''''''' source '''''''' INTO source.
         MODIFY source.
         CONTINUE.
       ENDIF.
 
       IF d_linea(7) =  'DEFINE '.
         CONCATENATE '''''''' source '''''''' INTO source.
         MODIFY source.
         CONTINUE.
       ENDIF.
     ENDLOOP.
 
     DATA: BEGIN OF ctrl,
     codigo(1) TYPE x VALUE '09',
     END OF ctrl.
 
     LOOP AT source.
       IF NOT source IS INITIAL.
         source+1 = source.
         source(1) = ' '.
         l_long = strlen( source ).
         MODIFY source.
       ELSE.
         source(1) = ' '.
         if anchofij is initial.
           source+1 = ctrl.
         endif.
         MODIFY source.
       ENDIF.
       WRITE / source.
     ENDLOOP.
 
     CLEAR source.
     APPEND source.
     source = '[[Categoría:Código]]'.
     APPEND source.
 
     CALL FUNCTION 'CLPB_EXPORT'
          TABLES
               data_tab   = source
          EXCEPTIONS
               clpb_error = 1
               OTHERS     = 2.
 
  MESSAGE s398(00) WITH 'Tiene el código formateado en el portapapeles'.
Herramientas personales
Google AdSense