CPF/CPF.Android/AndroidPlatform.cs
2023-11-21 23:05:03 +08:00

672 lines
27 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Android.Content;
using CPF.Controls;
using CPF.Input;
using CPF.Platform;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Xamarin.Essentials;
using System.Linq;
using Android.OS;
namespace CPF.Android
{
public class AndroidPlatform : RuntimePlatform
{
internal PixelPoint mousePosition;
public override PixelPoint MousePosition => mousePosition;
public override TimeSpan DoubleClickTime => TimeSpan.FromSeconds(0.5);
public override IPopupImpl CreatePopup()
{
return new PopupImpl();
}
public override IWindowImpl CreateWindow()
{
return new WindowImpl();
}
public override DragDropEffects DoDragDrop(DragDropEffects allowedEffects, params (DataFormat, object)[] data)
{
throw new NotImplementedException();
}
public override IReadOnlyList<Screen> GetAllScreen()
{
var display = CpfActivity.CurrentActivity.WindowManager.DefaultDisplay;
global::Android.Graphics.Rect rect = new global::Android.Graphics.Rect();
display.GetRectSize(rect);
global::Android.Graphics.Point point1 = new global::Android.Graphics.Point();
display.GetSize(point1);
var screen = new Screen(new Drawing.Rect(0, 0, point1.X, point1.Y), new Drawing.Rect(rect.Left, rect.Top, rect.Right, rect.Bottom), true);
return new Screen[] { screen };
}
public override IClipboard GetClipboard()
{
return new ClipboardImpl();
}
public override object GetCursor(Cursors cursorType)
{
return cursorType;
}
public override SynchronizationContext GetSynchronizationContext()
{
return new AndroidSynchronizationContext();
}
static Dictionary<KeyGesture, PlatformHotkey> keyValuePairs = new Dictionary<KeyGesture, PlatformHotkey>() {
{ new KeyGesture(Keys.C,InputModifiers.Control),PlatformHotkey.Copy},
{ new KeyGesture(Keys.X,InputModifiers.Control),PlatformHotkey.Cut},
{ new KeyGesture(Keys.V,InputModifiers.Control),PlatformHotkey.Paste},
{ new KeyGesture(Keys.Y,InputModifiers.Control),PlatformHotkey.Redo},
{ new KeyGesture(Keys.A,InputModifiers.Control),PlatformHotkey.SelectAll},
{ new KeyGesture(Keys.Z,InputModifiers.Control),PlatformHotkey.Undo},
};
public override PlatformHotkey Hotkey(KeyGesture keyGesture)
{
keyValuePairs.TryGetValue(keyGesture, out PlatformHotkey platformHotkey);
return platformHotkey;
}
public override void Run()
{
}
public override Task<string[]> ShowFileDialogAsync(FileDialog dialog, IWindowImpl parent)
{
//var activity = CpfActivity.CurrentActivity as CpfActivity;
//if (activity != null && activity.Main != null)
//{
// //activity.fileName = new TaskCompletionSource<string[]>();
// //FileSaveFragment fileSaveFragment = FileSaveFragment.newInstance("*/*", 500, Resource.String.btn_ok, Resource.String.btn_cancel, Resource.String.tag_title_SaveFile, Resource.String.tag_save_hint, Resource.Drawable.filedialog_root_l, Resource.Drawable.filedialog_folder_l, Resource.Drawable.filedialog_folder_up_l, Resource.Drawable.filedialog_xlsfile_l);
// //fileSaveFragment.Show(activity.FragmentManager, fileSaveFragment.Tag);
// //return activity.fileName.Task;
// var f = new OpenFileDialogView();
// activity.Main.Root.Children.Add(f);
//}
//return Task.Run(() => new string[0]);
return Task.Run(() =>
{
if (dialog is OpenFileDialog open)
{
var p = new PickOptions { PickerTitle = dialog.Title };
if (open.Filters != null && open.Filters.Count > 0)
{
HashSet<string> ex = new HashSet<string>();
foreach (var item in open.Filters)
{
if (!string.IsNullOrWhiteSpace(item.Extensions))
{
var es = item.Extensions.Split(',');
foreach (var e in es)
{
if (e == null)
{
continue;
}
if (MIME_Map.TryGetValue(e, out var ee))
{
ex.Add(ee);
}
}
}
}
p.FileTypes = new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
{
{ DevicePlatform.Android, ex }
});
}
if (!open.AllowMultiple)
{
Task<FileResult> fileTask = null;
CPF.Threading.Dispatcher.MainThread.Invoke(() =>
{
fileTask = FilePicker.PickAsync(p);
});
var file = fileTask.Result;
if (file != null)
{
return new string[] { file.FullPath };
}
}
else
{
Task<IEnumerable<FileResult>> fileTask = null;
CPF.Threading.Dispatcher.MainThread.Invoke(() =>
{
fileTask = FilePicker.PickMultipleAsync(p);
});
var files = fileTask.Result;
if (files != null)
{
return files.Select(a => a.FullPath).ToArray();
}
}
}
else if (dialog is SaveFileDialog save)
{
throw new NotImplementedException();
}
return new string[0];
});
}
public override Task<string> ShowFolderDialogAsync(OpenFolderDialog dialog, IWindowImpl parent)
{
throw new NotImplementedException();
}
public override INativeImpl CreateNative()
{
return new NativeImpl();
}
public override INotifyIconImpl CreateNotifyIcon()
{
return null;
}
public override void Run(CancellationToken cancellation)
{
throw new NotSupportedException("安卓不能支持主线程的消息循环控制");
//var queue = Looper.MyLooper().Queue;
//var next = queue.Class.GetDeclaredMethod("next");
//next.Accessible = true;
//while (!cancellation.IsCancellationRequested)
//{
// var message = (Message)next.Invoke(queue);
// if (message == null)
// {
// break;
// }
// try
// {
// message.Target.DispatchMessage(message);
// }
// catch (Exception e)
// {
// System.Diagnostics.Debug.WriteLine(e);
// }
// //Binder.ClearCallingIdentity();
// //var recycleUnchecked = message.Class.GetDeclaredMethod("recycleUnchecked");
// //recycleUnchecked.Accessible = true;
// //recycleUnchecked.Invoke(message);
// //message.Recycle();
//}
//cancellation.Register(() =>
//{
// Looper.MyLooper().Quit();
//});
//cancellation.ThrowIfCancellationRequested();
cancellation.Register(() =>
{
throw new Java.Lang.RuntimeException();
});
try
{
Looper.Loop();
}
catch (Exception e)
{
}
}
static Dictionary<string, string> MIME_Map = new Dictionary<string, string>
{
//{后缀名MIME类型}
{"pbm", "image/x-portable-bitmap"},
{"pcx", "image/x-pcx"},
{"nbmp", "image/nbmp"},
{"pda", "image/x-pda"},
{"pgm", "image/x-portable-graymap"},
{"pict", "image/x-pict"},
{"png", "image/png"},
{"pnm", "image/x-portable-anymap"},
{"pnz", "image/png"},
{"ppm", "image/x-portable-pixmap"},
{"nokia-op-logo", "image/vnd.nok-oplogo-color"},
{"qti", "image/x-quicktime"},
{"qtif", "image/x-quicktime"},
{"ras", "image/x-cmu-raster"},
{"rf", "image/vnd.rn-realflash"},
{"rp", "image/vnd.rn-realpix"},
{"rgb", "image/x-rgb"},
{"si9", "image/vnd.lgtwap.sis"},
{"si7", "image/vnd.stiwap.sis"},
{"svf", "image/vnd"},
{"svg", "image/svg-xml"},
{"svh", "image/svh"},
{"si6", "image/si6"},
{"tif", "image/tiff"},
{"tiff", "image/tiff"},
{"toy", "image/toy"},
{"wbmp", "image/vnd.wap.wbmp"},
{"wi", "image/wavelet"},
{"wpng", "image/x-up-wpng"},
{"xbm", "image/x-xbitmap"},
{"xpm", "image/x-xpixmap"},
{"xwd", "image/x-xwindowdump"},
{"fh4", "image/x-freehand"},
{"fh5", "image/x-freehand"},
{"fhc", "image/x-freehand"},
{"fif", "image/fif"},
{"bmp", "image/bmp"},
{"cal", "image/x-cals"},
{"cod", "image/cis-cod"},
{"fpx", "image/x-fpx"},
{"dcx", "image/x-dcx"},
{"eri", "image/x-eri"},
{"gif", "image/gif"},
{"ief", "image/ief"},
{"ifm", "image/gif"},
{"ifs", "image/ifs"},
{"j2k", "image/j2k"},
{"jpe", "image/jpeg"},
{"jpeg", "image/jpeg"},
{"jpg", "image/jpeg"},
{"jpz", "image/jpeg"},
{"mil", "image/x-cals"},
{"3gp", "video/3gpp"},
{"asf", "video/x-ms-asf"},
{"asx", "video/x-ms-asf"},
{"avi", "video/x-msvideo"},
{"fvi", "video/isivideo"},
{"lsf", "video/x-ms-asf"},
{"lsx", "video/x-ms-asf"},
{"m4u", "video/vnd.mpegurl"},
{"m4v", "video/x-m4v"},
{"pvx", "video/x-pv-pvx"},
{"qt", "video/quicktime"},
{"rv", "video/vnd.rn-realvideo"},
{"viv", "video/vivo"},
{"vivo", "video/vivo"},
{"vdo", "video/vdo"},
{"wm", "video/x-ms-wm"},
{"wmx", "video/x-ms-wmx"},
{"wv", "video/wavelet"},
{"wvx", "video/x-ms-wvx"},
{"mov", "video/quicktime"},
{"movie", "video/x-sgi-movie"},
{"mp4", "video/mp4"},
{"mng", "video/x-mng"},
{"mpe", "video/mpeg"},
{"mpeg", "video/mpeg"},
{"mpg", "video/mpeg"},
{"mpg4", "video/mp4"},
{"aif", "audio/x-aiff"},
{"aifc", "audio/x-aiff"},
{"aiff", "audio/x-aiff"},
{"als", "audio/X-Alpha5"},
{"au", "audio/basic"},
{"es", "audio/echospeech"},
{"esl", "audio/echospeech"},
{"awb", "audio/amr-wb"},
{"imy", "audio/melody"},
{"it", "audio/x-mod"},
{"itz", "audio/x-mod"},
{"tsi", "audio/tsplayer"},
{"ult", "audio/x-mod"},
{"vib", "audio/vib"},
{"vox", "audio/voxware"},
{"vqe", "audio/x-twinvq-plugin"},
{"vqf", "audio/x-twinvq"},
{"vql", "audio/x-twinvq"},
{"wav", "audio/x-wav"},
{"wax", "audio/x-ms-wax"},
{"wmv", "audio/x-ms-wmv"},
{"wma", "audio/x-ms-wma"},
{"xmz", "audio/x-mod"},
{"m15", "audio/x-mod"},
{"m3u", "audio/x-mpegurl"},
{"m3url", "audio/x-mpegurl"},
{"m4a", "audio/mp4a-latm"},
{"m4b", "audio/mp4a-latm"},
{"m4p", "audio/mp4a-latm"},
{"ma1", "audio/ma1"},
{"ma2", "audio/ma2"},
{"ma3", "audio/ma3"},
{"ma5", "audio/ma5"},
{"mdz", "audio/x-mod"},
{"mid", "audio/midi"},
{"midi", "audio/midi"},
{"mio", "audio/x-mio"},
{"mod", "audio/x-mod"},
{"mp2", "audio/x-mpeg"},
{"mp3", "audio/x-mpeg"},
{"mpga", "audio/mpeg"},
{"ogg", "audio/ogg"},
{"nsnd", "audio/nsnd"},
{"pae", "audio/x-epac"},
{"pac", "audio/x-pac"},
{"qcp", "audio/vnd.qcelp"},
{"ra", "audio/x-pn-realaudio"},
{"ram", "audio/x-pn-realaudio"},
{"rm", "audio/x-pn-realaudio"},
{"rmf", "audio/x-rmf"},
{"rmm", "audio/x-pn-realaudio"},
{"rmvb", "audio/x-pn-realaudio"},
{"rpm", "audio/x-pn-realaudio-plugin"},
{"s3m", "audio/x-mod"},
{"s3z", "audio/x-mod"},
{"stm", "audio/x-mod"},
{"smz", "audio/x-smd"},
{"snd", "audio/basic"},
{"smd", "audio/x-smd"},
{"xm", "audio/x-mod"},
{"c", "text/plain"},
{"asc", "text/plain"},
{"conf", "text/plain"},
{"cpp", "text/plain"},
{"css", "text/css"},
{"dhtml", "text/html"},
{"etx", "text/x-setext"},
{"h", "text/plain"},
{"hdm", "text/x-hdml"},
{"hdml", "text/x-hdml"},
{"htm", "text/html"},
{"html", "text/html"},
{"hts", "text/html"},
{"jad", "text/vnd.sun.j2me.app-descriptor"},
{"java", "text/plain"},
{"log", "text/plain"},
{"mel", "text/x-vmel"},
{"mrl", "text/x-mrml"},
{"prop", "text/plain"},
{"r3t", "text/vnd.rn-realtext3d"},
{"sgm", "text/x-sgml"},
{"rc", "text/plain"},
{"rtx", "text/richtext"},
{"rt", "text/vnd.rn-realtext"},
{"sgml", "text/x-sgml"},
{"spc", "text/x-speech"},
{"txt", "text/plain"},
{"tsv", "text/tab-separated-values"},
{"talk", "text/x-speech"},
{"vcf", "text/x-vcard"},
{"wml", "text/vnd.wap.wml"},
{"wmls", "text/vnd.wap.wmlscript"},
{"wmlscript", "text/vnd.wap.wmlscript"},
{"ws", "text/vnd.wap.wmlscript"},
{"xml", "text/xml"},
{"xsit", "text/xml"},
{"xsl", "text/xml"},
{"xul", "text/xul"},
{"apk", "application/vnd.android.package-archive"},
{"aab", "application/x-authoware-bin"},
{"aam", "application/x-authoware-map"},
{"aas", "application/x-authoware-seg"},
{"ai", "application/postscript"},
{"amc", "application/x-mpeg"},
{"ani", "application/octet-stream"},
{"asd", "application/astound"},
{"asn", "application/astound"},
{"asp", "application/x-asap"},
{"avb", "application/octet-stream"},
{"bcpio", "application/x-bcpio"},
{"bin", "application/octet-stream"},
{"bld", "application/bld"},
{"bld2", "application/bld2"},
{"bpk", "application/octet-stream"},
{"bz2", "application/x-bzip2"},
{"ccn", "application/x-cnc"},
{"cco", "application/x-cocoa"},
{"cdf", "application/x-netcdf"},
{"chat", "application/x-chat"},
{"class", "application/octet-stream"},
{"clp", "application/x-msclip"},
{"cmx", "application/x-cmx"},
{"co", "application/x-cult3d-object"},
{"cpio", "application/x-cpio"},
{"cpt", "application/mac-compactpro"},
{"crd", "application/x-mscardfile"},
{"csh", "application/x-csh"},
{"cur", "application/octet-stream"},
{"dcr", "application/x-director"},
{"dir", "application/x-director"},
{"dll", "application/octet-stream"},
{"dmg", "application/octet-stream"},
{"dms", "application/octet-stream"},
{"doc", "application/msword"},
{"docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
{"dot", "application/x-dot"},
{"dvi", "application/x-dvi"},
{"dwg", "application/x-autocad"},
{"dxf", "application/x-autocad"},
{"dxr", "application/x-director"},
{"ebk", "application/x-expandedbook"},
{"eps", "application/postscript"},
{"evy", "application/x-envoy"},
{"exe", "application/octet-stream"},
{"etc", "application/x-earthtime"},
{"fm", "application/x-maker"},
{"gps", "application/x-gps"},
{"gtar", "application/x-gtar"},
{"gz", "application/x-gzip"},
{"gca", "application/x-gca-compressed"},
{"hdf", "application/x-hdf"},
{"hlp", "application/winhlp"},
{"hqx", "application/mac-binhex40"},
{"ico", "application/octet-stream"},
{"ins", "application/x-NET-Install"},
{"ips", "application/x-ipscript"},
{"ipx", "application/x-ipix"},
{"jam", "application/x-jam"},
{"jar", "application/java-archive"},
{"jnlp", "application/x-java-jnlp-file"},
{"latex", "application/x-latex"},
{"lcc", "application/fastman"},
{"lcl", "application/x-digitalloca"},
{"lcr", "application/x-digitalloca"},
{"lgh", "application/lgh"},
{"lha", "application/octet-stream"},
{"js", "application/x-javascript"},
{"jwc", "application/jwc"},
{"kjx", "application/x-kjx"},
{"lzh", "application/x-lzh"},
{"m13", "application/x-msmediaview"},
{"m14", "application/x-msmediaview"},
{"man", "application/x-troff-man"},
{"mbd", "application/mbedlet"},
{"mct", "application/x-mascot"},
{"mdb", "application/x-msaccess"},
{"me", "application/x-troff-me"},
{"mi", "application/x-mif"},
{"mif", "application/x-mif"},
{"mmf", "application/x-skt-lbs"},
{"mny", "application/x-msmoney"},
{"moc", "application/x-mocha"},
{"mocha", "application/x-mocha"},
{"mpn", "application/vnd.mophun.application"},
{"mpc", "application/vnd.mpohun.certificate"},
{"mof", "application/x-yumekara"},
{"mpp", "application/vnd.ms-project"},
{"mps", "application/x-mapserver"},
{"mrm", "application/x-mrm"},
{"ms", "application/x-troff-ms"},
{"msg", "application/vnd.ms-outlook"},
{"mts", "application/metastream"},
{"mtx", "application/metastream"},
{"mtz", "application/metastream"},
{"mzv", "application/metastream"},
{"nar", "application/zip"},
{"nc", "application/x-netcdf"},
{"ndwn", "application/ndwn"},
{"nif", "application/x-nif"},
{"nmz", "application/x-scream"},
{"npx", "application/x-netfpx"},
{"nva", "application/x-neva1"},
{"oda", "application/oda"},
{"oom", "application/x-AtlasMate-Plugin"},
{"pan", "application/x-pan"},
{"pdf", "application/pdf"},
{"pfr", "application/font-tdpfr"},
{"pm", "application/x-perl"},
{"pmd", "application/x-pmd"},
{"pot", "application/vnd.ms-powerpoint"},
{"pps", "application/vnd.ms-powerpoint"},
{"ppt", "application/vnd.ms-powerpoint"},
{"pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
{"pqf", "application/x-cprplayer"},
{"pqi", "application/cprplayer"},
{"proxy", "application/x-ns-proxy-autoconfig"},
{"ps", "application/postscript"},
{"ptlk", "application/listenup"},
{"pub", "application/x-mspublisher"},
{"prc", "application/x-prc"},
{"rar", "application/x-rar-compressed"},
{"rdf", "application/rdf+xml"},
{"rlf", "application/x-richlink"},
{"rnx", "application/vnd.rn-realplayer"},
{"roff", "application/x-troff"},
{"rtf", "application/rtf"},
{"rtg", "application/metastream"},
{"rwc", "application/x-rogerwilco"},
{"sca", "application/x-supercard"},
{"scd", "application/x-msschedule"},
{"sdf", "application/e-score"},
{"sea", "application/x-stuffit"},
{"sh", "application/x-sh"},
{"shw", "application/presentations"},
{"shar", "application/x-shar"},
{"sis", "application/vnd.symbian.install"},
{"sit", "application/x-stuffit"},
{"skd", "application/x-Koan"},
{"skm", "application/x-Koan"},
{"skp", "application/x-Koan"},
{"skt", "application/x-Koan"},
{"slc", "application/x-salsa"},
{"smi", "application/smil"},
{"smil", "application/smil"},
{"smp", "application/studiom"},
{"spl", "application/futuresplash"},
{"spr", "application/x-sprite"},
{"sprite", "application/x-sprite"},
{"spt", "application/x-spt"},
{"src", "application/x-wais-source"},
{"stk", "application/hyperstudio"},
{"sv4cpio", "application/x-sv4cpio"},
{"sv4crc", "application/x-sv4crc"},
{"swf", "application/x-shockwave-flash"},
{"swfl", "application/x-shockwave-flash"},
{"t", "application/x-troff"},
{"tad", "application/octet-stream"},
{"tar", "application/x-tar"},
{"taz", "application/x-tar"},
{"tbp", "application/x-timbuktu"},
{"tbt", "application/x-timbuktu"},
{"tcl", "application/x-tcl"},
{"tex", "application/x-tex"},
{"texi", "application/x-texinfo"},
{"texinfo", "application/x-texinfo"},
{"tgz", "application/x-tar"},
{"thm", "application/vnd.eri.thm"},
{"tki", "application/x-tkined"},
{"tkined", "application/x-tkined"},
{"toc", "application/toc"},
{"tr", "application/x-troff"},
{"trm", "application/x-msterminal"},
{"tsp", "application/dsptype"},
{"ttf", "application/octet-stream"},
{"ttz", "application/t-time"},
{"ustar", "application/x-ustar"},
{"uu", "application/x-uuencode"},
{"uue", "application/x-uuencode"},
{"vcd", "application/x-cdlink"},
{"vmd", "application/vocaltec-media-desc"},
{"vmf", "application/vocaltec-media-file"},
{"vmi", "application/x-dreamcast-vms-info"},
{"vms", "application/x-dreamcast-vms"},
{"wis", "application/x-InstallShield"},
{"wmd", "application/x-ms-wmd"},
{"wmf", "application/x-msmetafile"},
{"wmlc", "application/vnd.wap.wmlc"},
{"wmlsc", "application/vnd.wap.wmlscriptc"},
{"wps", "application/vnd.ms-works"},
{"wmz", "application/x-ms-wmz"},
{"wri", "application/x-mswrite"},
{"web", "application/vnd.xara"},
{"wsc", "application/vnd.wap.wmlscriptc"},
{"wxl", "application/x-wxl"},
{"x-gzip", "application/x-gzip"},
{"xar", "application/vnd.xara"},
{"xdm", "application/x-xdma"},
{"xdma", "application/x-xdma"},
{"xdw", "application/vnd.fujixerox.docuworks"},
{"xht", "application/xhtml+xml"},
{"xhtm", "application/xhtml+xml"},
{"xhtml", "application/xhtml+xml"},
{"xla", "application/vnd.ms-excel"},
{"xlc", "application/vnd.ms-excel"},
{"xll", "application/x-excel"},
{"xlm", "application/vnd.ms-excel"},
{"xls", "application/vnd.ms-excel"},
{"xlt", "application/vnd.ms-excel"},
{"xlw", "application/vnd.ms-excel"},
{"xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
{"xpi", "application/x-xpinstall"},
{"yz1", "application/x-yz1"},
{"z", "application/x-compress"},
{"zac", "application/x-zaurus-zac"},
{"zip", "application/zip"},
{"gau", "chemical/x-gaussian-input"},
{"csm", "chemical/x-csml"},
{"csml", "chemical/x-csml"},
{"emb", "chemical/x-embl-dl-nucleotide"},
{"embl", "chemical/x-embl-dl-nucleotide"},
{"mol", "chemical/x-mdl-molfile"},
{"pdb", "chemical/x-pdb"},
{"xyz", "chemical/x-pdb"},
{"mop", "chemical/x-mopac-input"},
{"dcm", "x-lml/x-evm"},
{"evm", "x-lml/x-evm"},
{"gdb", "x-lml/x-gdb"},
{"lak", "x-lml/x-lak"},
{"lml", "x-lml/x-lml"},
{"lmlpack", "x-lml/x-lmlpack"},
{"ndb", "x-lml/x-ndb"},
{"rte", "x-lml/x-gps"},
{"wpt", "x-lml/x-gps"},
{"trk", "x-lml/x-gps"},
{"svr", "x-world/x-svr"},
{"ivr", "i-world/i-vrml"},
{"vre", "x-world/x-vream"},
{"vrml", "x-world/x-vrml"},
{"vrt", "x-world/x-vrt"},
{"vrw", "x-world/x-vream"},
{"vts", "workbook/formulaone"},
{"wrl", "x-world/x-vrml"},
{"wrz", "x-world/x-vrml"},
{"dwf", "drawing/x-dwf"},
{"ice", "x-conference/x-cooltalk"},
{"map", "magnus-internal/imagemap"},
{"shtml", "magnus-internal/parsed-html"},
{"cgi", "magnus-internal/cgi"},
{"", "*/*"}
};
}
}