Skip to content

Instantly share code, notes, and snippets.

@divinity76
Last active May 26, 2016 08:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save divinity76/e3f1da78259ffc00a8765881f340f616 to your computer and use it in GitHub Desktop.
Save divinity76/e3f1da78259ffc00a8765881f340f616 to your computer and use it in GitHub Desktop.
var defele = document.querySelectorAll(".dc-description")[0];
var fun = {};
fun.name = defele.querySelector(".methodname").textContent;
//console.log("name is:"+fun.name);
fun.rettype = defele.querySelector(".type").textContent;
fun.returnsRealValue=(fun.rettype!=="resource" && !(defele.querySelector(".type") && defele.querySelector(".type").querySelector("a") && defele.querySelector(".type").querySelector("a").href.indexOf("pseudo-types") !== 1 ));
// console.log(defele.querySelector(".type").querySelector("a").href.indexOf("pseudo-types"));die();
fun.parameters = [];
var parameters = defele.querySelectorAll(".methodparam");
var i = 0;
var parameter;
if(parameters.length===1 && parameters[0].textContent.trim()==="void"){
//nvm...
} else
for (i = 0; i < parameters.length; ++i) {
var tmp = parameters[i];
parameter = {};
parameter.name = tmp.querySelector(".parameter").textContent;
//console.log("name is:"+parameter.name);
parameter.isOptional = (tmp.previousSibling && tmp.previousSibling.textContent && tmp.previousSibling.textContent.trim()[0] === '[');
//console.log(tmp.previousSibling.textContent);
parameter.isRealType = !(tmp.querySelector(".type a") && tmp.querySelector(".type a").href.indexOf("pseudo-types") !== 1);
parameter.type = tmp.querySelector(".type").textContent;
parameter.initializer=(tmp.querySelector(".initializer") ? tmp.querySelector(".initializer").textContent : "");
fun.parameters.push(parameter);
}
var ret = 'static function ' + fun.name;
ret+=' ( ';
//console.log("adding:"+'static function '+fun.name+' ( ');
if(fun.parameters.length===0){
ret+="/*void*/ ";
} else
for (i = 0; i < fun.parameters.length; ++i) {
parameter = fun.parameters[i];
if (parameter.isRealType && parameter.type !== "resource") {
ret += parameter.type + " " + parameter.name;
} else {
ret += "\x2f\x2a" + parameter.type + "\x2a\x2f" + " " + parameter.name;
}
if(parameter.initializer){
if(parameter.initializer.trim().match(/\(\n*\)/)){
console.log("this matches () !: "+parameter.initializer.trim())
ret+=" = null "+"\x2f\x2a "+parameter.initializer.trim()+" \x2a\x2f ";
} else {
console.log("this does NOT match () !: "+parameter.initializer.trim())
ret+=" "+parameter.initializer.trim();
}
} else if (parameter.isOptional) {
ret += " = null";
}
if (i + 1 < fun.parameters.length) {
ret += ', ';
}
}
ret += ")";
if(!fun.returnsRealValue || fun.rettype.trim()==="void"){
ret+="\x2f\x2a"+":"+fun.rettype+"\x2a\x2f";
}else {
ret+=":"+fun.rettype;
}
ret+=" {\n";
ret+= " $args=func_get_args();\n"
ret += " $ret=call_user_func_array('" + fun.name + "',$args);\n";
ret += " if(false===$ret){\n";
ret += " ";
ret += "throw new RuntimeException('" + fun.name + "() failed. last error: '.self::_return_var_dump(error_get_last()).'. socket_last_error: '.self::_return_var_dump(socket_last_error($socket)).'. socket_strerror: '.self::_return_var_dump(socket_strerror(socket_last_error($socket))));\n";
ret += " }\n";
ret += " return $ret;\n";
ret += "}\n";
ret=" "+ret.split(/\n/g).join("\n ");
console.log(ret);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment