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'.

