<?php
    ##########################################################################
    ##########################################################################
    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar
    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;
    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))
        {
            PCO_Mensaje("{$MULTILANG_ErrorTitAuth}", "{$MULTILANG_WSErr06}", '', 'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink', 'alert alert-warning alert-dismissible');
            PCO_Auditar("$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-33","SECLog:event");
            die();
        }
    ##########################################################################
    ##########################################################################


    /*
    	Function: PCO_CargarObjeto_LlamadoInternoPCoder
    	Carga el elemento interno (Formulario -33) asociado al diseno del {P}Coder
    	
        Variables de entrada basicas del Framework:
            URL - index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1
        
        Variables de entrada especificas para el elemento:
            PCODER_archivo - Ruta del archivo que sera abierto.
            PCODER_ModoEditor - Modo utilizado para el editor (lenguaje a ser reconocido)
            PCODER_OcultarMenu - Indica a PCoder que no cargue la barra de menu superior y la barra de estado para hacer el editor mas amplio.  Se presentara mensaje advirtiendo como se puede abrir en caso que se desee.
            PCODER_OcultarEstado - Oculta barra de estado del editor
            PCODER_TipoMenu - Indica el tipo de diseno de menu del editor como uno de dos valores:  Texto | Iconos.  Si no es especificado se asume tipo texto
            PCODER_EstadoSimple - Indica a PCoder que no cargue la barra de estado inferior con datos sobre el contenido editado.  Solo presentara las opciones basicas de distribucion del editor y comando de saltar a una linea.
            PCODER_SoloLectura - Determina si el editor ACE se inicia en modo de solo lectura.  Util para vistas o revision de versiones anteriores del documento.  Que permiten editor completo sin posibilidad de edicion
            PCODER_Titulo - Define un texto utilizado como titulo del documento cuando se requiera dar detalles para su edicion

            Origen_Archivo - Determina el origen del contenido para el archivo.  A=Archivo B=BaseDatos
            Tabla_Archivo - Cuando el origen es B.  Indica el nombre de la tabla vinculada que almacena el contenido
            Campo_Archivo - Cuando el origen es B.  Indica el nombre del campo que almacena el contenido
            Llave_Registro - Cuando el origen es B.  Indica valor del campo ID del registro que almacena el contenido
            PCODER_extension - Extension de archivo asociada al contenido.  Si no se recibe y es un archivo se intenta tomar desde su nombre.  Obligatorio en las aperturas de contenido por BD.  Ej:  php | html | js | txt

    	Salida:
    		Editor {P}Coder cargado en el navegador con edicion del elemento deseado
    	
    	Ejemplos (Concatene a la URL base):
    	    Llamado archivo:            &PCODER_archivo=tmp/index.html
    	    Cambio del modo o lenguaje: &PCODER_ModoEditor=HTML
    	    Ocultar menu superior:      &PCODER_OcultarMenu=1
    	    Usar menu de iconos:        &PCODER_TipoMenu=Iconos
    	    Ocultar la barra de estado: &PCODER_OcultarEstado=1
    	    Abrir en modo de lectura:   &PCODER_SoloLectura=1

    	index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&PCODER_archivo=tmp/index.html&PCODER_ModoEditor=PHP&PCODER_TipoMenu=Iconos&PCODER_EstadoSimple=1&PCODER_SoloLectura=1

    */

    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/variables.php
            //Define los modos o lenguajes soportados por el editor
            global $PCODER_Modos;
        	$PCODER_Modos[]=array("Nombre" => "ABAP",	"Extensiones" => "abap");
        	$PCODER_Modos[]=array("Nombre" => "ActionScript",	"Extensiones" => "as");
        	$PCODER_Modos[]=array("Nombre" => "ADA",	"Extensiones" => "ada|adb|ads");
        	$PCODER_Modos[]=array("Nombre" => "Apache_Conf",	"Extensiones" => "htaccess|htgroups|htpasswd|conf|htaccess|htgroups|htpasswd");
        	$PCODER_Modos[]=array("Nombre" => "AsciiDoc",	"Extensiones" => "asciidoc|adoc|ans|asc");
        	$PCODER_Modos[]=array("Nombre" => "Assembly_x86",	"Extensiones" => "asm");
        	$PCODER_Modos[]=array("Nombre" => "AutoHotKey",	"Extensiones" => "ahk");
        	$PCODER_Modos[]=array("Nombre" => "BatchFile",	"Extensiones" => "bat|cmd|pif|wsf");
        	$PCODER_Modos[]=array("Nombre" => "C9Search",	"Extensiones" => "c9search_results");
        	$PCODER_Modos[]=array("Nombre" => "C_Cpp",	"Extensiones" => "cpp|c|cc|cxx|h|hh|hpp|bcp|tcc");
        	$PCODER_Modos[]=array("Nombre" => "Cirru",	"Extensiones" => "cirru|cr");
        	$PCODER_Modos[]=array("Nombre" => "Clojure",	"Extensiones" => "clj|cljs");
        	$PCODER_Modos[]=array("Nombre" => "Cobol",	"Extensiones" => "CBL|COB");
        	$PCODER_Modos[]=array("Nombre" => "coffee",	"Extensiones" => "coffee|cf|cson|Cakefile");
        	$PCODER_Modos[]=array("Nombre" => "ColdFusion",	"Extensiones" => "cfm");
        	$PCODER_Modos[]=array("Nombre" => "CSharp",	"Extensiones" => "cs|csx");
        	$PCODER_Modos[]=array("Nombre" => "CSS",	"Extensiones" => "css");
        	$PCODER_Modos[]=array("Nombre" => "Curly",	"Extensiones" => "curly");
        	$PCODER_Modos[]=array("Nombre" => "D",	"Extensiones" => "d|di");
        	$PCODER_Modos[]=array("Nombre" => "Dart",	"Extensiones" => "dart");
        	$PCODER_Modos[]=array("Nombre" => "Diff",	"Extensiones" => "diff|patch");
        	$PCODER_Modos[]=array("Nombre" => "Dockerfile",	"Extensiones" => "Dockerfile");
        	$PCODER_Modos[]=array("Nombre" => "Dot",	"Extensiones" => "dot");
        	$PCODER_Modos[]=array("Nombre" => "Dummy",	"Extensiones" => "dummy");
        	$PCODER_Modos[]=array("Nombre" => "DummySyntax",	"Extensiones" => "dummy");
        	$PCODER_Modos[]=array("Nombre" => "Eiffel",	"Extensiones" => "e");
        	$PCODER_Modos[]=array("Nombre" => "EJS",	"Extensiones" => "ejs");
        	$PCODER_Modos[]=array("Nombre" => "Elixir",	"Extensiones" => "ex|exs");
        	$PCODER_Modos[]=array("Nombre" => "Elm",	"Extensiones" => "elm");
        	$PCODER_Modos[]=array("Nombre" => "Erlang",	"Extensiones" => "erl|hrl");
        	$PCODER_Modos[]=array("Nombre" => "Forth",	"Extensiones" => "frt|fs|ldr|4th|forth");
        	$PCODER_Modos[]=array("Nombre" => "FTL",	"Extensiones" => "ftl");
        	$PCODER_Modos[]=array("Nombre" => "Gcode",	"Extensiones" => "gcode");
        	$PCODER_Modos[]=array("Nombre" => "Gherkin",	"Extensiones" => "feature");
        	$PCODER_Modos[]=array("Nombre" => "Gitignore",	"Extensiones" => "gitignore|gcloudignore");
        	$PCODER_Modos[]=array("Nombre" => "Glsl",	"Extensiones" => "glsl|frag|vert");
        	$PCODER_Modos[]=array("Nombre" => "golang",	"Extensiones" => "go");
        	$PCODER_Modos[]=array("Nombre" => "Groovy",	"Extensiones" => "groovy");
        	$PCODER_Modos[]=array("Nombre" => "HAML",	"Extensiones" => "haml");
        	$PCODER_Modos[]=array("Nombre" => "Handlebars",	"Extensiones" => "hbs|handlebars|tpl|mustache");
        	$PCODER_Modos[]=array("Nombre" => "Haskell",	"Extensiones" => "hs|has|lhs|lit");
        	$PCODER_Modos[]=array("Nombre" => "haXe",	"Extensiones" => "hx");
        	$PCODER_Modos[]=array("Nombre" => "HTML",	"Extensiones" => "html|htm|xhtml|asp|aspx");
        	$PCODER_Modos[]=array("Nombre" => "HTML_Ruby",	"Extensiones" => "erb|rhtml");
        	$PCODER_Modos[]=array("Nombre" => "INI",	"Extensiones" => "ini|cfg|prefs");
        	$PCODER_Modos[]=array("Nombre" => "Io",	"Extensiones" => "io");
        	$PCODER_Modos[]=array("Nombre" => "Jack",	"Extensiones" => "jack");
        	$PCODER_Modos[]=array("Nombre" => "Jade",	"Extensiones" => "jade");
        	$PCODER_Modos[]=array("Nombre" => "Java",	"Extensiones" => "java");
        	$PCODER_Modos[]=array("Nombre" => "JavaScript",	"Extensiones" => "js|jsm");
        	$PCODER_Modos[]=array("Nombre" => "JSON",	"Extensiones" => "json");
        	$PCODER_Modos[]=array("Nombre" => "JSONiq",	"Extensiones" => "jq");
        	$PCODER_Modos[]=array("Nombre" => "JSP",	"Extensiones" => "jsp");
        	$PCODER_Modos[]=array("Nombre" => "JSX",	"Extensiones" => "jsx");
        	$PCODER_Modos[]=array("Nombre" => "Julia",	"Extensiones" => "jl");
        	$PCODER_Modos[]=array("Nombre" => "LaTeX",	"Extensiones" => "tex|latex|ltx|bib|sty");
        	$PCODER_Modos[]=array("Nombre" => "LESS",	"Extensiones" => "less");
        	$PCODER_Modos[]=array("Nombre" => "Liquid",	"Extensiones" => "liquid");
        	$PCODER_Modos[]=array("Nombre" => "Lisp",	"Extensiones" => "lisp|lsp");
        	$PCODER_Modos[]=array("Nombre" => "LiveScript",	"Extensiones" => "ls");
        	$PCODER_Modos[]=array("Nombre" => "LogiQL",	"Extensiones" => "logic|lql");
        	$PCODER_Modos[]=array("Nombre" => "LSL",	"Extensiones" => "lsl");
        	$PCODER_Modos[]=array("Nombre" => "Lua",	"Extensiones" => "lua");
        	$PCODER_Modos[]=array("Nombre" => "LuaPage",	"Extensiones" => "lp");
        	$PCODER_Modos[]=array("Nombre" => "Lucene",	"Extensiones" => "lucene");
        	$PCODER_Modos[]=array("Nombre" => "Makefile",	"Extensiones" => "Makefile|GNUmakefile|makefile|OCamlMakefile|make|am");
        	$PCODER_Modos[]=array("Nombre" => "Markdown",	"Extensiones" => "md|markdown|markdn");
        	$PCODER_Modos[]=array("Nombre" => "Mask",	"Extensiones" => "mask");
        	$PCODER_Modos[]=array("Nombre" => "MATLAB",	"Extensiones" => "matlab");
        	$PCODER_Modos[]=array("Nombre" => "MEL",	"Extensiones" => "mel");
        	$PCODER_Modos[]=array("Nombre" => "MUSHCode",	"Extensiones" => "mc|mush");
        	$PCODER_Modos[]=array("Nombre" => "MySQL",	"Extensiones" => "mysql");
        	$PCODER_Modos[]=array("Nombre" => "Nix",	"Extensiones" => "nix");
        	$PCODER_Modos[]=array("Nombre" => "ObjectiveC",	"Extensiones" => "m|mm");
        	$PCODER_Modos[]=array("Nombre" => "OCaml",	"Extensiones" => "ml|mli");
        	$PCODER_Modos[]=array("Nombre" => "Pascal",	"Extensiones" => "pas|p|dfm");
        	$PCODER_Modos[]=array("Nombre" => "Perl",	"Extensiones" => "pl|pm");
        	$PCODER_Modos[]=array("Nombre" => "pgSQL",	"Extensiones" => "pgsql");
        	$PCODER_Modos[]=array("Nombre" => "PHP",	"Extensiones" => "php|phtml|inc|ctp|snt");
        	$PCODER_Modos[]=array("Nombre" => "Powershell",	"Extensiones" => "ps1");
        	$PCODER_Modos[]=array("Nombre" => "Praat",	"Extensiones" => "praat|praatscript|psc|proc");
        	$PCODER_Modos[]=array("Nombre" => "Prolog",	"Extensiones" => "plg|prolog");
        	$PCODER_Modos[]=array("Nombre" => "Properties",	"Extensiones" => "properties");
        	$PCODER_Modos[]=array("Nombre" => "Protobuf",	"Extensiones" => "proto");
        	$PCODER_Modos[]=array("Nombre" => "Python",	"Extensiones" => "py");
        	$PCODER_Modos[]=array("Nombre" => "R",	"Extensiones" => "r");
        	$PCODER_Modos[]=array("Nombre" => "RDoc",	"Extensiones" => "Rd");
        	$PCODER_Modos[]=array("Nombre" => "RHTML",	"Extensiones" => "Rhtml");
        	$PCODER_Modos[]=array("Nombre" => "Ruby",	"Extensiones" => "rb|ru|gemspec|rake|Guardfile|Rakefile|Gemfile");
        	$PCODER_Modos[]=array("Nombre" => "Rust",	"Extensiones" => "rs");
        	$PCODER_Modos[]=array("Nombre" => "SASS",	"Extensiones" => "sass");
        	$PCODER_Modos[]=array("Nombre" => "SCAD",	"Extensiones" => "scad");
        	$PCODER_Modos[]=array("Nombre" => "Scala",	"Extensiones" => "scala");
        	$PCODER_Modos[]=array("Nombre" => "Scheme",	"Extensiones" => "scm|rkt");
        	$PCODER_Modos[]=array("Nombre" => "SCSS",	"Extensiones" => "scss");
        	$PCODER_Modos[]=array("Nombre" => "SH",	"Extensiones" => "sh|bash|bashrc|bsh");
        	$PCODER_Modos[]=array("Nombre" => "SJS",	"Extensiones" => "sjs");
        	$PCODER_Modos[]=array("Nombre" => "Smarty",	"Extensiones" => "smarty|tpl");
        	$PCODER_Modos[]=array("Nombre" => "snippets",	"Extensiones" => "snippets");
        	$PCODER_Modos[]=array("Nombre" => "Soy_Template",	"Extensiones" => "soy");
        	$PCODER_Modos[]=array("Nombre" => "Space",	"Extensiones" => "space");
        	$PCODER_Modos[]=array("Nombre" => "SQL",	"Extensiones" => "sql|dblib|dblib_mssql|fbd|ibm|ifmx|mssql|odbc|oracle|sqlite|sqlsrv");
        	$PCODER_Modos[]=array("Nombre" => "Stylus",	"Extensiones" => "styl|stylus");
        	$PCODER_Modos[]=array("Nombre" => "SVG",	"Extensiones" => "svg");
        	$PCODER_Modos[]=array("Nombre" => "Tcl",	"Extensiones" => "tcl");
        	$PCODER_Modos[]=array("Nombre" => "Tex",	"Extensiones" => "tex");
        	$PCODER_Modos[]=array("Nombre" => "Text",	"Extensiones" => "txt|nfo|dat|inf|log|csv|tab|url|1st|fountain|me|now|readme|rft|cst|pl1|pli|plc|src|swift|tk");
        	$PCODER_Modos[]=array("Nombre" => "Textile",	"Extensiones" => "textile");
        	$PCODER_Modos[]=array("Nombre" => "Toml",	"Extensiones" => "toml");
        	$PCODER_Modos[]=array("Nombre" => "Twig",	"Extensiones" => "twig");
        	$PCODER_Modos[]=array("Nombre" => "Typescript",	"Extensiones" => "ts|typescript|str");
        	$PCODER_Modos[]=array("Nombre" => "Vala",	"Extensiones" => "vala");
        	$PCODER_Modos[]=array("Nombre" => "VBScript",	"Extensiones" => "bas|vbs|vb|b|sb");
        	$PCODER_Modos[]=array("Nombre" => "Velocity",	"Extensiones" => "vm");
        	$PCODER_Modos[]=array("Nombre" => "Verilog",	"Extensiones" => "v|vh|sv|svh");
        	$PCODER_Modos[]=array("Nombre" => "VHDL",	"Extensiones" => "vhd|vhdl");
        	$PCODER_Modos[]=array("Nombre" => "XML",	"Extensiones" => "xml|rdf|rss|wsdl|xsl|xslt|atom|mathml|mml|xul|xbl");
        	$PCODER_Modos[]=array("Nombre" => "XQuery",	"Extensiones" => "xq");
        	$PCODER_Modos[]=array("Nombre" => "YAML",	"Extensiones" => "yaml|yml");


    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/index.php
	//L72: Variables y entorno inicial
	/*	Define el Path inicial sobre el cual el usuario puede navegar
		por el sistema de archivos del servidor para editarlos. A mayor
		numero de carpetas a leer sera mas lenta la apertura del editor.
		Posibles valores:	/							-> Todo su disco!!!
							.							-> Directorio Actual de PCoder (generalmente sobre mod/pcoder)
							../							-> Raiz de PCoder (generalmente sobre mod/pcoder/mod)
							../../						-> Raiz de PCoder (Donde reside LICENSE, AUTHORS, Etc)
							../../../  					-> Raiz Instalacion PCoder cuando es independiente o Raiz de Practico si esta como modulo
							Otros						-> Agregue aqui tantos niveles superiores como desee segun su ruta de instalacion
							$_SERVER['DOCUMENT_ROOT']	-> Raiz de Todo el servidor web  */
	global $PCO_PCODER_RaizExploracionArchivos;
	$PCO_PCODER_RaizExploracionArchivos=$_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR;

    //L125: Variables y entorno inicial
    // Datos de fecha, hora y direccion IP para algunas operaciones asi como variables de compatibilidad para modulo de Practico
    $PCO_PCODER_FechaOperacion=date("Ymd");
    $PCO_PCODER_FechaOperacionGuiones=date("Y-m-d");
    $PCO_PCODER_HoraOperacion=date("His");
    $PCO_PCODER_HoraOperacionPuntos=date("H:i");
    $PCO_PCODER_DireccionAuditoria=$_SERVER ['REMOTE_ADDR'];
    $PCO_FechaOperacion=$PCO_PCODER_FechaOperacion;
    $PCO_FechaOperacionGuiones=$PCO_PCODER_FechaOperacionGuiones;
    $PCO_HoraOperacion=$PCO_PCODER_HoraOperacion;
    $PCO_HoraOperacionPuntos=$PCO_PCODER_HoraOperacionPuntos;
    $PCO_DireccionAuditoria=$PCO_PCODER_DireccionAuditoria;

	// Establece version actual del sistema
	$PCO_PCODER_VersionActual = file("inc/version_actual.txt");
	$PCO_PCODER_VersionActual = trim($PCO_PCODER_VersionActual[0]);
	
	// Si no hay una accion definida entonces inicia con la predeterminada
	if (@$PCO_Accion=="" || !isset($PCO_Accion))
		$PCO_Accion="PCOMOD_CargarPcoder";
    

    global $PCODER_archivo,$LlaveVentana_Archivo,$LlaveVentana_Ruta,$LlaveDePaso;
    
	//Genera algunas variables requeridas con informacion del archivo
	global $PCODER_PathVisual,$PCODER_FechaElemento,$PCODER_TamanoElemento,$PCODER_TipoElemento,$PCODER_NombreArchivo;
	//Genera token unico de edicion para el archivo.  La variable queda en el form disponible para cada envio
	global $PCODER_TokenEdicion;
    
    //Determina tipo de contenido (Archivo o BaseDatos)
    global $Origen_Archivo,$Tabla_Archivo,$Campo_Archivo,$Llave_Registro;
    if ($Origen_Archivo=="") $Origen_Archivo="A";
    //Si el origen del archivo es BaseDatos genera algunas variables por defecto para tratar el contenido de manera generica como un archivo
    if ($Origen_Archivo=="B")
        {
            $PCODER_archivo="{$Tabla_Archivo}[{$Llave_Registro}].{$Campo_Archivo}";
        	$PCODER_TipoElemento="BD";
        	$PCODER_FechaElemento="N/A";
        	$ContenidoRecuperadoBD=PCO_EjecutarSQL("SELECT {$Campo_Archivo} as Contenido, LENGTH({$Campo_Archivo}) as TamanoBytes FROM {$Tabla_Archivo} WHERE id='{$Llave_Registro}' ")->fetch();
        	$PCODER_TamanoElemento=$ContenidoRecuperadoBD["TamanoBytes"];
            $PCODERcontenido_original_archivo=$ContenidoRecuperadoBD["Contenido"];
            $PCODER_TokenEdicion=md5($PCODER_archivo.$PCODER_TamanoElemento.$PCODER_FechaElemento.$PCODERcontenido_original_archivo);
            $PCODER_NombreArchivo = "{$Tabla_Archivo}.{$Campo_Archivo}";
        }

    //Define las llaves y valores con que se diferencia el editor de texto (sobre el LocalStorage)
    $LlaveVentana_Archivo=base64_encode(substr($LlaveDePaso,-3)."{$PCODER_archivo}");
    $LlaveVentana_Ruta=$PCODER_archivo;

    //Carga el archivo recibido, si no recibe nada carga un demo
    if (@$PCODER_archivo=="")
        {
            global $MULTILANG_Error;
            PCO_Mensaje("{$MULTILANG_Error}","[ES]:No se ha recibido un archivo u origen de datos a ser editado<br>[EN]:A file or data source to be edited has not been received.","","fa fa-fw fa-4x fa-times","alert alert-dismissible alert-danger btn-xs");
            die();
            //$PCODER_archivo = "mod/pcoder/demos/demo.txt"; //Archivo de pruebas.   Comentado en produccion
            //$PCODER_archivo = "tmp/index.html";
        }

	//Verifica permisos de escritura en cada cargue de archivo para saber si presenta o no mensaje de advertencia
	global $PCODER_SoloLectura,$PCODER_EstadoSimple,$PCODER_TipoMenu,$PCODER_OcultarMenu,$PermisosRW,$CadenaPermisoEscritura,$MULTILANG_PCODER_ErrorRW,$MULTILANG_PCODER_Estado,$MULTILANG_Error;
	$PermisosRW=1;
	//Si el origen es desde un archivo valida los permisos desde el filesystem
    if ($Origen_Archivo=="A")
        {
        	$permisos_encontrados=@substr(sprintf('%o', fileperms($PCODER_archivo)), -4);
        	if (!is_writable($PCODER_archivo)) { $PermisosRW=0; }
            $CadenaPermisoEscritura='';
            if ($PermisosRW==0)
                PCO_Mensaje("{$MULTILANG_Error}","{$MULTILANG_PCODER_ErrorRW}","","fa fa-fw fa-2x fa-thumbs-down","alert alert-dismissible alert-warning btn-xs");
        }
	if ($PCODER_OcultarMenu=="") $PCODER_OcultarMenu="0";
	if ($PCODER_TipoMenu=="") $PCODER_TipoMenu="Texto";

    //Marco para recepcion de eventos generados por el boton de guardar
    echo '<iframe OnLoad="if (frame_almacenamiento.location.href != \'about:blank\') QuitarAvisoAlmacenamiento();" height="0" width="0" name="frame_almacenamiento" id="frame_almacenamiento" src="about:blank" style="visibility:hidden; display:none"></iframe>';

    //Busca datos especificos del archivo en el filesystem
    if ($Origen_Archivo=="A")
        {
        	$PCODER_TipoElemento=@filetype($PCODER_archivo);
        	$PCODER_FechaElemento=@date("d F Y H:i:s", @filemtime($PCODER_archivo));
        	$PCODER_TamanoElemento=@round(filesize($PCODER_archivo)/1024);
            $PCODERcontenido_original_archivo=@file_get_contents($PCODER_archivo);
            $PCODER_TokenEdicion=md5($PCODER_archivo.$PCODER_TamanoElemento.$PCODER_FechaElemento.$PCODERcontenido_original_archivo);
            $PCODER_PartesNombreArchivo=explode(DIRECTORY_SEPARATOR,$PCODER_archivo);
            $PCODER_NombreArchivo = $PCODER_PartesNombreArchivo[count($PCODER_PartesNombreArchivo)-1];
        }

    //Antes de seguir adelante con la apertura verifica si el archivo no tiene registro de bloqueo
    global $MULTILANG_PCODER_AdvertenciaMalCierre,$MULTILANG_PCODER_ErrorRO;
    global $MensajesBloqueo; //Variable que contiene cualquier mensaje de error o advertencia del archivo
    $MensajesBloqueo="";
    //Genera/revisa bloqueo evitando el archivo de base que es abierto por todos
    if ($PCODER_archivo!="inc/practico/PCoder")
        {
            $RegistroBloqueo=PCO_EjecutarSQL("SELECT * FROM core_pcoder_bloqueos WHERE archivo='$PCODER_archivo' ")->fetch();
            if ($RegistroBloqueo["id"]=="")
                {
                    PCO_EjecutarSQLUnaria("INSERT INTO core_pcoder_bloqueos (archivo,ultima_edicion,usuario,abierto,direccion_origen,agente) VALUES ('$PCODER_archivo','$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00','$PCOSESS_LoginUsuario','1','$PCO_PCODER_DireccionAuditoria','".$_SERVER['HTTP_USER_AGENT']."');");
                }
            else
                {
                    //Verifica si el bloqueo es de otro usuario o del mismo
                    if ($RegistroBloqueo["usuario"]!=$PCOSESS_LoginUsuario)
                        {
                            $MensajesBloqueo= "<i class='fa fa-warning fa-2x'></i> [ERR]: ".$MULTILANG_PCODER_ErrorRO."<br><br><font color=blue><b>Se abre como sólo lectura</b></font><br><br><li>Usuario/User: <b>".$RegistroBloqueo["usuario"]."</b></li><li>Fecha de apertura/Opened date: <b>".$RegistroBloqueo["ultima_edicion"]."</b></li><li>Origen/Origin: <b>".$RegistroBloqueo["direccion_origen"]."</b> <i>(".$RegistroBloqueo["agente"].")</i></li>";
                            //Envia a si mismo un mensaje de advertencia a posible estacion abierta
                            PCO_EjecutarSQLUnaria("INSERT INTO core_chat (remitente,destinatario,message,sent,recd) VALUES ('$PCOSESS_LoginUsuario','".$RegistroBloqueo["usuario"]."','He intentado abrir el archivo $PCODER_archivo pero se encuentra bloqueado por ti (mensaje automatico)','$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00','0');");
            
                            //Cambia algunos estados del editor par que sea de solo lectura
                            $PCODER_OcultarMenu=1;
                            $PCODER_TipoMenu="Iconos";
                            $PCODER_SoloLectura=1;
                        }
                    else
                        {
                            $MensajesBloqueo= "<i class='fa fa-info-circle fa-2x'></i> [ADV]: ".$MULTILANG_PCODER_AdvertenciaMalCierre."<br><br><li>Fecha de apertura/Opened date: <b>".$RegistroBloqueo["ultima_edicion"]."</b></li><li>Origen/Origin: <b>".$RegistroBloqueo["direccion_origen"]."</b> <i>(".$RegistroBloqueo["agente"].")</i></li><hr>".$MULTILANG_PCODER_AdvConcurrencia;
                            //Despues de generar advertencia actualiza ultima fecha apertura, direccion y agente como la actual
                            PCO_EjecutarSQLUnaria("UPDATE core_pcoder_bloqueos SET ultima_edicion='$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00',direccion_origen='$PCO_PCODER_DireccionAuditoria',agente='".$_SERVER['HTTP_USER_AGENT']."' WHERE archivo='$PCODER_archivo' ");
                            //Envia a si mismo un mensaje de advertencia a posible estacion abierta
                            //PCO_EjecutarSQLUnaria("INSERT INTO core_chat (remitente,destinatario,message,sent,recd) VALUES ('$PCOSESS_LoginUsuario','".$RegistroBloqueo["usuario"]."','He abierto el archivo $PCODER_archivo con advertencia de apertura desde $PCO_PCODER_DireccionAuditoria (mensaje automatico)','$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00','0');");
                        }
                }
        }


    ################################################################################
    ################################################################################
    /*
    	Function: PCOMOD_ObtenerModoEditor
    	Detecta el tipo de archivo y especifica el modo que se debe utilizar en el editor
    */
        //Obtiene la extension del archivo (cuando es archivo y no se ha recibido directamente)
        global $PCODER_extension;
        if ($Origen_Archivo=="A" && $PCODER_extension=="")
            {
                $PCODER_partes_extension = explode(".",$PCODER_archivo);
                $PCODER_extension = $PCODER_partes_extension[count($PCODER_partes_extension)-1];
            }

        //Identifica el tipo de documento a ser aplicado segun la extension del archivo
        global $PCODER_ModoEditor;
        for ($i=0;$i<count($PCODER_Modos) && $PCODER_ModoEditor=='';$i++)
            {
				//Lleva las extensiones a un array para buscar en el
				$ArregloExtensiones=explode("|",$PCODER_Modos[$i]["Extensiones"]);
                if(in_array($PCODER_extension,$ArregloExtensiones))
					{
						$PCODER_ModoEditor=$PCODER_Modos[$i]["Nombre"];
					}
            }
		//Valida que no se trate de un archivo sin extension despues de revisar todo
		if($PCODER_ModoEditor=="")
			{
				//Asigna por defecto el modo de texto plano
				if(count($PCODER_partes_extension)==1)
					$PCODER_ModoEditor="Text";
			}


    //Prepara el nombre de archivo visual sobre el editor en la esquina superior izquierda
    global $MULTILANG_PCODER_Archivo,$MULTILANG_PCODER_Permisos;
    $PCODER_PathVisual="<div ><i class='fa fa-file'></i> <i data-html='true' data-toggle='tooltip' data-placement='bottom' title='<b>{$MULTILANG_PCODER_Archivo}</b>: {$PCODER_archivo}<br><b>{$MULTILANG_PCODER_Permisos}</b>: {$permisos_encontrados}<br><font color=yellow><b>Tipo</b>: {$PCODER_ModoEditor}</font>'>".$PCODER_NombreArchivo."</i></div>";


    //L329: Marcos para el editor
    global $CadenaEditoresACE,$PCODER_Titulo;
    //Agrega marco con el titulo del editor
    if ($PCODER_Titulo!="")
        $CadenaEditoresACE.='<div class="row" style="margin:0px; color:orange; font-size:12px; font-weight:bold; padding:2px;" id="TituloElemento" align=center><i class="fa fa-pencil fa-fw"></i> '.$PCODER_Titulo.'</div>';

    $CadenaEditoresACE.='
		<div class="row" style="margin:0px;">
		    <div id="EditorD">
    			<div id="panel_editor_real" style="float:left">
    				<div id="editor_codigo" name="editor_codigo" style="display:block;  width:100%; height:100vh;" width="100%" height="100vh"></div>
    			</div>
    			<div id="panel_editor_clonado" style="float:right">
    				<div id="editor_clonado" name="editor_clonado" style="display:block;  width:100%; height:100vh; border-style: solid; border-width:1px; border-color:#373737;" width="100%" height="100vh"></div>
    			</div>
    		</div>
		</div>';

    //Genera barra de estado del editor y archivo
    global $CadenaBarraEstado,$MULTILANG_PCODER_DividirNO,$MULTILANG_PCODER_DividirHorizontal,$MULTILANG_PCODER_DividirVertical,$MULTILANG_PCODER_Ir,$MULTILANG_PCODER_SaltarLinea;

    //Define la barra de estado a presentar con el archivo o la cambia mas adelante si se desea simplificada
    $CadenaMarcosEstados='
		<!-- LINEAS DEL DOCUMENTO -->
		<div id="NroLineasDocumento" class="btn-xs" style="display:inline;">
		</div>

		<!-- COLUMNA ACTUAL DEL DOCUMENTO -->
		<div id="NroColumnaDocumento" class="btn-xs" style="display:inline;">
		</div>

		<!-- CARACTERES DEL DOCUMENTO -->
		<div id="NroCaracteresDocumento" class="btn-xs" style="display:inline;">
		</div>

		<!-- TIPO DOCUMENTO -->
		<div id="TipoDocumento" class="btn-xs" style="display:inline;">
		</div>

		<!-- TAMANO DEL DOCUMENTO -->
		<div id="TamanoDocumento" class="btn-xs" style="display:inline;">
		</div>

		<!-- FECHA MODIFICACION -->
		<div id="FechaModificadoDocumento" class="btn-xs" style="display:inline;">
		</div>';
    
    //Cambia la barra de estado por una mas simple cuando asi es requerido pero sin eliminar los marcos
    $CadenaBarraEstado='
        <div class="row" id="MarcoContenedorInferior">
        	<div class="col-md-12">
        
        		<div id="panel_inferior">
        			
        			<div class="well well-sm" style="border:0px; margin:0px; padding:0px; padding-bottom:1px; background: #272727;">
        
        						<!-- FORMULARIO DISPOSICION DE PANTALLA -->
        						<div style="display:inline;">
        							<div data-toggle="tooltip" data-placement="top" title="'.$MULTILANG_PCODER_DividirNO.'" class="btn btn-success btn-xs" onClick="var LMQTP=PCODER_DividirPantalla_NO();"><i class="fa fa-stop fa-fw"></i></div>
        							<div data-toggle="tooltip" data-placement="top" title="'.$MULTILANG_PCODER_DividirHorizontal.'" class="btn btn-danger btn-xs" onClick="var LMQTP=PCODER_DividirPantalla_Horizontal();"><i class="fa fa-pause fa-rotate-90 fa-fw"></i></div>
        							<div data-toggle="tooltip" data-placement="top" title="'.$MULTILANG_PCODER_DividirVertical.'" class="btn btn-danger btn-xs" onClick="var LMQTP=PCODER_DividirPantalla_Vertical();"><i class="fa fa-pause fa-fw"></i></div>
        						</div>
        
        						<!-- FORMULARIO IR A -->
        						<!--
        						<div style="display:inline;">
        							<input type="text" id="linea_salto" size=10 name="linea_salto" class="input-mini btn-xs btn-default" placeholder="'.$MULTILANG_PCODER_SaltarLinea.'">
        							<div class="btn btn-primary btn-xs" onClick="var LMQTP=SaltarALinea();">'.$MULTILANG_PCODER_Ir.' <i class="fa fa-arrow-circle-right"></i></div>
        						</div>
        						-->
        
        						<font color="gray">
        							
                            		<!-- LINEAS DEL DOCUMENTO -->
                            		<div id="NroLineasDocumento" class="btn-xs" style="display:inline;">
                            		</div>
                            
                            		<!-- COLUMNA ACTUAL DEL DOCUMENTO -->
                            		<div id="NroColumnaDocumento" class="btn-xs" style="display:inline;">
                            		</div>
                            
                            		<!-- CARACTERES DEL DOCUMENTO -->
                            		<div id="NroCaracteresDocumento" class="btn-xs" style="display:inline;">
                            		</div>
                            
                            		<!-- TIPO DOCUMENTO -->
                            		<div id="TipoDocumento" class="btn-xs" style="display:inline;">
                            		</div>
                            
                            		<!-- TAMANO DEL DOCUMENTO -->
                            		<div id="TamanoDocumento" class="btn-xs" style="display:inline;">
                            		</div>
                            
                            		<!-- FECHA MODIFICACION -->
                            		<div id="FechaModificadoDocumento" class="btn-xs" style="display:inline;">
                            		</div>        
        						</font>
        
        			</div>
        
        		</div><!-- /.contenedor -->
        
        	</div>
        </div>';


    //L415: Carga librerias
    echo '
        <!-- Carga editor ACE y sus extensiones -->
    	<script src="inc/ace/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
    	<script src="inc/ace/src-min-noconflict/ext-language_tools.js" type="text/javascript" charset="utf-8"></script>

	<!-- Funciones especificas de PCoder -->'; ?>
	<script language="JavaScript">
	    var MensajeFuncionalidadNoDisponible="<center><b>OPCION INACTIVA!!! - FEATURE DISABLED!!!</b></center><HR>Su instalacion de {P}Coder no se encuentra integrada a <a href='https://www.practico.org'>Practico Framework</a><br>Muchas de las caracteristicas solo son habilitadas cuando PCoder se integra de manera nativa con Practico Framework<br><br>Your {P}Coder setup its not embeded into <a href='https://www.practico.org'>Practico Framework</a><br>Many features are available when your PCoder is embeded into a Practico Framework setup";
		//Convierte variables de idioma desde PHP a JS
		var MULTILANG_PCODER_Linea="<?php echo $MULTILANG_PCODER_Linea; ?>";
		var MULTILANG_PCODER_Columna="<?php echo $MULTILANG_PCODER_Columna; ?>";
		var MULTILANG_PCODER_Caracteres="<?php echo $MULTILANG_PCODER_Caracteres; ?>";
		var MULTILANG_PCODER_Tipo="<?php echo $MULTILANG_PCODER_Tipo; ?>";
		var MULTILANG_PCODER_Tamano="<?php echo $MULTILANG_PCODER_Tamano; ?>";
		var MULTILANG_PCODER_Modificado="<?php echo $MULTILANG_PCODER_Modificado; ?>";
		var MULTILANG_PCODER_ErrorRW="<?php echo $MULTILANG_PCODER_ErrorRW; ?>";
		var MULTILANG_PCODER_Estado="<?php echo $MULTILANG_PCODER_Estado; ?>";
		var MULTILANG_PCODER_ErrGuardarDefecto="<?php echo $MULTILANG_PCODER_ErrGuardarDefecto; ?>";
		var MULTILANG_PCODER_ErrGuardarNoPermiso="<?php echo $MULTILANG_PCODER_ErrGuardarNoPermiso; ?>";
		var MULTILANG_PCODER_Guardando="<?php echo $MULTILANG_PCODER_Guardando; ?>";
		var MULTILANG_PCODER_Error="<?php echo $MULTILANG_PCODER_Error; ?>";
		var MULTILANG_PCODER_Finalizado="<?php echo $MULTILANG_PCODER_Finalizado; ?>";
		var MULTILANG_PCODER_ElementoCreado="<?php echo $MULTILANG_PCODER_ElementoCreado; ?>";
		var MULTILANG_PCODER_ElementoExiste="<?php echo $MULTILANG_PCODER_ElementoExiste; ?>";
		var MULTILANG_PCODER_ElementoNoCreado="<?php echo $MULTILANG_PCODER_ElementoNoCreado; ?>";
		var MULTILANG_PCODER_Propietario="<?php echo $MULTILANG_PCODER_Propietario; ?>";
		var MULTILANG_PCODER_Permisos="<?php echo $MULTILANG_PCODER_Permisos; ?>";
		var MULTILANG_PCODER_Eliminado="<?php echo $MULTILANG_PCODER_Eliminado; ?>";
		var MULTILANG_PCODER_ExtensionNoSoportada="<?php echo $MULTILANG_PCODER_ExtensionNoSoportada; ?>";
		var MULTILANG_PCODER_HistorialVersiones="<?php echo $MULTILANG_PCODER_HistorialVersiones; ?>";
		var PCO_PCODER_StandAlone="<?php echo $PCO_PCODER_StandAlone; ?>";
		var PCOSESS_LoginUsuario="<?php echo $PCOSESS_LoginUsuario; ?>";
		var MULTILANG_PCODER_AdvertenciaCierre="<?php echo $MULTILANG_PCODER_AdvertenciaCierre; ?>";
	</script>


