App-SocialCalc-Multiplayer
view release on metacpan or search on metacpan
socialcalc/SocialCalcServersideUtilities.pm view on Meta::CPAN
# Turns (2, 3) into B3. The default for both is 1.
#
sub CRToCoord {
my ($col, $row) = @_;
$row = 1 if $row < 1;
$col = 1 if $col < 1;
return (ColToCoord()->[$col]).$row;
}
#
# $col = ColToNumber($colname)
#
# Turns B into 2. The default is 1.
#
sub ColToNumber {
my $coord = shift @_;
$coord = lc($coord);
$coord =~ m/([a-z])([a-z])?/;
return 1 unless $1;
my $col = ord($1) - ord('a') + 1 ;
$col = 26 * $col + ord($2) - ord('a') + 1 if $2;
return $col;
}
#
# $coord = NumberToCol($col)
#
# Turns 2 into B. The default is 1.
#
sub NumberToCol {
my $col = shift @_;
$col = $col > 1 ? $col : 1;
my $col_high = int(($col - 1) / 26);
my $col_low = ($col - 1) % 26;
my $coord = chr(ord('A') + $col_low);
$coord = chr(ord('A') + $col_high - 1) . $coord if $col_high;
return $coord;
}
# # # # # # # # # #
# EncodeForSave($string)
#
# Returns $estring where :, \n, and \ are escaped
#
sub EncodeForSave {
my $string = shift @_;
$string =~ s/\\/\\b/g; # \ to \b
$string =~ s/:/\\c/g; # : to \c
$string =~ s/\n/\\n/g; # line end to \n
return $string;
}
# # # # # # # # # #
# DecodeFromSave($string)
#
# Returns $estring with \c, \n, \b and \\ un-escaped
#
sub DecodeFromSave {
my $string = shift @_;
$string =~ s/\\c/:/g;
$string =~ s/\\n/\n/g;
$string =~ s/\\b/\\/g;
return $string;
}
# # # # # # # # # #
# SpecialChars($string)
#
# Returns $estring where &, <, >, " are HTML escaped
#
sub SpecialChars {
my $string = shift @_;
$string =~ s/&/&/g;
$string =~ s/</</g;
$string =~ s/>/>/g;
$string =~ s/"/"/g;
return $string;
}
# # # # # # # # # #
# SpecialCharsNL($string)
#
# Returns $estring where &, <, >, ", and LF are HTML escaped, CR's are removed
#
sub SpecialCharsNL {
my $string = shift @_;
$string =~ s/&/&/g;
$string =~ s/</</g;
$string =~ s/>/>/g;
$string =~ s/"/"/g;
$string =~ s/\r//gs;
$string =~ s/\n/ /gs;
return $string;
}
# # # # # # # # # #
# URLEncode($string)
#
# Returns $estring with special chars URL encoded
#
# Based on Mastering Regular Expressions, Jeffrey E. F. Friedl, additional legal characters added
#
sub URLEncode {
my $string = shift @_;
$string =~ s!([^a-zA-Z0-9_\-;/?:@=#.])!sprintf('%%%02X', ord($1))!ge;
$string =~ s/%26/{{amp}}/gs; # let ampersands in URLs through -- convert to {{amp}}
return $string;
}
# # # # # # # # # #
# URLEncodePlain($string)
#
# Returns $estring with special chars URL encoded for sending to others by HTTP, not publishing
#
# Based on Mastering Regular Expressions, Jeffrey E. F. Friedl, additional legal characters added
#
sub URLEncodePlain {
my $string = shift @_;
$string =~ s!([^a-zA-Z0-9_\-/?:@=#.])!sprintf('%%%02X', ord($1))!ge;
return $string;
}
# # # # # # # # # #
# estring = ExpandMarkup($string, $sheet, $options)
#
# Returns $estring with expanded simple wikitext - used for error messages
#
sub ExpandMarkup {
my ($estring, $sheet, $options) = @_;
( run in 0.450 second using v1.01-cache-2.11-cpan-7f9471e7e0a )