We've had several people now who have been having problems copying any scripts from RMRK in the [code] boxes. They try to copy it down to their clipboard, but it pastes out only in one single line, which means its obviously not gonna work in any RPG Maker. This has been a big issue for a long while now, ever since our switch to SMF 2.0. It's probably an Internet Explorer issue, as only people who use IE have had this problem. But despite RMRK's preference for other internet browsers, we can't just tell people to switch over to something like Firefox just to solve this problem.
Think you can figure out how to fix these code boxes to be IE friendly, Roph?
The problem is Internet Explorer's. I can't fix Internet Explorer.
There are two methods of storing text on the clipboard, plain text and rich text. Rich text preserves colours or other formatting etc, plain text is just the text characters themselves (this includes basic formatting like spaces, line breaks, tabs etc as these are just additional special characters).
Example code:
function xml2array($contents, $get_attributes=1, $priority = 'tag') {
if(!$contents) return array();
if(!function_exists('xml_parser_create')) {
return array();
}
$parser = xml_parser_create('');
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $xml_values);
xml_parser_free($parser);
if(!$xml_values) return;
$xml_array = array();
$parents = array();
$opened_tags = array();
$arr = array();
$current = &$xml_array;
$repeated_tag_index = array();
foreach($xml_values as $data) {
unset($attributes,$value);
extract($data);
$result = array();
$attributes_data = array();
if(isset($value)) {
if($priority == 'tag') $result = $value;
else $result['value'] = $value;
}
if(isset($attributes) and $get_attributes) {
foreach($attributes as $attr => $val) {
if($priority == 'tag') $attributes_data[$attr] = $val;
else $result['attr'][$attr] = $val;
}
}
if($type == "open") {
$parent[$level-1] = &$current;
if(!is_array($current) or (!in_array($tag, array_keys($current)))) {
$current[$tag] = $result;
if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
$repeated_tag_index[$tag.'_'.$level] = 1;
$current = &$current[$tag];
} else {
if(isset($current[$tag][0])) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
$repeated_tag_index[$tag.'_'.$level]++;
} else {
$current[$tag] = array($current[$tag],$result);
$repeated_tag_index[$tag.'_'.$level] = 2;
if(isset($current[$tag.'_attr'])) {
$current[$tag]['0_attr'] = $current[$tag.'_attr'];
unset($current[$tag.'_attr']);
}
}
$last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
$current = &$current[$tag][$last_item_index];
}
} elseif($type == "complete") {
if(!isset($current[$tag])) {
$current[$tag] = $result;
$repeated_tag_index[$tag.'_'.$level] = 1;
if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
} else {
if(isset($current[$tag][0]) and is_array($current[$tag])) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
if($priority == 'tag' and $get_attributes and $attributes_data) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
}
$repeated_tag_index[$tag.'_'.$level]++;
} else {
$current[$tag] = array($current[$tag],$result);
$repeated_tag_index[$tag.'_'.$level] = 1;
if($priority == 'tag' and $get_attributes) {
if(isset($current[$tag.'_attr'])) {
$current[$tag]['0_attr'] = $current[$tag.'_attr'];
unset($current[$tag.'_attr']);
}
if($attributes_data) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
}
}
$repeated_tag_index[$tag.'_'.$level]++;
}
}
} elseif($type == 'close') {
$current = &$parent[$level-1];
}
}
return($xml_array);
}
We can test both types of text formatting by using 2 different apps to paste into. Notepad only supports plain text pasting, wordpad will take rich text pasting.
When copied from Firefox:
Notepad (Plain text):
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg704.imageshack.us%2Fimg704%2F1898%2Fffnp.png&hash=398e44f37c64658d3d88d377e10cdbd0cb6d30df)
Wordpad (Rich text, it looks the same, but it is going to and from the clipboard via the rich text path):
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg820.imageshack.us%2Fimg820%2F4002%2Fffwp.png&hash=f16c29444ba4355117613b22464e7f3022383885)
Now when copied from a piece of shit like Internet Explorer:
Notepad (Plain text):
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg833.imageshack.us%2Fimg833%2F3645%2Fienp.png&hash=dfd4167bb623d8cf198955bc4a52106e26beb605)
Wordpad (Rich Text):
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg213.imageshack.us%2Fimg213%2F2540%2Fiewp.png&hash=ee5fc7400e5db6d370c62fc6f034aa9203fc2757)
And so the problem is revealed. Internet Explorer cannot properly manage plain text copying. In RPG Maker, the script tools only accept plain text pasting, and rightly so. The problem is NOT in RPG Maker, or even in notepad. RPG Maker and Notepad are simply pasting from the clipboard what IE wrote to it. The Problem is the broken way in which Internet Explorer copies via plain text.
The solution is incredibly simple and easy, and will make every IE user's life easier: Stop using it!
Cannot be any truer. :x