<?php


    
    
    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/lib_pcoder.php
    
/* ################################################################## */
/* ################################################################## */
/*
	Function: PCODER_EliminarElemento
	Elimina un elemento en el sistema de ficheros
	Retorna:
		1	Operacion exitosa
		-1	Error
*/
if ($PCO_Accion=="PCODER_EliminarElemento") 
	{
		$ResultadoOperacion="0";
		//Realiza operacion segun el tipo de elemento
		if($PCODER_TipoElementoFS=="archivo")
			$Eliminacion=unlink($PCODER_ElementoFS);
		if($PCODER_TipoElementoFS=="carpeta")
			$Eliminacion=rmdir($PCODER_ElementoFS);
		//Determina valor a devolver
		if ($Eliminacion)
			$ResultadoOperacion="1";
		else
			$ResultadoOperacion="-1";
		@ob_clean();
        echo $ResultadoOperacion;
        die();
	}


/* ################################################################## */
/* ################################################################## */
/*
	Function: PCODER_EditarPermisos
	Cambia los permisos o propietario de un elemento en el sistema de ficheros
	Retorna:
		1	Operacion exitosa
		-1	Error cambiando permisos y propietario
		-2	Error cambiando permisos
		-3	Error cambiando propietario
*/
if ($PCO_Accion=="PCODER_EditarPermisos") 
	{
		$ResultadoOperacion="0";

		//Cambia permisos
		$CambioPermisos=chmod($PCODER_ElementoFS, $PCODER_PermisosFS );
		
		//Cambia propietario
		$CambioPropietario=chown($PCODER_ElementoFS, $PCODER_PropietarioFS );
		
		if ($CambioPermisos && $CambioPropietario)
			{
				$ResultadoOperacion="1";
			}
		else
			{
				if (!$CambioPermisos && !$CambioPropietario)
					{
						$ResultadoOperacion="-1";
					}
				else
					{
						if (!$CambioPermisos)
							$ResultadoOperacion="-2";
						if (!$CambioPropietario)
							$ResultadoOperacion="-3";
					}
			}
		@ob_clean();
        echo $ResultadoOperacion;
        die();
	}


/* ################################################################## */
/* ################################################################## */
/*
	Function: PCODER_CrearCarpeta
	Crea una nueva carpeta sobre el sistema de ficheros
	Retorna:
		1	Operacion exitosa
		-1	La carpeta ya existe
		-2	La carpeta no se pudo crear
*/
if ($PCO_Accion=="PCODER_CrearCarpeta") 
	{
		$ResultadoOperacion="0";
		//Crea el archivo solo si no existe
		$ExisteElemento=file_exists($PCODER_ElementoFS);
		if(!$ExisteElemento)
			{
				$CreacionElemento=mkdir($PCODER_ElementoFS);
				if ($CreacionElemento)
					$ResultadoOperacion="1";
				else
					$ResultadoOperacion="-2";
			}
		else
			$ResultadoOperacion="-1";
		@ob_clean();
        echo $ResultadoOperacion;
        die();
	}








/* ################################################################## */
/* ################################################################## */
/*
	Function: PCOMOD_ObtenerPermisosArchivo
	Determina cuales son los permisos de un archivo
*/
if ($PCO_Accion=="PCOMOD_ObtenerPermisosArchivo") 
	{
		$permisos_encontrados=@substr(sprintf('%o', fileperms($PCODER_archivo)), -4);
        @ob_clean();
        echo $permisos_encontrados;
        die();
	}


/* ################################################################## */
/* ################################################################## */
/*
	Function: PCOMOD_ObtenerPropietarioArchivo
	Determina el propietario de un archivo
*/
if ($PCO_Accion=="PCOMOD_ObtenerPropietarioArchivo") 
	{
        //Arreglo de no disponibilidad POSIX
        $Arreglo_Sin_POSIX_Usuario=array(
            name  => "SinSoportePOSIX",
            passwd  => "SinSoportePOSIX",
            uid  => "SinSoportePOSIX",
            gid  => "SinSoportePOSIX",
            gecos  => "SinSoportePOSIX",
            dir  => "SinSoportePOSIX",
            shell  => "SinSoportePOSIX");

        if (function_exists('posix_getpwuid'))
            {
        		$propietario_encontrado=@posix_getpwuid(fileowner($PCODER_archivo));
        		$propietario_encontrado=$propietario_encontrado['name'];
            }
        else
            {
                $propietario_encontrado=$Arreglo_Sin_POSIX_Usuario;
        		$propietario_encontrado=$propietario_encontrado['name'];
            }

        @ob_clean();
        echo $propietario_encontrado;
        die();
	}


/* ################################################################## */
/* ################################################################## */
/*
	Function: PCOMOD_VerificarPermisosRW
	Verifica si el archivo cuenta o no con permisos de escritura por parte del usuario que corre el proceso web (generalmente Apache)
*/
if ($PCO_Accion=="PCOMOD_VerificarPermisosRW") 
	{
		$permisos_ok=1;
		$permisos_encontrados=@substr(sprintf('%o', fileperms($PCODER_archivo)), -4);
		if (!is_writable($PCODER_archivo)) { $permisos_ok=0; }
        @ob_clean();
        echo $permisos_ok;
        die();
	}


/* ################################################################## */
/* ################################################################## */
/*
	Function: PCOMOD_ObtenerTamanoDocumento
	Obtiene el tamano de elemento o archivo indicado
*/
if ($PCO_Accion=="PCOMOD_ObtenerTamanoDocumento") 
	{
        $PCODER_TamanoElemento=@round(filesize($PCODER_archivo)/1024);
		@ob_clean();
        echo $PCODER_TamanoElemento;
        die();
	}














































    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/variables.php
            //Define los temas de color claro disponibles para el editor
            $PCODER_TemasBrillantes[]=array(Nombre => "Chrome",	Valor => "chrome");
            $PCODER_TemasBrillantes[]=array(Nombre => "Clouds",	Valor => "clouds");
            $PCODER_TemasBrillantes[]=array(Nombre => "Crimson Editor",	Valor => "crimson_editor");
            $PCODER_TemasBrillantes[]=array(Nombre => "Dawn",	Valor => "dawn");
            $PCODER_TemasBrillantes[]=array(Nombre => "Dreamweaver",	Valor => "dreamweaver");
            $PCODER_TemasBrillantes[]=array(Nombre => "Eclipse",	Valor => "eclipse");
            $PCODER_TemasBrillantes[]=array(Nombre => "GitHub",	Valor => "github");
            $PCODER_TemasBrillantes[]=array(Nombre => "Solarized Light",	Valor => "solarized_light");
            $PCODER_TemasBrillantes[]=array(Nombre => "TextMate",	Valor => "textmate");
            $PCODER_TemasBrillantes[]=array(Nombre => "Tomorrow",	Valor => "tomorrow");
            $PCODER_TemasBrillantes[]=array(Nombre => "XCode",	Valor => "xcode");
            $PCODER_TemasBrillantes[]=array(Nombre => "Kuroir",	Valor => "kuroir");
            $PCODER_TemasBrillantes[]=array(Nombre => "KatzenMilch",	Valor => "katzenmilch");
        
        
            //Define los temas de color oscuro disponibles para el editor
            $PCODER_TemasOscuros[]=array(Nombre => "Ambiance",	Valor => "ambiance");
            $PCODER_TemasOscuros[]=array(Nombre => "Chaos",	Valor => "chaos");
            $PCODER_TemasOscuros[]=array(Nombre => "Clouds Midnight",	Valor => "clouds_midnight");
            $PCODER_TemasOscuros[]=array(Nombre => "Cobalt",	Valor => "cobalt");
            $PCODER_TemasOscuros[]=array(Nombre => "idle Fingers",	Valor => "idle_fingers");
            $PCODER_TemasOscuros[]=array(Nombre => "krTheme",	Valor => "kr_theme");
            $PCODER_TemasOscuros[]=array(Nombre => "Merbivore",	Valor => "merbivore");
            $PCODER_TemasOscuros[]=array(Nombre => "Merbivore Soft",	Valor => "merbivore_soft");
            $PCODER_TemasOscuros[]=array(Nombre => "Mono Industrial",	Valor => "mono_industrial");
            $PCODER_TemasOscuros[]=array(Nombre => "Monokai",	Valor => "monokai");
            $PCODER_TemasOscuros[]=array(Nombre => "Pastel on dark",	Valor => "pastel_on_dark");
            $PCODER_TemasOscuros[]=array(Nombre => "Solarized Dark",	Valor => "solarized_dark");
            $PCODER_TemasOscuros[]=array(Nombre => "Terminal",	Valor => "terminal");
            $PCODER_TemasOscuros[]=array(Nombre => "Tomorrow Night",	Valor => "tomorrow_night");
            $PCODER_TemasOscuros[]=array(Nombre => "Tomorrow Night Blue",	Valor => "tomorrow_night_blue");
            $PCODER_TemasOscuros[]=array(Nombre => "Tomorrow Night Bright",	Valor => "tomorrow_night_bright");
            $PCODER_TemasOscuros[]=array(Nombre => "Tomorrow Night 80s",	Valor => "tomorrow_night_eighties");
            $PCODER_TemasOscuros[]=array(Nombre => "Twilight",	Valor => "twilight");
            $PCODER_TemasOscuros[]=array(Nombre => "Vibrant Ink",	Valor => "vibrant_ink");


    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_teclado.php
	//Genera dialogo modal para Atajos de Teclado
            global $MULTILANG_PCODER_Ayuda,$MULTILANG_PCODER_AtajosTitPcoder;
            PCO_AbrirDialogoModal("AtajosTeclado",$MULTILANG_PCODER_Ayuda.': <b>'.$MULTILANG_PCODER_AtajosTitPcoder.'</b>',""); ?>
                <DIV style="DISPLAY: block; OVERFLOW: auto; WIDTH: 100%; POSITION: relative; HEIGHT: 400px">
                    <?php PCODER_PresentarKeyBindings(); ?>
                </DIV>
            <?php 
                $barra_herramientas_modal='
                <button type="button" class="btn btn-default" data-dismiss="modal">'.$MULTILANG_PCODER_Cerrar.' {<i class="fa fa-keyboard-o"></i> Esc}</button>';
                PCO_CerrarDialogoModal($barra_herramientas_modal);


    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_acerca.php
	//Genera dialogo modal para Acerca de PCoder
            global $MULTILANG_PCODER_Acerca,$MULTILANG_PCODER_Cerrar;
            PCO_AbrirDialogoModal("myModalACERCADEPCODER",$MULTILANG_PCODER_Acerca); ?>
        		<div align="center">
        			<br><h2><b>{P}Coder </b><i>ver Embebido</i></h2>
        			Practico CODe EditoR<br><br>
        			 Powered by <a href="http://www.practico.org/"><i>Practico Framework PHP (www.practico.org)</i></a><hr>
        
        			   <b>Editor de Código en la Nube basado en PHP<br></b>
        			   Copyright (C) 2015  John F. Arroyave Gutiérrez<br><br>
        		</div>
            <?php 
                $barra_herramientas_modal='
                <button type="button" class="btn btn-default" data-dismiss="modal">'.$MULTILANG_PCODER_Cerrar.' {<i class="fa fa-keyboard-o"></i> Esc}</button>';
                PCO_CerrarDialogoModal($barra_herramientas_modal);

    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_preferencias.php
	//Genera dialogo modal para marco de preferencias
	        global $MULTILANG_PCODER_Preferencias,$MULTILANG_PCODER_TamanoFuente,$MULTILANG_PCODER_AparienciaEditor;
	        global $MULTILANG_PCODER_LenguajeProg,$MULTILANG_PCODER_VerCaracteres,$MULTILANG_PCODER_No,$MULTILANG_PCODER_Si;
	        global $MULTILANG_PCODER_RevisarSintaxis;

	        PCO_AbrirDialogoModal("myModalPREFERENCIAS",$MULTILANG_PCODER_Preferencias); ?>
			<div class="row">
				<div class="col-lg-6">
						<label for="tamano_fuente"><?php echo $MULTILANG_PCODER_TamanoFuente; ?></label>
						<select id="tamano_fuente" size="1" class="form-control btn-warning" onchange="CambiarFuenteEditor(this.value)">
						  <option value="10px">10px</option>
						  <option value="11px">11px</option>
						  <option value="12px">12px</option>
						  <option value="13px">13px</option>
						  <option value="14px" selected="selected">14px</option>
						  <option value="16px">16px</option>
						  <option value="18px">18px</option>
						  <option value="20px">20px</option>
						  <option value="24px">24px</option>
						</select>
				</div>
				<div class="col-lg-6">
						<label for="tema_grafico"><?php echo $MULTILANG_PCODER_AparienciaEditor; ?></label>
						<select id="tema_grafico" size="1" class="form-control btn-primary" onchange="CambiarTemaEditor(this.value)">
						  <optgroup label="Brillantes / Bright">
							  <?php
								//Presenta los temas claros disponibles
								for ($i=0;$i<count($PCODER_TemasBrillantes);$i++)
									echo '<option value="ace/theme/'.$PCODER_TemasBrillantes[$i]["Valor"].'">'.$PCODER_TemasBrillantes[$i]["Nombre"].'</option>';
							  ?>
						  </optgroup>
						  <optgroup label="Oscuros / Dark">
							  <?php
								//Presenta los temas claros disponibles
								for ($i=0;$i<count($PCODER_TemasOscuros);$i++)
									{
										$EstadoSeleccionTema="";
										if ($PCODER_TemasOscuros[$i]["Valor"]=="ambiance")
											$EstadoSeleccionTema=" SELECTED ";
										echo '<option value="ace/theme/'.$PCODER_TemasOscuros[$i]["Valor"].'" '.$EstadoSeleccionTema.'>'.$PCODER_TemasOscuros[$i]["Nombre"].'</option>';
									}
							  ?>
						  </optgroup>
						</select>
				</div>
			</div>
			<hr>
			<div class="row">
				<div class="col-lg-6">
						<label for="modo_archivo_preferencias"><?php echo $MULTILANG_PCODER_LenguajeProg; ?></label>
						<select id="modo_archivo_preferencias" size="1" class="form-control btn-info" onchange="CambiarModoEditor(this.value)">
							  <?php
								//Presenta los lenguajes disponibles
								for ($i=0;$i<count($PCODER_Modos);$i++)
									echo '<option value="ace/mode/'.$PCODER_Modos[$i]["Nombre"].'">'.$PCODER_Modos[$i]["Nombre"].'</option>';
							  ?>
						</select>
				</div>
				<div class="col-lg-6">
						<label for="modo_invisibles"><?php echo $MULTILANG_PCODER_VerCaracteres; ?></label>
						<select id="modo_invisibles" size="1" class="form-control btn-default" onchange="CaracteresInvisiblesEditor(this.value)">
							<option value="0"><?php echo $MULTILANG_PCODER_No; ?></option>
							<option value="1"><?php echo $MULTILANG_PCODER_Si; ?></option>
						</select>
				</div>
			</div>
			<hr>
			<div class="row">
				<div class="col-lg-6">
						<label for="verificacion_sintaxis"><?php echo $MULTILANG_PCODER_RevisarSintaxis; ?></label>
						<select id="verificacion_sintaxis" size="1" class="form-control btn-success" onchange="VerificarSintaxisEditor(this.value)">
							<option value="0"><?php echo $MULTILANG_PCODER_No; ?></option>
							<option value="1"><?php echo $MULTILANG_PCODER_Si; ?></option>
						</select>
				</div>
				<div class="col-lg-6">
					<!--
						<label for="verificacion_autocompletado"><?php echo $MULTILANG_PCODER_RevisarSintaxis; ?></label>
						<select id="verificacion_autocompletado" size="1" class="form-control btn-success" onchange="VerificarAutocompletadoEditor(this.value)">
							<option value="0"><?php echo $MULTILANG_PCODER_No; ?></option>
							<option value="1"><?php echo $MULTILANG_PCODER_Si; ?></option>
						</select>
					-->
				</div>
			</div>
    <?php 
            $barra_herramientas_modal='
            <button type="button" class="btn btn-default" data-dismiss="modal">'.$MULTILANG_PCODER_Cerrar.' {<i class="fa fa-keyboard-o"></i> Esc}</button>';
            PCO_CerrarDialogoModal($barra_herramientas_modal);


    ############################################################################
    ############################################################################
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_operarfs.php
	//Genera dialogo modal para crear archivos o carpetas
	global $MULTILANG_PCODER_OperacionesFS,$MULTILANG_PCODER_Ubicacion,$MULTILANG_PCODER_Explorar,$MULTILANG_PCODER_Operacion;
	global $MULTILANG_PCODER_CrearArchivo,$MULTILANG_PCODER_CrearCarpeta,$MULTILANG_PCODER_EditarPermisos,$MULTILANG_PCODER_SubirArchivo,$MULTILANG_PCODER_EliminarElemento;
	global $MULTILANG_PCODER_Nombre,$MULTILANG_PCODER_Permisos,$MULTILANG_PCODER_Propietario,$MULTILANG_PCODER_Aceptar,$MULTILANG_Cancelar,$MULTILANG_Cerrar;
	global $MULTILANG_PCODER_Comunes,$MULTILANG_PCODER_Predeterminado,$MULTILANG_PCODER_PathDisco,$MULTILANG_PCODER_PathFull;
	PCO_AbrirDialogoModal("myModalOPERARFS",$MULTILANG_PCODER_OperacionesFS); ?>
			<div class="row">
				<div class="col-xs-12 col-sm-12 col-md-6 col-lg-12">
					<iframe width="100%" height=400 src="index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-34:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&PFE_OcultarMigasPan=0&PFE_VistaBasicaArchivos=1&PFE_VisibleBotonDT=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDescargar=0&PFE_ActivarDataTable=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDT=0&PFE_OcultarArchivos=1" frameborder="0" marginheight="0" marginwidth="0">Cargando...</iframe>
				</div>
			</div>
    <?php 
        $barra_herramientas_modal='
        <button type="button" class="btn btn-default" data-dismiss="modal"><i class="fa fa-times fa-fw"></i> '.$MULTILANG_Cerrar.' {<i class="fa fa-keyboard-o"></i> Esc}</button>';
        PCO_CerrarDialogoModal($barra_herramientas_modal);


    ############################################################################
    ############################################################################
	//Genera dialogo modal para abrir archivos
	global $MULTILANG_PCODER_OperacionesFS,$MULTILANG_PCODER_Ubicacion,$MULTILANG_PCODER_Explorar,$MULTILANG_PCODER_Operacion;
	global $MULTILANG_PCODER_CrearArchivo,$MULTILANG_PCODER_CrearCarpeta,$MULTILANG_PCODER_EditarPermisos,$MULTILANG_PCODER_SubirArchivo,$MULTILANG_PCODER_EliminarElemento;
	global $MULTILANG_PCODER_Nombre,$MULTILANG_PCODER_Permisos,$MULTILANG_PCODER_Propietario,$MULTILANG_PCODER_Aceptar,$MULTILANG_Cancelar,$MULTILANG_Cerrar;
	global $MULTILANG_PCODER_Comunes,$MULTILANG_PCODER_Predeterminado,$MULTILANG_PCODER_PathDisco,$MULTILANG_PCODER_PathFull;
	PCO_AbrirDialogoModal("myModalABRIRFS","Abrir/Editar un archivo"); ?>
			<div class="row">
				<div class="col-xs-12 col-sm-12 col-md-6 col-lg-12">
					<iframe width="100%" height=400 src="index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-34:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&PFE_OcultarMigasPan=0&PFE_VistaBasicaArchivos=1&PFE_VisibleBotonDT=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDescargar=0&PFE_ActivarDataTable=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDT=0&PFE_OcultarBarraHerramientas=0&PFE_VisibleBotonEliminar=0&PFE_VisibleBotonRenombrar=0&PFE_VisibleBotonPermisos=0&PFE_VisibleBotonNuevoArchivo=0&PFE_VisibleBotonNuevoDirectorio=0&PFE_ActivarCargarEnPcoder=1" frameborder="0" marginheight="0" marginwidth="0">Cargando...</iframe>
				</div>
			</div>
    <?php 
        $barra_herramientas_modal='
        <button type="button" class="btn btn-default" data-dismiss="modal"><i class="fa fa-times fa-fw"></i> '.$MULTILANG_Cerrar.' {<i class="fa fa-keyboard-o"></i> Esc}</button>';
        PCO_CerrarDialogoModal($barra_herramientas_modal);


    ############################################################################
    ############################################################################
    //Define los modos o lenguajes soportados por el editor
            global $PCODER_LenguajesResaltado,$MULTILANG_PCODER_LenguajeResaltado;
            //Genera la lista con las opciones
            $PCODER_LenguajesResaltado="";
            $PCODER_LenguajesResaltado.="<select style='width:25px; padding:0px;' id='modo_archivo_top' size='1' class=' btn-xs btn-primary' onclick='event.preventDefault();' onchange='event.preventDefault(); CambiarModoEditor(this.value);'  data-toggle='tooltip' data-placement='bottom' title='{$MULTILANG_PCODER_LenguajeResaltado}'>";
        		for ($i=0;$i<count($PCODER_Modos);$i++)
        		    $PCODER_LenguajesResaltado.="<option class='btn-xs' value='ace/mode/".$PCODER_Modos[$i]["Nombre"]."' >".$PCODER_Modos[$i]["Nombre"]."</option>";
            $PCODER_LenguajesResaltado.="</select>";

        
/* ################################################################## */
/* ################################################################## */
    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/comunes.php

/*
    Function: Presentar_KeyBindings
    Presenta la inforamcion de ayuda de atajos de teclado
*/
function PCODER_PresentarKeyBindings()
    {
        global $MULTILANG_PCODER_Basicos,$MULTILANG_PCODER_Otros,$MULTILANG_PCODER_Desplazar,$MULTILANG_PCODER_Seleccionar;
        echo '
            <div class="btn btn-success btn-block"><b>'.$MULTILANG_PCODER_Basicos.'</b></div>
            <table class="table table-responsive table-bordered table-condensed table-hover btn-xs">
                <thead>
                    <tr>
                        <td><b>PC (Windows/Linux)</b></td>
                        <td><b>Mac</b></td>
                        <td><b>Acción</b></td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Ctrl-L</td>
                        <td>Command-L</td>
                        <td>Ir a la línea</td>
                    </tr>
                    <tr>
                        <td>Ctrl-F</td>
                        <td>Command-F</td>
                        <td>Buscar</td>
                    </tr>
                    <tr>
                        <td>Ctrl-H</td>
                        <td>Command-Option-F</td>
                        <td>Buscar y reemplazar</td>
                    </tr>
                    <tr>
                        <td>Ctrl-K</td>
                        <td>Command-G</td>
                        <td>Buscar siguiente</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-K</td>
                        <td>Command-Shift-G</td>
                        <td>Buscar anterior</td>
                    </tr>
                    <tr>
                        <td>Tab</td>
                        <td>Tab</td>
                        <td>Agregar sangría</td>
                    </tr>
                    <tr>
                        <td>Shift-Tab</td>
                        <td>Shift-Tab</td>
                        <td>Disminuir sangría</td>
                    </tr>
                    <tr>
                        <td>Alt-L, Ctrl-F1</td>
                        <td>Command-Option-L, Command-F1</td>
                        <td>Recoger/Expandir selección</td>
                    </tr>
                    <tr>
                        <td>Ctrl-P</td>
                        <td></td>
                        <td>Buscar el siguiente elemento que abre o cierra el actual (llaves, paréntesis,cochetes,etc)</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-P</td>
                        <td></td>
                        <td>Buscar el siguiente elemento que abre o cierra el actual (llaves, paréntesis,cochetes,etc)</td>
                    </tr>
                </tbody>
            </table>

            <div class="btn btn-success btn-block"><b>'.$MULTILANG_PCODER_Desplazar.'</b></div>
            <table class="table table-responsive table-bordered table-condensed table-hover btn-xs">
                <thead>
                    <tr>
                        <td><b>PC (Windows/Linux)</b></td>
                        <td><b>Mac</b></td>
                        <td><b>Acción</b></td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Down</td>
                        <td>Down, Ctrl-N</td>
                        <td>Bajar una línea</td>
                    </tr>
                    <tr>
                        <td>Up</td>
                        <td>Up, Ctrl-P</td>
                        <td>Subir una línea</td>
                    </tr>
                    <tr>
                        <td>Ctrl-End</td>
                        <td>Command-End, Command-Down</td>
                        <td>Ir al final</td>
                    </tr>
                    <tr>
                        <td>Left</td>
                        <td>Left, Ctrl-B</td>
                        <td>Ir a la izquierda</td>
                    </tr>
                    <tr>
                        <td>Alt-Right, End</td>
                        <td>Command-Right, End, Ctrl-E</td>
                        <td>Ir al final de la línea</td>
                    </tr>
                    <tr>
                        <td>Alt-Left, Home</td>
                        <td>Command-Left, Home, Ctrl-A</td>
                        <td>Ir al comienzo de la línea</td>
                    </tr>
                    <tr>
                        <td>PageDown</td>
                        <td>Option-PageDown, Ctrl-V</td>
                        <td>Ir una página abajo</td>
                    </tr>
                    <tr>
                        <td>PageUp</td>
                        <td>Option-PageUp</td>
                        <td>Ir una página arriba</td>
                    </tr>
                    <tr>
                        <td>Right</td>
                        <td>Right, Ctrl-F</td>
                        <td>Ir a la derecha</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Home</td>
                        <td>Command-Home, Command-Up</td>
                        <td>Ir al inicio del documento</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Left</td>
                        <td>Option-Left</td>
                        <td>Ir una palabra a la izquierda</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Right</td>
                        <td>Option-Right</td>
                        <td>Ir una palabra a la derecha</td>
                    </tr>
                    <tr>
                        <td>Alt-Down</td>
                        <td>Option-Down</td>
                        <td>Mover una línea abajo</td>
                    </tr>
                    <tr>
                        <td>Alt-Up</td>
                        <td>Option-Up</td>
                        <td>Mover una línea arriba</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Shift-Up</td>
                        <td>Ctrl-Option-Shift-Up</td>
                        <td>Mover multicursor de la línea actual a la línea superior</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Shift-Down</td>
                        <td>Ctrl-Option-Shift-Down</td>
                        <td>Mover multicursor de la línea actual a la línea inferior</td>
                    </tr>
                    <tr>
                        <td>Insert</td>
                        <td>Insert</td>
                        <td>Sobreescribir en el cursor</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Shift-Right</td>
                        <td>Ctrl-Option-Shift-Right</td>
                        <td>Remover la ocurrencia actual de la multiseleccion y moverse al siguiente</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Shift-Left</td>
                        <td>Ctrl-Option-Shift-Left</td>
                        <td>Remover la ocurrencia actual de la multiseleccion y moverse al anterior</td>
                    </tr>
                    <tr>
                        <td>Ctrl-D</td>
                        <td>Command-D</td>
                        <td>Remover línea</td>
                    </tr>
                    <tr>
                        <td>Alt-Delete</td>
                        <td>Ctrl-K</td>
                        <td>Remover hasta el fin de línea</td>
                    </tr>
                    <tr>
                        <td>Alt-Backspace</td>
                        <td>Command-Backspace</td>
                        <td>Remover hasta el inicio de línea</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Backspace</td>
                        <td>Option-Backspace, Ctrl-Option-Backspace</td>
                        <td>Remover palabra a la izquierda</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Delete</td>
                        <td>Option-Delete</td>
                        <td>Remover palabra a la derecha</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Down</td>
                        <td>Command-Down</td>
                        <td>Desplazar una línea hacia abajo</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Up</td>
                        <td></td>
                        <td>Desplazar una línea hacia arriba</td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>Option-PageDown	</td>
                        <td>Desplazar una página hacia abajo</td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>Option-PageUp</td>
                        <td>Desplazar una página hacia arriba</td>
                    </tr>
                </tbody>
            </table>

            <div class="btn btn-success btn-block"><b>'.$MULTILANG_PCODER_Seleccionar.'</b></div>
            <table class="table table-responsive table-bordered table-condensed table-hover btn-xs">
                <thead>
                    <tr>
                        <td><b>PC (Windows/Linux)</b></td>
                        <td><b>Mac</b></td>
                        <td><b>Acción</b></td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Ctrl-A</td>
                        <td>Command-A</td>
                        <td>Seleccionar todo</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-L</td>
                        <td>Ctrl-Shift-L</td>
                        <td>Seleccionar todo de una multiselección</td>
                    </tr>
                    <tr>
                        <td>Shift-Down</td>
                        <td>Shift-Down</td>
                        <td>Seleccionar hacia abajo</td>
                    </tr>
                    <tr>
                        <td>Shift-Left</td>
                        <td>Shift-Left</td>
                        <td>Seleccionar hacia la izquierda</td>
                    </tr>
                    <tr>
                        <td>Shift-End</td>
                        <td>Shift-End</td>
                        <td>Seleccionar hasta el fin de línea</td>
                    </tr>
                    <tr>
                        <td>Shift-Home</td>
                        <td>Shift-Home</td>
                        <td>Seleccionar hasta el comienzo de línea</td>
                    </tr>
                    <tr>
                        <td>Shift-PageDown</td>
                        <td>Shift-PageDown</td>
                        <td>Seleccionar una página hacia abajo</td>
                    </tr>
                    <tr>
                        <td>Shift-PageUp</td>
                        <td>Shift-PageUp</td>
                        <td>Seleccionar una página hacia arriba</td>
                    </tr>
                    <tr>
                        <td>Shift-Right</td>
                        <td>Shift-Right</td>
                        <td>Seleccionar hacia la derecha</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-End</td>
                        <td>Command-Shift-Down</td>
                        <td>Seleccionar hasta el fin del documento</td>
                    </tr>
                    <tr>
                        <td>Alt-Shift-Right</td>
                        <td>Command-Shift-Right	</td>
                        <td>Seleccionar hasta el fin de línea</td>
                    </tr>
                    <tr>
                        <td>Alt-Shift-Left</td>
                        <td>Command-Shift-Left</td>
                        <td>Seleccionar hasta el comienzo de línea</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-Home</td>
                        <td>Command-Shift-Up</td>
                        <td>Seleccionar hasta el inicio del documento</td>
                    </tr>
                    <tr>
                        <td>Shift-Up</td>
                        <td>Shift-Up</td>
                        <td>Seleccionar hacia arriba</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-Left</td>
                        <td>Option-Shift-Left</td>
                        <td>Seleccionar palabra a la izquierda</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-Right</td>
                        <td>Option-Shift-Right</td>
                        <td>Seleccionar palabra a la derecha</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-D</td>
                        <td>Command-Shift-D</td>
                        <td>Duplicar la selección</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Up</td>
                        <td>Ctrl-Option-Up</td>
                        <td>Agregar multicursor arriba</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Down</td>
                        <td>Ctrl-Option-Down</td>
                        <td>Agregar multicursor abajo</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Right</td>
                        <td>Ctrl-Option-Right</td>
                        <td>Añadir siguiente aparición de selección múltiple</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Alt-Left</td>
                        <td>Ctrl-Option-Left</td>
                        <td>Añadir previa aparición de selección múltiple</td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>Ctrl-L</td>
                        <td>Centrar la selección</td>
                    </tr>
                </tbody>
            </table>


            <div class="btn btn-success btn-block"><b>'.$MULTILANG_PCODER_Otros.'</b></div>
            <table class="table table-responsive table-bordered table-condensed table-hover btn-xs">
                <thead>
                    <tr>
                        <td><b>PC (Windows/Linux)</b></td>
                        <td><b>Mac</b></td>
                        <td><b>Acción</b></td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Ctrl-Alt-E</td>
                        <td></td>
                        <td>Grabar una macro</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-E</td>
                        <td>Command-Shift-E</td>
                        <td>Ejecutar una macro</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Z</td>
                        <td>Command-Z</td>
                        <td>Deshacer</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-Z, Ctrl-Y</td>
                        <td>Command-Shift-Z, Command-Y</td>
                        <td>Rehacer</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Shift-U</td>
                        <td>Ctrl-Shift-U</td>
                        <td>Cambiar a minúsculas</td>
                    </tr>
                    <tr>
                        <td>Ctrl-U</td>
                        <td>Ctrl-U</td>
                        <td>Cambiar a mayúsculas</td>
                    </tr>
                    <tr>
                        <td>Alt-Shift-Down</td>
                        <td>Command-Option-Down</td>
                        <td>Copiar línea debajo</td>
                    </tr>
                    <tr>
                        <td>Alt-Shift-Up</td>
                        <td>Command-Option-Up</td>
                        <td>Copiar línea encima</td>
                    </tr>
                    <tr>
                        <td>Delete</td>
                        <td></td>
                        <td>Eliminar</td>
                    </tr>
                    <tr>
                        <td>Alt-0</td>
                        <td>Command-Option-0</td>
                        <td>Recoger todo</td>
                    </tr>
                    <tr>
                        <td>Ctrl-Enter, F11</td>
                        <td>Command-Enter</td>
                        <td>Pantalla completa</td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>Ctrl-O</td>
                        <td>Dividir línea</td>
                    </tr>
                    <tr>
                        <td>Ctrl-/</td>
                        <td>Command-/</td>
                        <td>Cambiar a comentario</td>
                    </tr>
                    <tr>
                        <td>Ctrl-T</td>
                        <td>Ctrl-T</td>
                        <td>Transponer letras</td>
                    </tr>
                    <tr>
                        <td>Alt-Shift-L, Ctrl-Shift-F1</td>
                        <td>Command-Option-Shift-L, Command-Shift-F1</td>
                        <td>Expandir</td>
                    </tr>
                    <tr>
                        <td>Alt-Shift-0</td>
                        <td>Command-Option-Shift-0</td>
                        <td>Expandir todo</td>
                    </tr>
                    <tr>
                        <td>Ctrl- ,</td>
                        <td>Command- ,</td>
                        <td>Ver menu de configuración</td>
                    </tr>
                </tbody>
            </table>
        ';
    }