summaryrefslogtreecommitdiff
path: root/xml
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-11-12 10:41:52 -0800
committerTor Norbye <tnorbye@google.com>2013-11-12 10:42:01 -0800
commit9c6f3112ffe942e4bb0b5d5d8476ce7014499650 (patch)
treea0a1a2817c17cddc428e1faf8dd7754ab593c0dc /xml
parentf88d3e15cd8228cba4070811da68d8ad54d81fd7 (diff)
downloadidea-9c6f3112ffe942e4bb0b5d5d8476ce7014499650.tar.gz
Snapshot 205707dc11cdd6508ae84db85d104f834028fd65 from idea/132.1045 of git://git.jetbrains.org/idea/community.git
205707d: support abbreviations in Search Everywhere 9eeb98a: NPE fix f701598: AA painting for shortcuts 9636e23: add abbreviations d1f7c58: IDEA-116296 Search match looks terrible under Retina 8bc5adc: AIOOBE f92fa41: IDEA-116194 "Generate equals() and hashcode()" for final classes should disable "accept subclasses" variant ec773fc: CCE 9a208ab: selected completion item should be the first or second visible (IDEA-115199) be542d6: linear-time filterByDumbAwareness 83273e5: faster next/prev occurrence action in the console (IDEA-115163) d684469: LanguageConsole: shutdown printXXX fiesta. Everyone is advised to use ConsoleView API the right way. 480215a: Merge branch 'master' of git.labs.intellij.net:idea/community c85aae4: https://android-review.googlesource.com/69716 76daf2e: Heroku integration - show log on redeploy c567431: Jediterm updated (PY-11368). 5d325de: Accept only terminal tabs on DnD. a1d5cd4: Merge remote-tracking branch 'origin/master' 0a3bcdb: Jediterm updated. 218607a8: Terminal: support presentation mode. ea6fd6f: switch on console-content-type highlighting in all language consoles e824117: Quick fix for RefParserTest 450ecea: suggest scrambled classes on second completion 7ba82d9: NPE fixed 525a30d: cleanup 2fa314d: don't display "Loading spellchecker dictionaries" in status bar (IDEA-115130) 276a47a: don't suggest scrambled classes in autopopup (IDEA-115199) b4a4b99: temporary fix for layouts of small IDEs 02e07e1: [log] Move SimpleHash from vcs-log-graph to vcs-log-impl f7b1796: [log] Hash -> int in Graph 0c4d0bb: [log] Don't call new VcsRefImpl() directly, use the factory 4c1c1c2: [log] Memory consumption: Hash -> int. Take 1 2e36939: Improvement from Roman Shevchenko to be compatible with Ubuntu 13.10. b6edb35: Show pin icon in pinned Find Usages tabs c143cee: IDEA-110064 JSF 2.2: Pass-through elements: if upper-case symbols are used instead of default 'jsf' namespace prefix, attributes are red-highlihted 3a69458: added actions 'mark/unmark as generated sources root' to popup menu bdfc48c: Use maven3 importer by default. d9417b6: Merge remote-tracking branch 'origin/master' 5b526fc: Add pty libs to pycharm community build. c912c67: add HowTo 6d940b1: depend on PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT if the file cannot be resolved yet 7c63c25: platform: jayatana patched to support Ubuntu 13.10 (sources only) 59622ee: IDEA-116276 Console font is small in Presentation mode 6863abc: IDEA-115889 Framework toolwindows: support scope-based file colors for items ac0f8ab: obtaining framework libraries from app server: download libraries list asynchronously from server 185804e: refactor supported root type checking according to CR-IC-3056 6b085fe: formatter removes spaces in import statement parentheses (PY-11359) b04030e: Show pin icon in pinned Find Usages tabs 90ea6d7: do not disable empty frameworks page if no templates available bb55e29: platform: jayatana sources attached d1911f7: platform: Ubuntu app menu loading code extracted and corrected 897738a: Cleanup (deprecated code) 56e41fb: Check Grails SDK in background thread, not in the AWT. +review CR-IU @gromopert fd2b6b3: IDEA-115074 New Project Wizard: Grails: grails-specific settings are missing a69a88a: spi: decline abstract classes, suggest all available inheritors (IDEA-115502) eeaee1e: SIOOBE 6cd3cb9: Fix spelling 5f4c814: IDEA-102413 (pointless assertion dropped) dc455bd: Cleanup (arrangement, formatting) 44590dc: IDEA-25934 Maven: Webapp resources filtering store web resources configuration. 6e65f2b: IDEA-25934 Maven: Webapp resources filtering store web resources configuration. df137ae: DOM stubs: namespace key index 046e455: Merge remote-tracking branch 'origin/master' 0681517: testdata fixed dd63221: IDEA-116168 Action creation does not escape special chars in plugin.xml 48fa01e: restore plugin description d34d829: new project wizard: remote templates 389db71: methods renamed b07e674: prefer non-qualified xml completion variants (IDEA-115355) add165a: IDEA-116144 Opening build.gradle of android project fails d524a84: refixed IDEA-111753 to remove unnecessary dependency on debugger b8df146: show usages from generated code in separate group (IDEA-97579) 034f42b: removed obsolete 'remote-server-util' module from installation, added new module to git plugin installation c8deccf: download libraries in parallel (IDEA-88561) 674de91: our LinkedHashMap: added methods to obtain last added key/value 43aced8: Restore context menu after DnD back to Terminal View. b6987d3: Merge remote-tracking branch 'origin/master' c147027: Fix: terminal tab doesn't save name change after DnD. 495bda4: JediTerm update to version 1.0 46667e2: Fix closing tab on session end. Fix popup for editor terminal tabs. fdd3e70: Fix potential NPE. 9ea940a: [git] Fix refresh notification after changing non-active branch hashes 34b357c: more console folding by default d21cf01: Fix memory leak. 1dcfd64: Fix removing terminal tabs on drag'n'drop. 29a4f60: add accessOrder parameter to our LinkedHashMap e0ff96d: DockableEditorTabbedContainer shouldn't return root pane as accept area as it makes impossible to add any other dockable container. It is better to return root pane in the special fallback method after we checked all containers. 4b22045: Terminal tabs: drag'n'drop to editor and back implemented. 6ac9ae9: DockableEditor doesn't need EditorWindow reference. 73f7ab5: [log] IDEA-115980 Don't show Git actions if there are no Git roots 7964385: [log] "Go To Commit" action c647083: [log] Extract the popup text field used for user completion 7e9497a: Merge remote-tracking branch 'origin/master' 0eb8a6f: [log] Fix hidden graph because of the date filter existance 95d5d5b: [log] IDEA-116022 Implement Structure filter for VCS Log & Git 4989fa1: [vcs] VcsStructureChooser: remove dependency on the AbstractVcs. 278cd62: [log] move structure filter implementation to vcs-log-impl 9b5b1c2: Github: change search request parameter a543347: IDEA-115330 Incorrect "condition is always false" 0b85cc1: trying to make project opening progress information more meaningful (IDEA-115130) 35af155: Don't display empty panel if there are no moreMessage in the dialog 41592ca: [vcs] IDEA-116036 Pressing Escape in Commit/TODO dialog performs commit 7c5ba53: [log] Fix IDEA-115676 once again 8fb8d34: [log] IDEA-116056 Display commit time in details if different from author time 9b6d291: [log] IDEA-116022 Add filter by date c49b45b: only suppress eager psi creation when there were stubs in the file f815aa9: our LinkedHashMap clients aren't necessarily aware that it updates its ordering on every get. Let clients specify if they need this feature (IDEA-116222) 6fcd19c: return not-null MODULE_CONTEXT data only for single content roots (IDEA-115422) 0af49e6: fix two psi elements per one ast element in stub-ast switch: psi1 is taken from stub psi2 is eagerly created during chameleon parsing another thread gets the ast when some psi1 parent is already switched and psi1 is not, it walks down the ast and gets psi2 fcfef16: remove big JI sign 2ad7bd2: support for <shortcut> cd74ff8: IDEA-116206 59b556f: set transparency 20% 152e772: fix missing help button b8f59ef: add getLanguage() method 25dece1: IDEA-110540 ("String concat (+) and super.toString()" template adds "+ super.toString()" even if no super) 35c07da: new inference: reject isExact for no constructor parameterized class 5fafbd5: EA-51725 - NPE: IntroduceVariableBase.replace 22cf8de: ignore anonymous classes when generating constructors EA-51713 - assert: CreateConstructorMatchingSuperFix$.run 1735391: getWidget method fcb4970: attempt to fix IDEA-116128 LiveEdit doesn't work correctly for JSP files 36e4932: continue "ability to return list of URLs" — isConfigurationFromContext d67f88c: Cleanup (formatting) 3112d12: reliably check if a task for debugger manager thread was interrupted 201c7b5: IDEA-75717 ("Referenced checked for null not used inside if" false positive) 795357c: do not suppress file-level inspections 4745efc: continue "ability to return list of URLs" IDEA-115787 43216f8: IDEA-115787 Better resolvement for JSF page URLs 2e6db86: IDEA-100279 ChooseComponentsToExportDialog 72ee12c: fix warning "mac file equals" 19576b2: overrides, cleanup 0a15306: IDEA-100279 git init b596340: IDEA-100279 xml editor location dialog 3c0f6cd: IDEA-100279 copyright plugin b7c6e4c: overrides e9e6eb2: 'Download library' refactored a little 946216e: IDEA-116197 (filter improvements) 9439744: EA-51425 - ISE: MavenUtil.resolveSuperPomFile add assertion. 9c38499: EA-51325 - assert: MavenIndices.createNewDir 9346755: don't log Connection reset by peer cfb11fa: cleanup 038e39d: IDEA-114461 Structure tool window: Jump to Source (F4) does not move focus to Editor ed4794e: VcsRootDetector and RootErrorsFinder tests updated c196ab3: Remove unnecessary check and param from HgRepositoryImpl b486fcb: template actions are now injection aware 773f5f0: IDEA-102454 Parameter Info: TAB/Shift-TAB and editing does not work in language injected fragment 3b34a0b: IDEA-49273 Injected language: parameter info tooltip disappears on moving caret 7afa57d: move indexer to indexing-impl 4ab17a0: don't shift text range if the element has no last child (PY-11344) 9e3bbe9: don't show "inspect test source" checkbox in PyCharm (PY-1187) ac7f1b2: IDEA-113483 (action fixed to select directories too) 7bd9931: Emmet: extract SurroundWithEmmetAction 625e81b: don't show "production" and "test" scopes in predefined scopes if current product doesn't support test source roots (PY-7324) f01a713: grouping by directory uses project-relative paths (PY-11176); rename the action from "Group by package" to "Group by directory" in platform-based IDEs be45c85: move GeneralFormatterTest to platform-tests; fix NPE in DocumentImpl when running standalone GeneralFormatterTest 4d22f5e: DirectoryIndex: don't include roots from content to projectExcludeRoots set, update projectExcludeRoots on VFS change 02f7305: Merge branch 'master' of git.labs.intellij.net:idea/community 7994da2: External System: test fix Related task: IDEA-79466 gradle support should generate web module configuration e3cfba1: IDEA-116126 - NoClassDefFound on attempt to deploy to heroku 630eacf: Merge remote-tracking branch 'origin/master' a902c4e: testdata fixed db0433c: fix NPE — final class variable is not yet initialized — we must not open connection until debug process class is not constructed. dd2d5f6: platform: ensure event file validity on dropping symlink target eaeed33: platform: better pairing of before/after VFS events 97aec30: Cleanup (formatting) 017646f: remove dead code, cleanup 2181005: more templates ab315c8: new project wizard: template description & count e789a57: External system: adding TEST_GENERATED source type to ExternalSystemSourceType 62eeca9: new project wizard: adding project templates 25e633c: SimpleColoredComponent: builder style 84c2eb6: ColoredListCellRenderer parameterized 3c567ba: cleanup ab15886: cleanup aaad70d: cleanup 81c7d30: update Key.findKeyByName usages due to API changes 41ca0a4: CCE aware API fe3700f: java call hierarchy extension 51c76a3: Make view meta model extendable e17daa4: unused methods with strange names deprecated 4910498: service replaced by utility methods d0fd16f: faster for simple cases 3dd6919: fix CSS completion tests: if the reference starts at completion start location, we do need to overwrite it when Tab is pressed 22c1ef9: Gradle: update to Gradle 1.9-rc-3 7a38323: Pty4j updated. 29ac873: IDEA-97390 Java Debugger: View Text action shows white on white [2] 1c329ac: Merge branch 'master' of git.labs.intellij.net:idea/community 0c60dd9: IDEA-86998 Evaluate expression mixes colorschemas when displaying injected code ce6fbd9: IDEA-97390 Java Debugger: View Text action shows white on white a50bd7e: Merge branch 'master' of git.labs.intellij.net:idea/community 8de20e2: remote servers - headers cleanup c5e1cf7: don't reformat mock variable during control flow building 8e11281: don't walk module src roots in search for .class file source (IDEA-116085) 992d740: cache expected names (IDEA-116085) 10976b3: walk library src roots once when searching for class sources (IDEA-116085) dfc71fc: fix java pull up refactoring! 4af2a83: Merge remote-tracking branch 'origin/master' a818922: javadoc: include in classpath only libraries from modules which participate in the scope (IDEA-116083) 38e2991: new inference: do not use nested call args to infer on the top level 465762a: new inference: reject multiple eq bounds d84a0a0: Darcula eats almost all EDT cpu time fe23143: IDEA-94922 (Report negatively named boolean variables and suggest to perform 'Invert Boolean' for them) f637ac6: fix description 9005acd: common "invert boolean" quickfix 9a5bfa9: add #loc's dd94fc6: fix "No dependencies provided which causes CachedValue to be never recalculated again." e4cce36: java.lang.IllegalThreadStateException additional handling 1249362: disposed check 0495c47: cleanup 25fc653: extra inspections 8850957: IDEA-101405 Call hierarchy support for Groovy 3026341: hierarchy package deb52f5: Flat & round stripe buttons (Internal Mode only) v.3, colors improvement d903511: IDEA-116139 Workaround NPE fix 8fccc30: avoid assertion on file path completion (EA-51068) fdb9f6e: ctrl+w shouldn't choke on unclosed argument lists (EA-51589) 1de20e6: don't inc modification counter on first load of gant/gradle settings 8a9c177: IDEA-25934 Maven: Webapp resources filtering store web resource configuration. 9553c1a: catch all exceptions that may influence VM attach process aa8a8e8: IDEA-116146 Search everywhere has small font in Presentation mode 9c7d5d5: #WEB-8915 fixed 5d96196: dfa: flush resource variables when leaving try block 15c0fd6: jsr166e.jar included into standalone jps distribution edbde43: generics: bounds check should stop expanding nested wildcards up to 2nd level d991c73: fix invalid file assertion aae4c5a: IDEA-116049 Mercurial log problem with Mac default locale (x_MacRoman) 08a6b0c: Unnecessary encoding argument in new hg log removed. 5cd75d1: style 5a365fd: fix BooleanParameterInspectionTest 4e2e6ca: [log] IDEA-115966 Show HAND cursor over branch arrows 7793ca6: [log] Collect user information from the whole log 4e8c466: [log] Completion in filter by user bc4c9f8: [log] intern VcsUsers. 0505705: [log] Encapsulate author & committer into VcsUser 1fb280e: [log] Let VcsLogObjectsFactory be project service & depend on VcsLogManager 2f2f008: Gradle: add Tooling API extra models support. Related task: IDEA-79466 gradle support should generate web module configuration 3c9aa6d: convert EventLogCategory to abstract class 0804cb1: html5 char entities for fragments 0e50db9: #IDEA-116106 fixed 483a5d1: enable entities validation for html5 #WEB-7053 fixed 962e050: generated entities for html 5 chars, use it in resolve and completion b57823a: Merge remote-tracking branch 'origin/master' da8e5d0: we must add "http://" prefix if specified path is not absolute 6bb2810: small lens mode fix 88caaf7: Merge remote-tracking branch 'origin/master' 4268072: IDEA-116125 extra gutter in presentation mode 6d03a86: Eliminated dependencies on pthread, glib rec mutex synchronization. A crash fixed. b5f05f4: Quick fix for not Unity window managers. Should be moved into linux-specific code. fe27876: WI-14476 When hovering over variable, Expression Evaluation tooltip disappears before I can click the + icon (cherry picked from commit 3034e98) 202e2ae: Cleanup (test) a5960af: java: no need to check package prefix for annotations on ref adjustment ab262e2: Cleanup (test) 5b2a86b: IDEA-89720 Preview usages: "select usages to preview" should be shown at the center of panel 7b82bf1: IDEA-116119 Darcula: links are hardly visible on warnings d2a2cd9: don't hide run configuration type if there are only one irrelevant type (IDEA-116046) 15e08d4: javadoc corrected 5575eb1: hide 'deploy to cloud' run configurations if corresponding cloud isn't configured (IDEA-116046) 3b3c221: WEB-9876 Fuzzy search is still colliding with completion 50bd840: Spock method should be a GrMethod. 5364513: exception-safe rendering 544a580: thread assertion fix bc4c101: fix NPEs 56940f1: a way to increase dismiss delay 9aee54e: framework version from existing library 37f430f: removing borders automatically 19a21fd: new "Non-varargs method overrides varargs method" inspection e82e54d: improve description 31fedec: New in 13 0fbffa1: fixed downloading client libraries from modal dialog (IDEA-115975) 5db09f5: CCE from android step fixed cded14f: IDEA-115064 New Project Wizard: Spring page looks bad: preselected frameworks e6b1f8e: fix NPE (request status) 8bba7c9: IDEA-115076 Groovy: New Project Wizard: IAE at DialogWrapperPeerFactoryImpl.createPeer() on 'Create Groovy Library' 5a47ef8: app server editor: don't show 'change version' button for app server library f510156: IDEA-115398 New Project Wizard: libraries downloading doesn't work 3d251be: event log category EP 7d76939: Take shortcuts for next tab and prev tabs from keymap. be19e2e: Next tab and Previous tab actions. 67310ba: Null class name tolerated db170d7: Fixed text shaking on tab name editing. bd3c4bc: Some cleanup. b27ba6e: IDEA-112596 SQL: MySQL uncomment doesn't work with "--" a67dac8: IDEA-115954 lens mode warning annotation bubbles overlap text on retina b6c179c: IDEA-93733 Double line above editor tabs 2c91f79: EA-51491 - assert: DocumentImpl.createRangeMarker 1743e7b: EA-51650 - assert: JavaDocInfoGenerator.getDocComment 16712b8: Todo f9d2c43: Cleanup (formatting) 38f058d: failing test for PY-10319 dd3f3fa: rename some methods and cleanup code to make logic clearer aa885ea: report missing identifier after 'as' (PY-9853) 52efcb5: only allow single expression after 'in'; tweak error recovery when waiting for colon (PY-9561) 7f8dc3d: change default match-from-start to false bfb1819: EA-51669 (unneeded augmentation avoided) b27e492: platform: extension point declaration moved to correct .xml 4d9e686: sourcemaps: ability to resolve sources relative to generated file 40e08dc: Fix the size changing of text field for terminal tabs. 62223eb: Merge remote-tracking branch 'origin/master' 6c84d33: take synchronized statements into account when mapping local variable names to slots 4e560b6: allow to view hidden items in 'New Run Configuration' popup (IDEA-116046) 37caefe: IDEA-72889 (CodeStyle inspection to check tabs instead of spaces in file) f345cfd: EA-51469: do not call GemManager.updateGemset(Module) with null e27287d: ShowSettingUtil: selecting configurable by class is fixed b9f0e95: new inference: infer recursively for conditional expression 646aea3: new inference: avoid self bounds when possible a2ad6fd: new inference: accept captured wildcard opening during subtype constraint reduction 66462d0: remove incorrect copyright messages c3c03a0: don't set default cursor if empty text is invisible 4f009e8: IDEA-115398 New Project Wizard: libraries downloading doesn't work 3607191: Merge remote-tracking branch 'origin/master' a95509a: extracted method to get/set 'for generated source' option via API 7b00b8f: hide Groovy run configuration if there are no groovy files in project (IDEA-116046) 89f2a76: Minor VFS optimization (cleanup) 0defb40: less spam in the logs when there's PSI/document inconsistency during reference search (IDEA-115950) 29427e7: added service to quickly find modules by module type; hide DevKit and J2ME run configurations if there are no corresponding modules (IDEA-116046) d031ebc: hide Python run configurations if they are irrelevant (IDEA-116046) 75ca45a: IDEA-116000 Error message shown if hg root marked as git e9b3a8c: style 24f91c2: IDEA-115474 Maven Dependency template broken in latest Idea Cardea 26b5659: added API to hide irrelevant run configuration types from 'New' popup in 'Edit Configurations' dialog (IDEA-116046) 5b6b259: Merge remote-tracking branch 'origin/master' 0525b10: Revert the change. 4f9d3f0: Disable formatter ranges in formatter off/on tags [CR-IC-2916] f760c44: IDEA-36685: Provide better 'no matching constructor' warnings where possible 915fb35a: new overload resolution: testdata 3546317: new overload resolution 971909a: method refs: exact tweaks f6932ac: Merge remote-tracking branch 'origin/master' c22e14c: JediTerm jar updated. 08eed1d: Merge remote-tracking branch 'origin/master' 5ff6e1a: Merge remote-tracking branch 'origin/master' feec183: Pty4j with debug info. 08c90e8: Minor VFS optimization 53a81a0: Cleanup (formatting) dc52633: EA-50578 - assert: TextRange.<init> b532d92: Merge remote-tracking branch 'origin/master' aa20e7d: status bar should have a height at least of an icon, even before any icons appear, to prevent unnecessary blinking (IDEA-114453) 1e0e31e: IDEA-112982 Status bar starts with bad layout before project is fully loaded default min height was 1 which made BoxLayout center-align everything along the top border resulting in 2x less memory indicator height 5fdc8f8: Merge branch 'svn_18_2' cc6dd17: svn: Fixed destroy for process under terminal 9826ae7: external system: EA-51656, check for disposable project components added 7337a62: external system: EA-51656, check for disposable project components added ea5159b: IDEA-116001 Incorrect behavior of root scanner in case non hg project marked as hg fixed 2186112: Merge remote-tracking branch 'origin/master' 9f02f7e: don't generate icons for IntelliJ laf 0f252a9: IDEA-90751 Scope tabs coloring does not affect hidden tabs pop-up ab0e88a: cleanup dead code 79bf40e: IDEA-114608 breakpoints dialog: add panel must be at top d9b94c5: new icons: vendors & sql structure view 5b4b9a7: svn: Do not read from error stream for process under terminal ca6a8ac: drop command wrapper 5617a42: use correct date format in command to fix reverting changes on file with a sticky date afbef4d: new inference: mark List::get as inexact 4fde439: EA-51621 - IOE: CheckUtil.checkWritable eb79b67: EA-51643 - assert: DataManagerImpl$MyDataContext.getData e1b69a4: new inference: exact method reference: decline constructor with parameter with type parameter of class 664ee85: improve parser recovery if keyword is used as function or class name (PY-8319) 5d6bac5: improve parser recovery if keyword is used as named parameter (PY-8318) ce1ff5d: if we have only one import candidate, show its name instead of "import this name" (PY-8067) 27c5fbb: Visual Studio keymap maps Shift+F1 to both QuickJavaDoc and ExternalJavaDoc (PY-7291) baaf551: rename file when renaming class if file name equals lowercased class name (PY-7155) f52709b: tweak decorator parsing so that following line comment is outside the text range of PyDecorator (PY-5912) a61112a: don't overwrite reference by Tab if it starts exactly after reference being completed (PY-6095) 12249d1: tab completion for keyword arguments overwrites the = sign (PY-1337( a351f53: highlight only the last line of string literal when triple quotes are unclosed (PY-1780); allow running StringLiteralQuotesAnnotator in dumb mode 1bf4336: consistent behavior of PyFunction.getContainingClass() in stub-based and non-stub-based cases (PY-1448) 36c20c2: fix caret position after pressing Enter in Python line comment e55c85f: fix HtmlCompletionTest.testDotTypeWhileActiveLookupInFileReference a3e89bc: IntelliLang PatternValidator: class parsing errors should not fail the build if the class is not going to be instrumented by the validator. Covered 2 more cases when this check was not performed (IDEA-115189 IntelliLang Pattern Validator: Class not found) 6f7b23e: Merge remote-tracking branch 'origin/master' c5d7ccd: Merge remote-tracking branch 'origin/master' 946d9ab: svn: terminal: Implemented handling of "unknown host" prompt for ssh f1e1ceb: IDEA-113191 Used "write" access to sqlite db and try to access db several times if failed b95367c: svn: Do not handle auth errors when command is finished if in terminal mode e306801: svn: terminal: Added separate logging for status command output (as there are some issues with terminal output parsing) f22a4ed: svn: terminal: Implemented cancelling authentication prompts 4e7c774: svn: terminal: Treat stdout lines with svn errors as stderr lines a48733d: svn: Fixed default focused element for credentials dialog opening (password is focused if username is disabled) aac45e5: svn: Implemented password prompts for ssh authentication through terminal b8768d1: svn: Implemented basic svn+ssh authentication using terminal (under svn.use.terminal registry key) 13a217b: svn: Refactored CommandExecutor - ability to write to process input stream, small changes for inheritors e9ccca6: svn: Moved setting "non-interactive" mode when command executor is created 4092ffa: svn: Added command logging in for non-zero exit code 8441324: Tab name length is limited by 50 in jediterm library. 1c63154: Use JB tabs in terminal(PY-10609). Pass disposable to terminal widget. 2ba2163: Extract method that sets content to the holder. 9c5a392: NPE (IDEA-115607). Change-Id: I83d19d7826b59dbc1d782247b78553b4632e7635
Diffstat (limited to 'xml')
-rw-r--r--xml/dom-impl/src/META-INF/DomPlugin.xml1
-rw-r--r--xml/dom-impl/src/com/intellij/util/xml/stubs/ElementStubSerializer.java8
-rw-r--r--xml/dom-impl/src/com/intellij/util/xml/stubs/index/DomNamespaceKeyIndex.java78
-rw-r--r--xml/dom-openapi/src/com/intellij/util/xml/AbstractConvertContext.java41
-rw-r--r--xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java10
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/SurroundWithEmmetAction.java83
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java7
-rw-r--r--xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java4
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java67
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java6
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/UrlImpl.java3
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/Urls.java15
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java55
-rw-r--r--xml/impl/src/com/intellij/javaee/EditLocationDialog.java53
-rw-r--r--xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java8
-rw-r--r--xml/openapi/src/com/intellij/ide/browsers/WebBrowserService.java10
-rw-r--r--xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java22
-rw-r--r--xml/relaxng/src/org/intellij/plugins/relaxNG/xml/RngHtml5SchemaProvider.java6
-rwxr-xr-xxml/relaxng/src/resources/html5-schema/html5charref.rb38
-rw-r--r--xml/relaxng/src/resources/html5-schema/html5chars.ent2050
-rw-r--r--xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java9
-rw-r--r--xml/xml-analysis-impl/src/com/intellij/xml/util/CheckDtdReferencesInspection.java51
-rw-r--r--xml/xml-psi-impl/resources/standardSchemas/plugin.dtd2
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlElementDescriptorImpl.java6
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlEntityRefImpl.java11
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/Html5SchemaProvider.java17
26 files changed, 2487 insertions, 174 deletions
diff --git a/xml/dom-impl/src/META-INF/DomPlugin.xml b/xml/dom-impl/src/META-INF/DomPlugin.xml
index 9fdaaedc89d8..00b15cbbccec 100644
--- a/xml/dom-impl/src/META-INF/DomPlugin.xml
+++ b/xml/dom-impl/src/META-INF/DomPlugin.xml
@@ -32,6 +32,7 @@
<filetype.stubBuilder filetype="XML" implementationClass="com.intellij.util.xml.stubs.builder.DomStubBuilder"/>
<stubElementTypeHolder class="com.intellij.util.xml.stubs.DomElementTypeHolder"/>
+ <stubIndex implementation="com.intellij.util.xml.stubs.index.DomNamespaceKeyIndex"/>
<applicationService serviceInterface="com.intellij.util.xml.impl.DomApplicationComponent"
serviceImplementation="com.intellij.util.xml.impl.DomApplicationComponent"/>
diff --git a/xml/dom-impl/src/com/intellij/util/xml/stubs/ElementStubSerializer.java b/xml/dom-impl/src/com/intellij/util/xml/stubs/ElementStubSerializer.java
index 5247af3833ea..d1522f523846 100644
--- a/xml/dom-impl/src/com/intellij/util/xml/stubs/ElementStubSerializer.java
+++ b/xml/dom-impl/src/com/intellij/util/xml/stubs/ElementStubSerializer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,10 +15,12 @@
*/
package com.intellij.util.xml.stubs;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.stubs.IndexSink;
import com.intellij.psi.stubs.ObjectStubSerializer;
import com.intellij.psi.stubs.StubInputStream;
import com.intellij.psi.stubs.StubOutputStream;
+import com.intellij.util.xml.stubs.index.DomNamespaceKeyIndex;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
@@ -46,6 +48,10 @@ public class ElementStubSerializer implements ObjectStubSerializer<ElementStub,
@Override
public void indexStub(@NotNull ElementStub stub, @NotNull IndexSink sink) {
+ final String namespaceKey = stub.getNamespaceKey();
+ if (StringUtil.isNotEmpty(namespaceKey)) {
+ sink.occurrence(DomNamespaceKeyIndex.KEY, namespaceKey);
+ }
}
@NotNull
diff --git a/xml/dom-impl/src/com/intellij/util/xml/stubs/index/DomNamespaceKeyIndex.java b/xml/dom-impl/src/com/intellij/util/xml/stubs/index/DomNamespaceKeyIndex.java
new file mode 100644
index 000000000000..b3528ba728bf
--- /dev/null
+++ b/xml/dom-impl/src/com/intellij/util/xml/stubs/index/DomNamespaceKeyIndex.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.util.xml.stubs.index;
+
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.openapi.vfs.VirtualFileWithId;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.psi.stubs.StringStubIndexExtension;
+import com.intellij.psi.stubs.StubIndex;
+import com.intellij.psi.stubs.StubIndexKey;
+import com.intellij.util.CommonProcessors;
+import com.intellij.util.indexing.IdFilter;
+import com.intellij.util.xml.DomFileElement;
+import org.jetbrains.annotations.NotNull;
+
+public class DomNamespaceKeyIndex extends StringStubIndexExtension<PsiFile> {
+
+ public static final StubIndexKey<String, PsiFile> KEY = StubIndexKey.createIndexKey("dom.namespaceKey");
+
+ private static final DomNamespaceKeyIndex ourInstance = new DomNamespaceKeyIndex();
+
+ public static DomNamespaceKeyIndex getInstance() {
+ return ourInstance;
+ }
+
+ public boolean hasStubElementsWithNamespaceKey(final DomFileElement domFileElement, final String namespaceKey) {
+ final VirtualFile file = domFileElement.getFile().getVirtualFile();
+ assert file instanceof VirtualFileWithId : file;
+
+ final int virtualFileId = ((VirtualFileWithId)file).getId();
+ CommonProcessors.FindFirstProcessor<String> processor =
+ new CommonProcessors.FindFirstProcessor<String>() {
+ @Override
+ protected boolean accept(String s) {
+ return namespaceKey.equals(s);
+ }
+ };
+ StubIndex.getInstance().processAllKeys(KEY, processor,
+ GlobalSearchScope.fileScope(domFileElement.getFile()),
+ new IdFilter() {
+ @Override
+ public boolean containsFileId(int id) {
+ return id == virtualFileId;
+ }
+ });
+ return processor.isFound();
+ }
+
+ @Override
+ public boolean traceKeyHashToVirtualFileMapping() {
+ return true;
+ }
+
+ @NotNull
+ @Override
+ public StubIndexKey<String, PsiFile> getKey() {
+ return KEY;
+ }
+
+ @Override
+ public int getVersion() {
+ return 0;
+ }
+}
diff --git a/xml/dom-openapi/src/com/intellij/util/xml/AbstractConvertContext.java b/xml/dom-openapi/src/com/intellij/util/xml/AbstractConvertContext.java
index f8f8e69853fd..fc7cbefea494 100644
--- a/xml/dom-openapi/src/com/intellij/util/xml/AbstractConvertContext.java
+++ b/xml/dom-openapi/src/com/intellij/util/xml/AbstractConvertContext.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@
package com.intellij.util.xml;
import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
+import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
@@ -52,7 +52,7 @@ public abstract class AbstractConvertContext extends ConvertContext {
final DomFileElement<DomElement> fileElement = DomUtil.getFileElement(getInvocationElement());
if (fileElement == null) {
final XmlElement xmlElement = getInvocationElement().getXmlElement();
- return xmlElement == null ? null : ModuleUtil.findModuleForPsiElement(xmlElement);
+ return xmlElement == null ? null : ModuleUtilCore.findModuleForPsiElement(xmlElement);
}
return fileElement.getRootElement().getModule();
}
@@ -65,7 +65,7 @@ public abstract class AbstractConvertContext extends ConvertContext {
public GlobalSearchScope getSearchScope() {
GlobalSearchScope scope = null;
- Module[] modules = getConvertContextModules(this);
+ Module[] modules = getConvertContextModules();
if (modules.length != 0) {
PsiFile file = getFile();
@@ -88,39 +88,14 @@ public abstract class AbstractConvertContext extends ConvertContext {
return scope; // ??? scope == null ? GlobalSearchScope.allScope(getProject()) : scope; ???
}
- public static GlobalSearchScope getSearchScope(@NotNull ConvertContext context) {
- Module[] modules = getConvertContextModules(context);
- if (modules.length == 0) return null;
-
- PsiFile file = context.getFile();
- file = file.getOriginalFile();
- VirtualFile virtualFile = file.getVirtualFile();
- if (virtualFile == null) return null;
- ProjectFileIndex fileIndex = ProjectRootManager.getInstance(file.getProject()).getFileIndex();
- boolean tests = fileIndex.isInTestSourceContent(virtualFile);
-
-
- GlobalSearchScope scope = null;
- for (Module module : modules) {
- if (scope == null) {
- scope = module.getModuleRuntimeScope(tests);
- }
- else {
- scope.union(module.getModuleRuntimeScope(tests));
- }
- }
- return scope;
- }
-
-
@NotNull
- private static Module[] getConvertContextModules(@NotNull ConvertContext context) {
- Module[] modules = ModuleContextProvider.getModules(context.getFile());
+ private Module[] getConvertContextModules() {
+ Module[] modules = ModuleContextProvider.getModules(getFile());
if (modules.length > 0) return modules;
- final Module module = context.getModule();
+ final Module module = getModule();
if (module != null) return new Module[]{module};
- return new Module[0];
+ return Module.EMPTY_ARRAY;
}
}
diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java
index bf87f35c9411..4249986cf002 100644
--- a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java
+++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionData.java
@@ -32,6 +32,7 @@ import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.*;
import com.intellij.util.ArrayUtil;
+import com.intellij.xml.Html5SchemaProvider;
import com.intellij.xml.XmlElementDescriptor;
import com.intellij.xml.XmlNSDescriptor;
import com.intellij.xml.util.HtmlUtil;
@@ -186,7 +187,7 @@ public class XmlCompletionData extends CompletionData {
try {
final int unicodeChar = Integer.valueOf(s).intValue();
- return LookupValueFactory.createLookupValueWithHint(name, null, new String(Character.toChars(unicodeChar)));
+ return LookupValueFactory.createLookupValueWithHint(name, null, String.valueOf((char)unicodeChar));
}
catch (NumberFormatException e) {
return null;
@@ -208,8 +209,9 @@ public class XmlCompletionData extends CompletionData {
descriptorFile = findDescriptorFile(tag, containingFile);
}
- boolean isHtml5 = false;
- if (tag == null || (isHtml5 = HtmlUtil.isHtml5Context(tag))) { // Html5 RNG does not have entities
+ if (HtmlUtil.isHtml5Context(tag)) {
+ descriptorFile = XmlUtil.findXmlFile(containingFile, Html5SchemaProvider.getCharsDtdLocation());
+ } else if (tag == null) {
final XmlDocument document = PsiTreeUtil.getParentOfType(context, XmlDocument.class);
if (document != null) {
@@ -218,7 +220,7 @@ public class XmlCompletionData extends CompletionData {
final FileType ft = containingFile.getFileType();
if(ft != StdFileTypes.XML) {
- final String namespace = ft == StdFileTypes.XHTML || ft == StdFileTypes.JSPX || isHtml5? XmlUtil.XHTML_URI:XmlUtil.HTML_URI;
+ final String namespace = ft == StdFileTypes.XHTML || ft == StdFileTypes.JSPX ? XmlUtil.XHTML_URI : XmlUtil.HTML_URI;
final XmlNSDescriptor nsDescriptor = document.getDefaultNSDescriptor(namespace, true);
if (nsDescriptor != null) {
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/SurroundWithEmmetAction.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/SurroundWithEmmetAction.java
new file mode 100644
index 000000000000..4ba881666bc1
--- /dev/null
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/SurroundWithEmmetAction.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.codeInsight.template.emmet;
+
+import com.intellij.application.options.emmet.EmmetOptions;
+import com.intellij.codeInsight.CodeInsightActionHandler;
+import com.intellij.codeInsight.actions.BaseCodeInsightAction;
+import com.intellij.codeInsight.hint.HintManager;
+import com.intellij.codeInsight.template.CustomTemplateCallback;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.SelectionModel;
+import com.intellij.openapi.fileEditor.FileDocumentManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.ReadonlyStatusHandler;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiDocumentManager;
+import com.intellij.psi.PsiFile;
+import org.jetbrains.annotations.NotNull;
+
+public class SurroundWithEmmetAction extends BaseCodeInsightAction {
+ public SurroundWithEmmetAction() {
+ setEnabledInModalContext(true);
+ }
+
+ @Override
+ protected boolean isValidForFile(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
+ return EmmetOptions.getInstance().isEmmetEnabled() && new ZenCodingTemplate().isApplicable(file, editor.getCaretModel().getOffset(), true);
+ }
+
+ @NotNull
+ @Override
+ protected CodeInsightActionHandler getHandler() {
+ return new SurroundWithEmmetHandler();
+ }
+
+ private static class SurroundWithEmmetHandler implements CodeInsightActionHandler {
+ @Override
+ public void invoke(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
+ SelectionModel selectionModel = editor.getSelectionModel();
+ if (!selectionModel.hasSelection() && !selectionModel.hasBlockSelection()) {
+ selectionModel.selectLineAtCaret();
+ }
+
+ final Document document = editor.getDocument();
+ final VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
+ if (virtualFile != null) {
+ ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(virtualFile);
+ }
+
+ String selection = editor.getSelectionModel().getSelectedText();
+
+ final ZenCodingTemplate template = new ZenCodingTemplate();
+ if (selection != null && template.isApplicable(file, editor.getCaretModel().getOffset(), true)) {
+ selection = selection.trim();
+ PsiDocumentManager.getInstance(project).commitAllDocuments();
+ template.wrap(selection, new CustomTemplateCallback(editor, file, true));
+ }
+ else if (!ApplicationManager.getApplication().isUnitTestMode()) {
+ HintManager.getInstance().showErrorHint(editor, "Cannot invoke Surround with Emmet in the current context");
+ }
+ }
+
+ @Override
+ public boolean startInWriteAction() {
+ return true;
+ }
+ }
+}
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java
index 236743c901a1..a80b08d9d972 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java
@@ -381,6 +381,13 @@ public class ZenCodingTemplate implements CustomLiveTemplate {
return applicableGenerator != null && applicableGenerator.isEnabled();
}
+ @Override
+ public boolean hasCompletionItem(@NotNull PsiFile file, int offset) {
+ PsiElement element = CustomTemplateCallback.getContext(file, offset);
+ final ZenCodingGenerator applicableGenerator = findApplicableDefaultGenerator(element, false);
+ return applicableGenerator != null && applicableGenerator.isEnabled() && applicableGenerator.hasCompletionItem();
+ }
+
public static void doWrap(final String selection, final String abbreviation, final CustomTemplateCallback callback) {
final ZenCodingGenerator defaultGenerator = findApplicableDefaultGenerator(callback.getContext(), true);
assert defaultGenerator != null;
diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java
index 5c23ba994e84..1965bf1e0470 100644
--- a/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java
+++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/generators/ZenCodingGenerator.java
@@ -179,4 +179,8 @@ public abstract class ZenCodingGenerator {
public UnnamedConfigurable createConfigurable() {
return null;
}
+
+ public boolean hasCompletionItem() {
+ return false;
+ }
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java
index 7e822817a44e..92f5abf20591 100644
--- a/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java
+++ b/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java
@@ -15,7 +15,7 @@
*/
package com.intellij.ide.browsers;
-import com.intellij.ide.BrowserUtil;
+import com.intellij.icons.AllIcons;
import com.intellij.ide.GeneralSettings;
import com.intellij.ide.browsers.impl.WebBrowserServiceImpl;
import com.intellij.openapi.actionSystem.*;
@@ -23,13 +23,23 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.ui.popup.JBPopupFactory;
+import com.intellij.openapi.util.AsyncResult;
import com.intellij.openapi.util.Pair;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightVirtualFile;
+import com.intellij.ui.ColoredListCellRenderer;
+import com.intellij.ui.components.JBList;
+import com.intellij.util.Consumer;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.xml.XmlBundle;
import com.intellij.xml.util.HtmlUtil;
+import org.jetbrains.annotations.NotNull;
+import javax.swing.*;
import java.awt.event.InputEvent;
+import java.util.Set;
public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
private static final Logger LOG = Logger.getInstance(OpenFileInDefaultBrowserAction.class);
@@ -46,7 +56,7 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
return;
}
- Pair<WebBrowserUrlProvider, Url> browserUrlProvider = WebBrowserServiceImpl.getProvider(file);
+ Pair<WebBrowserUrlProvider, Set<Url>> browserUrlProvider = WebBrowserServiceImpl.getProvider(file);
final boolean isHtmlFile = HtmlUtil.isHtmlFile(file);
if (browserUrlProvider == null) {
if (file.getVirtualFile() instanceof LightVirtualFile) {
@@ -102,15 +112,20 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
PsiFile psiFile = CommonDataKeys.PSI_FILE.getData(dataContext);
LOG.assertTrue(psiFile != null);
InputEvent event = e.getInputEvent();
- doOpen(psiFile, event != null && event.isShiftDown());
+ doOpen(psiFile, event != null && event.isShiftDown(), null);
}
- static void doOpen(PsiFile psiFile, boolean preferLocalUrl) {
+ public static void doOpen(PsiElement psiFile, boolean preferLocalUrl, final WebBrowser browser) {
try {
- Url url = WebBrowserService.getInstance().getUrlToOpen(psiFile, preferLocalUrl);
- if (url != null) {
- ApplicationManager.getApplication().saveAll();
- BrowserUtil.launchBrowser(url.toExternalForm());
+ Set<Url> urls = WebBrowserService.getInstance().getUrlToOpen(psiFile, preferLocalUrl);
+ if (!urls.isEmpty()) {
+ chooseUrl(urls).doWhenDone(new Consumer<Url>() {
+ @Override
+ public void consume(Url url) {
+ ApplicationManager.getApplication().saveAll();
+ UrlOpener.launchBrowser(url.toExternalForm(), browser);
+ }
+ });
}
}
catch (WebBrowserUrlProvider.BrowserException e1) {
@@ -120,4 +135,40 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
LOG.error(e1);
}
}
+
+ @NotNull
+ private static AsyncResult<Url> chooseUrl(Set<Url> urls) {
+ if (urls.size() == 1) {
+ return new AsyncResult.Done<Url>(ContainerUtil.getFirstItem(urls));
+ }
+
+ final JBList list = new JBList(urls);
+ list.setCellRenderer(new ColoredListCellRenderer() {
+ @Override
+ protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) {
+ // todo icons looks good, but is it really suitable for all URLs providers?
+ setIcon(AllIcons.Nodes.Servlet);
+ append(((Url)value).getPath());
+ }
+ });
+
+ final AsyncResult<Url> result = new AsyncResult<Url>();
+ JBPopupFactory.getInstance().
+ createListPopupBuilder(list).
+ setTitle("Choose Url").
+ setItemChoosenCallback(new Runnable() {
+ @Override
+ public void run() {
+ Url value = (Url)list.getSelectedValue();
+ if (value != null) {
+ result.setDone(value);
+ }
+ else {
+ result.setRejected();
+ }
+ }
+ }).
+ createPopup().showInFocusCenter();
+ return result;
+ }
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java b/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java
index 3114bb80d97b..55ceeeb5e977 100644
--- a/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java
+++ b/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java
@@ -27,6 +27,8 @@ import com.intellij.testFramework.LightVirtualFile;
import com.intellij.xml.XmlBundle;
import com.intellij.xml.util.HtmlUtil;
+import java.util.Set;
+
class SelectInDefaultBrowserTarget extends SelectInTargetBase {
private static final Logger LOG = Logger.getInstance(SelectInDefaultBrowserTarget.class);
@@ -44,7 +46,7 @@ class SelectInDefaultBrowserTarget extends SelectInTargetBase {
return false;
}
- Pair<WebBrowserUrlProvider, Url> browserUrlProvider = WebBrowserServiceImpl.getProvider(file);
+ Pair<WebBrowserUrlProvider, Set<Url>> browserUrlProvider = WebBrowserServiceImpl.getProvider(file);
currentName = XmlBundle.message("browser.select.in.default.name");
if (browserUrlProvider == null) {
return HtmlUtil.isHtmlFile(file) && !(file.getVirtualFile() instanceof LightVirtualFile);
@@ -69,7 +71,7 @@ class SelectInDefaultBrowserTarget extends SelectInTargetBase {
LOG.assertTrue(psiElement != null);
PsiFile psiFile = psiElement.getContainingFile();
LOG.assertTrue(psiFile != null);
- OpenFileInDefaultBrowserAction.doOpen(psiFile, false);
+ OpenFileInDefaultBrowserAction.doOpen(psiFile, false, null);
}
@Override
diff --git a/xml/impl/src/com/intellij/ide/browsers/UrlImpl.java b/xml/impl/src/com/intellij/ide/browsers/UrlImpl.java
index 936cda3bb505..3523ad9bd172 100644
--- a/xml/impl/src/com/intellij/ide/browsers/UrlImpl.java
+++ b/xml/impl/src/com/intellij/ide/browsers/UrlImpl.java
@@ -169,6 +169,9 @@ public final class UrlImpl implements Url {
return true;
}
if (!(o instanceof UrlImpl)) {
+ if (o instanceof LocalFileUrl && isInLocalFileSystem()) {
+ return o.getPath().equals(path);
+ }
return false;
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/Urls.java b/xml/impl/src/com/intellij/ide/browsers/Urls.java
index 763204d24a23..cd40599b7a01 100644
--- a/xml/impl/src/com/intellij/ide/browsers/Urls.java
+++ b/xml/impl/src/com/intellij/ide/browsers/Urls.java
@@ -120,12 +120,23 @@ public final class Urls {
// must not be used in NodeJS
public static Url newFromVirtualFile(@NotNull VirtualFile file) {
- String path = file.getPath();
if (file.isInLocalFileSystem()) {
- return new UrlImpl(file.getFileSystem().getProtocol(), null, path);
+ return new UrlImpl(file.getFileSystem().getProtocol(), null, file.getPath());
}
else {
return parseUrl(file.getUrl(), false);
}
}
+
+ public static boolean equalsIgnoreParameters(@NotNull Url url, @NotNull VirtualFile file) {
+ if (file.isInLocalFileSystem()) {
+ return url.isInLocalFileSystem() && url.getPath().equals(file.getPath());
+ }
+ else if (url.isInLocalFileSystem()) {
+ return false;
+ }
+
+ Url fileUrl = parseUrl(file.getUrl(), false);
+ return fileUrl != null && fileUrl.equalsIgnoreParameters(url);
+ }
} \ No newline at end of file
diff --git a/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java b/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
index 4541caf9f483..af7eb2e28278 100644
--- a/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
+++ b/xml/impl/src/com/intellij/ide/browsers/impl/WebBrowserServiceImpl.java
@@ -27,10 +27,14 @@ import com.intellij.openapi.vfs.impl.http.HttpVirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightVirtualFile;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.xml.util.HtmlUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Collections;
+import java.util.Set;
+
public class WebBrowserServiceImpl extends WebBrowserService {
@Override
public boolean canOpenInBrowser(@NotNull PsiElement psiElement) {
@@ -40,32 +44,32 @@ public class WebBrowserServiceImpl extends WebBrowserService {
((HtmlUtil.isHtmlFile(psiFile) && !(virtualFile instanceof LightVirtualFile)) || getProvider(psiElement, psiFile) != null);
}
+ @NotNull
@Override
- @Nullable
- public Url getUrlToOpen(@NotNull PsiElement psiElement, boolean preferLocalUrl) throws WebBrowserUrlProvider.BrowserException {
+ public Set<Url> getUrlToOpen(@NotNull PsiElement psiElement, boolean preferLocalUrl) throws WebBrowserUrlProvider.BrowserException {
final PsiFile psiFile = psiElement instanceof PsiFile ? (PsiFile)psiElement : psiElement.getContainingFile();
if (psiFile == null) {
- return null;
+ return Collections.emptySet();
}
VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile == null) {
- return null;
+ return Collections.emptySet();
}
if (virtualFile instanceof HttpVirtualFile) {
- return Urls.newFromVirtualFile(virtualFile);
+ return Collections.singleton(Urls.newFromVirtualFile(virtualFile));
}
if (!(preferLocalUrl && HtmlUtil.isHtmlFile(psiFile))) {
- Pair<WebBrowserUrlProvider, Url> provider = getProvider(psiElement);
+ Pair<WebBrowserUrlProvider, Set<Url>> provider = getProvider(psiElement);
if (provider != null) {
if (provider.second != null) {
return provider.second;
}
try {
- Url url = provider.first.getUrl(psiElement, psiFile, virtualFile);
- if (url != null) {
- return url;
+ Set<Url> urls = provider.first.getUrls(psiElement, psiFile, virtualFile);
+ if (!urls.isEmpty()) {
+ return urls;
}
}
catch (WebBrowserUrlProvider.BrowserException e) {
@@ -75,28 +79,17 @@ public class WebBrowserServiceImpl extends WebBrowserService {
}
}
}
- return virtualFile instanceof LightVirtualFile ? null : Urls.newFromVirtualFile(virtualFile);
+ return virtualFile instanceof LightVirtualFile ? Collections.<Url>emptySet() : Collections.singleton(Urls.newFromVirtualFile(virtualFile));
}
- @Override
@Nullable
- public Url getUrlToOpen(@NotNull PsiElement psiElement) {
- try {
- return getUrlToOpen(psiElement, false);
- }
- catch (WebBrowserUrlProvider.BrowserException ignored) {
- return null;
- }
- }
-
- @Nullable
- public static Pair<WebBrowserUrlProvider, Url> getProvider(@Nullable PsiElement element) {
+ public static Pair<WebBrowserUrlProvider, Set<Url>> getProvider(@Nullable PsiElement element) {
PsiFile psiFile = element == null ? null : element.getContainingFile();
return psiFile == null ? null : getProvider(element, psiFile);
}
- private static Pair<WebBrowserUrlProvider, Url> getProvider(PsiElement element, PsiFile psiFile) {
- Ref<Url> result = Ref.create();
+ private static Pair<WebBrowserUrlProvider, Set<Url>> getProvider(PsiElement element, PsiFile psiFile) {
+ Ref<Set<Url>> result = Ref.create();
DumbService dumbService = DumbService.getInstance(element.getProject());
for (WebBrowserUrlProvider urlProvider : WebBrowserUrlProvider.EP_NAME.getExtensions()) {
if ((!dumbService.isDumb() || DumbService.isDumbAware(urlProvider)) && urlProvider.canHandleElement(element, psiFile, result)) {
@@ -113,8 +106,15 @@ public class WebBrowserServiceImpl extends WebBrowserService {
return null;
}
- Url url = WebBrowserService.getInstance().getUrlToOpen(sourceElement);
- if (url == null) {
+ Url url;
+ try {
+ Set<Url> urls = WebBrowserService.getInstance().getUrlToOpen(sourceElement, false);
+ url = ContainerUtil.getFirstItem(urls);
+ if (url == null) {
+ return null;
+ }
+ }
+ catch (WebBrowserUrlProvider.BrowserException ignored) {
return null;
}
@@ -123,7 +123,6 @@ public class WebBrowserServiceImpl extends WebBrowserService {
return null;
}
- boolean isRemote = !url.isInLocalFileSystem();
- return isRemote || HtmlUtil.isHtmlFile(virtualFile) ? url : null;
+ return !url.isInLocalFileSystem() || HtmlUtil.isHtmlFile(virtualFile) ? url : null;
}
}
diff --git a/xml/impl/src/com/intellij/javaee/EditLocationDialog.java b/xml/impl/src/com/intellij/javaee/EditLocationDialog.java
index 443e0d6c42c8..a07d23213227 100644
--- a/xml/impl/src/com/intellij/javaee/EditLocationDialog.java
+++ b/xml/impl/src/com/intellij/javaee/EditLocationDialog.java
@@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.util.Consumer;
import com.intellij.xml.XmlBundle;
import javax.swing.*;
@@ -63,54 +64,53 @@ public class EditLocationDialog extends DialogWrapper {
init();
}
+ @Override
protected JComponent createCenterPanel() {
JPanel panel = new JPanel(new GridBagLayout());
panel.add(
- new JLabel(myName),
- new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 3, 5), 0, 0)
+ new JLabel(myName),
+ new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 3, 5), 0, 0)
);
panel.add(
- myTfUrl,
- new GridBagConstraints(0, 1, 2, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5), 0, 0)
+ myTfUrl,
+ new GridBagConstraints(0, 1, 2, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 5, 5), 0, 0)
);
myTfUrl.setPreferredSize(new Dimension(350, myTfUrl.getPreferredSize().height));
- if (myShowPath) {
+ if (myShowPath) {
panel.add(
- new JLabel(myLocation),
- new GridBagConstraints(0, 2, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 3, 5), 0, 0)
+ new JLabel(myLocation),
+ new GridBagConstraints(0, 2, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 3, 5), 0, 0)
);
panel.add(
- myTfPath,
- new GridBagConstraints(0, 3, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 10, 0), 0, 0)
+ myTfPath,
+ new GridBagConstraints(0, 3, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 5, 10, 0), 0, 0)
);
panel.add(
- myBtnBrowseLocalPath,
- new GridBagConstraints(1, 3, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 10, 5), 0, 0)
+ myBtnBrowseLocalPath,
+ new GridBagConstraints(1, 3, 1, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 10, 5), 0, 0)
);
- //
- TextFieldWithBrowseButton.MyDoClickAction.addTo(myBtnBrowseLocalPath, myTfPath);
- myBtnBrowseLocalPath.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent ignored) {
- FileChooserDescriptor descriptor = getChooserDescriptor();
- VirtualFile file = FileChooser.chooseFile(descriptor, myProject, null);
- if (file != null) {
- myTfPath.setText(file.getPath().replace('/', File.separatorChar));
- }
+ TextFieldWithBrowseButton.MyDoClickAction.addTo(myBtnBrowseLocalPath, myTfPath);
+ myBtnBrowseLocalPath.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ignored) {
+ FileChooserDescriptor descriptor = getChooserDescriptor();
+ FileChooser.chooseFile(descriptor, myProject, null, new Consumer<VirtualFile>() {
+ @Override
+ public void consume(VirtualFile file) {
+ myTfPath.setText(file.getPath().replace('/', File.separatorChar));
}
- }
- );
+ });
+ }
+ });
}
-
- //
-
return panel;
}
+ @Override
public JComponent getPreferredFocusedComponent() {
return myTfUrl;
}
@@ -125,6 +125,7 @@ public class EditLocationDialog extends DialogWrapper {
return new FileChooserDescriptor(true, false, false, false, true, false);
}
+ @Override
protected void init() {
setTitle(myTitle);
myTfUrl = new JTextField();
diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java
index 1c6ddd4482b4..714d305f969b 100644
--- a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java
+++ b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.impl.source.xml;
+import com.intellij.codeInsight.completion.PrioritizedLookupElement;
import com.intellij.codeInsight.completion.XmlTagInsertHandler;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
@@ -69,11 +70,10 @@ public class DefaultXmlTagNameProvider implements XmlTagNameProvider {
lookupElement = lookupElement.withIcon(((PsiPresentableMetaData)descriptor).getIcon());
}
if (xmlExtension.useXmlTagInsertHandler()) {
- elements.add(lookupElement.withInsertHandler(XmlTagInsertHandler.INSTANCE));
- }
- else {
- elements.add(lookupElement);
+ lookupElement = lookupElement.withInsertHandler(XmlTagInsertHandler.INSTANCE);
}
+
+ elements.add(PrioritizedLookupElement.withPriority(lookupElement, separator > 0 ? 0 : 1));
}
}
diff --git a/xml/openapi/src/com/intellij/ide/browsers/WebBrowserService.java b/xml/openapi/src/com/intellij/ide/browsers/WebBrowserService.java
index a6acf587633c..267cfd013fba 100644
--- a/xml/openapi/src/com/intellij/ide/browsers/WebBrowserService.java
+++ b/xml/openapi/src/com/intellij/ide/browsers/WebBrowserService.java
@@ -18,7 +18,8 @@ package com.intellij.ide.browsers;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
+
+import java.util.Set;
public abstract class WebBrowserService {
public static WebBrowserService getInstance() {
@@ -27,9 +28,6 @@ public abstract class WebBrowserService {
public abstract boolean canOpenInBrowser(@NotNull PsiElement psiElement);
- @Nullable
- public abstract Url getUrlToOpen(@NotNull PsiElement psiElement);
-
- @Nullable
- public abstract Url getUrlToOpen(@NotNull PsiElement psiElement, boolean preferLocalUrl) throws WebBrowserUrlProvider.BrowserException;
+ @NotNull
+ public abstract Set<Url> getUrlToOpen(@NotNull PsiElement psiElement, boolean preferLocalUrl) throws WebBrowserUrlProvider.BrowserException;
} \ No newline at end of file
diff --git a/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java b/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java
index 2bdf78c50732..e0d0c85713b6 100644
--- a/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java
+++ b/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java
@@ -23,11 +23,14 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Collections;
+import java.util.Set;
+
public abstract class WebBrowserUrlProvider {
public static ExtensionPointName<WebBrowserUrlProvider> EP_NAME = ExtensionPointName.create("com.intellij.webBrowserUrlProvider");
/**
- * Browser exceptions are printed in Error Dialog when user presses any browser button.
+ * Browser exceptions are printed in Error Dialog when user presses any browser button
*/
public static class BrowserException extends Exception {
public BrowserException(final String message) {
@@ -35,16 +38,16 @@ public abstract class WebBrowserUrlProvider {
}
}
- public boolean canHandleElement(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull Ref<Url> result) {
+ public boolean canHandleElement(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull Ref<Set<Url>> result) {
VirtualFile file = psiFile.getVirtualFile();
if (file == null) {
return false;
}
try {
- Url url = getUrl(element, psiFile, file);
- if (url != null) {
- result.set(url);
+ Set<Url> urls = getUrls(element, psiFile, file);
+ if (!urls.isEmpty()) {
+ result.set(urls);
return true;
}
}
@@ -55,7 +58,14 @@ public abstract class WebBrowserUrlProvider {
}
@Nullable
- public abstract Url getUrl(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull VirtualFile virtualFile) throws BrowserException;
+ protected Url getUrl(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull VirtualFile virtualFile) throws BrowserException {
+ return null;
+ }
+
+ public Set<Url> getUrls(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull VirtualFile virtualFile) throws BrowserException {
+ Url url = getUrl(element, psiFile, virtualFile);
+ return url == null ? Collections.<Url>emptySet() : Collections.singleton(url);
+ }
@Nullable
public String getOpenInBrowserActionText(@NotNull PsiFile file) {
diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/xml/RngHtml5SchemaProvider.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/xml/RngHtml5SchemaProvider.java
index e86e5328481b..d59cd9035f7b 100644
--- a/xml/relaxng/src/org/intellij/plugins/relaxNG/xml/RngHtml5SchemaProvider.java
+++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/xml/RngHtml5SchemaProvider.java
@@ -20,4 +20,10 @@ public class RngHtml5SchemaProvider extends Html5SchemaProvider {
public URL getXhtmlSchemaLocation() {
return RngHtml5SchemaProvider.class.getResource("/resources/html5-schema/xhtml5.rnc");
}
+
+ @NotNull
+ @Override
+ public URL getCharsLocation() {
+ return RngHtml5SchemaProvider.class.getResource("/resources/html5-schema/html5chars.ent");
+ }
}
diff --git a/xml/relaxng/src/resources/html5-schema/html5charref.rb b/xml/relaxng/src/resources/html5-schema/html5charref.rb
new file mode 100755
index 000000000000..b5850d6ece72
--- /dev/null
+++ b/xml/relaxng/src/resources/html5-schema/html5charref.rb
@@ -0,0 +1,38 @@
+#! /usr/bin/env ruby
+CHAR_REFS_URL = 'http://dev.w3.org/html5/html-author/charref'
+refs = `curl #{CHAR_REFS_URL}`
+
+header = <<header
+<!--
+ * Copyright 2000-#{Time.now.year} JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!-- It's an automatically generated code. Do not modify it. -->
+<!-- Please see #{CHAR_REFS_URL} and #{$0} -->
+
+header
+
+body = ""
+refs.scan(/<td class="named"><code>&amp;((\w|; &amp;)+);\<\/code><td class="hex"><code>&amp;(#([^;])*);<\/code><td class="dec"><code>&amp;(#([^;])*);<\/code>/) do | match |
+ $1.split("; &amp;").each do | name |
+ body = body + " <!ENTITY #{name} \"&#{$5};\" >\n"
+ end
+end
+
+
+footer = <<footer
+footer
+
+puts header + body + footer \ No newline at end of file
diff --git a/xml/relaxng/src/resources/html5-schema/html5chars.ent b/xml/relaxng/src/resources/html5-schema/html5chars.ent
new file mode 100644
index 000000000000..419a0e6a83a0
--- /dev/null
+++ b/xml/relaxng/src/resources/html5-schema/html5chars.ent
@@ -0,0 +1,2050 @@
+<!--
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!-- It's an automatically generated code. Do not modify it. -->
+<!-- Please see http://dev.w3.org/html5/html-author/charref and ./html5charref.rb -->
+
+ <!ENTITY Tab "&#9;" >
+ <!ENTITY NewLine "&#10;" >
+ <!ENTITY excl "&#33;" >
+ <!ENTITY quot "&#34;" >
+ <!ENTITY QUOT "&#34;" >
+ <!ENTITY num "&#35;" >
+ <!ENTITY dollar "&#36;" >
+ <!ENTITY percnt "&#37;" >
+ <!ENTITY amp "&#38;" >
+ <!ENTITY AMP "&#38;" >
+ <!ENTITY apos "&#39;" >
+ <!ENTITY lpar "&#40;" >
+ <!ENTITY rpar "&#41;" >
+ <!ENTITY ast "&#42;" >
+ <!ENTITY midast "&#42;" >
+ <!ENTITY plus "&#43;" >
+ <!ENTITY comma "&#44;" >
+ <!ENTITY period "&#46;" >
+ <!ENTITY sol "&#47;" >
+ <!ENTITY colon "&#58;" >
+ <!ENTITY semi "&#59;" >
+ <!ENTITY lt "&#60;" >
+ <!ENTITY LT "&#60;" >
+ <!ENTITY equals "&#61;" >
+ <!ENTITY gt "&#62;" >
+ <!ENTITY GT "&#62;" >
+ <!ENTITY quest "&#63;" >
+ <!ENTITY commat "&#64;" >
+ <!ENTITY lsqb "&#91;" >
+ <!ENTITY lbrack "&#91;" >
+ <!ENTITY bsol "&#92;" >
+ <!ENTITY rsqb "&#93;" >
+ <!ENTITY rbrack "&#93;" >
+ <!ENTITY Hat "&#94;" >
+ <!ENTITY lowbar "&#95;" >
+ <!ENTITY grave "&#96;" >
+ <!ENTITY DiacriticalGrave "&#96;" >
+ <!ENTITY lcub "&#123;" >
+ <!ENTITY lbrace "&#123;" >
+ <!ENTITY verbar "&#124;" >
+ <!ENTITY vert "&#124;" >
+ <!ENTITY VerticalLine "&#124;" >
+ <!ENTITY rcub "&#125;" >
+ <!ENTITY rbrace "&#125;" >
+ <!ENTITY nbsp "&#160;" >
+ <!ENTITY NonBreakingSpace "&#160;" >
+ <!ENTITY iexcl "&#161;" >
+ <!ENTITY cent "&#162;" >
+ <!ENTITY pound "&#163;" >
+ <!ENTITY curren "&#164;" >
+ <!ENTITY yen "&#165;" >
+ <!ENTITY brvbar "&#166;" >
+ <!ENTITY sect "&#167;" >
+ <!ENTITY Dot "&#168;" >
+ <!ENTITY die "&#168;" >
+ <!ENTITY DoubleDot "&#168;" >
+ <!ENTITY uml "&#168;" >
+ <!ENTITY copy "&#169;" >
+ <!ENTITY COPY "&#169;" >
+ <!ENTITY ordf "&#170;" >
+ <!ENTITY laquo "&#171;" >
+ <!ENTITY not "&#172;" >
+ <!ENTITY shy "&#173;" >
+ <!ENTITY reg "&#174;" >
+ <!ENTITY circledR "&#174;" >
+ <!ENTITY REG "&#174;" >
+ <!ENTITY macr "&#175;" >
+ <!ENTITY OverBar "&#175;" >
+ <!ENTITY strns "&#175;" >
+ <!ENTITY deg "&#176;" >
+ <!ENTITY plusmn "&#177;" >
+ <!ENTITY pm "&#177;" >
+ <!ENTITY PlusMinus "&#177;" >
+ <!ENTITY sup2 "&#178;" >
+ <!ENTITY sup3 "&#179;" >
+ <!ENTITY acute "&#180;" >
+ <!ENTITY DiacriticalAcute "&#180;" >
+ <!ENTITY micro "&#181;" >
+ <!ENTITY para "&#182;" >
+ <!ENTITY middot "&#183;" >
+ <!ENTITY centerdot "&#183;" >
+ <!ENTITY CenterDot "&#183;" >
+ <!ENTITY cedil "&#184;" >
+ <!ENTITY Cedilla "&#184;" >
+ <!ENTITY sup1 "&#185;" >
+ <!ENTITY ordm "&#186;" >
+ <!ENTITY raquo "&#187;" >
+ <!ENTITY frac14 "&#188;" >
+ <!ENTITY frac12 "&#189;" >
+ <!ENTITY half "&#189;" >
+ <!ENTITY frac34 "&#190;" >
+ <!ENTITY iquest "&#191;" >
+ <!ENTITY Agrave "&#192;" >
+ <!ENTITY Aacute "&#193;" >
+ <!ENTITY Acirc "&#194;" >
+ <!ENTITY Atilde "&#195;" >
+ <!ENTITY Auml "&#196;" >
+ <!ENTITY Aring "&#197;" >
+ <!ENTITY AElig "&#198;" >
+ <!ENTITY Ccedil "&#199;" >
+ <!ENTITY Egrave "&#200;" >
+ <!ENTITY Eacute "&#201;" >
+ <!ENTITY Ecirc "&#202;" >
+ <!ENTITY Euml "&#203;" >
+ <!ENTITY Igrave "&#204;" >
+ <!ENTITY Iacute "&#205;" >
+ <!ENTITY Icirc "&#206;" >
+ <!ENTITY Iuml "&#207;" >
+ <!ENTITY ETH "&#208;" >
+ <!ENTITY Ntilde "&#209;" >
+ <!ENTITY Ograve "&#210;" >
+ <!ENTITY Oacute "&#211;" >
+ <!ENTITY Ocirc "&#212;" >
+ <!ENTITY Otilde "&#213;" >
+ <!ENTITY Ouml "&#214;" >
+ <!ENTITY times "&#215;" >
+ <!ENTITY Oslash "&#216;" >
+ <!ENTITY Ugrave "&#217;" >
+ <!ENTITY Uacute "&#218;" >
+ <!ENTITY Ucirc "&#219;" >
+ <!ENTITY Uuml "&#220;" >
+ <!ENTITY Yacute "&#221;" >
+ <!ENTITY THORN "&#222;" >
+ <!ENTITY szlig "&#223;" >
+ <!ENTITY agrave "&#224;" >
+ <!ENTITY aacute "&#225;" >
+ <!ENTITY acirc "&#226;" >
+ <!ENTITY atilde "&#227;" >
+ <!ENTITY auml "&#228;" >
+ <!ENTITY aring "&#229;" >
+ <!ENTITY aelig "&#230;" >
+ <!ENTITY ccedil "&#231;" >
+ <!ENTITY egrave "&#232;" >
+ <!ENTITY eacute "&#233;" >
+ <!ENTITY ecirc "&#234;" >
+ <!ENTITY euml "&#235;" >
+ <!ENTITY igrave "&#236;" >
+ <!ENTITY iacute "&#237;" >
+ <!ENTITY icirc "&#238;" >
+ <!ENTITY iuml "&#239;" >
+ <!ENTITY eth "&#240;" >
+ <!ENTITY ntilde "&#241;" >
+ <!ENTITY ograve "&#242;" >
+ <!ENTITY oacute "&#243;" >
+ <!ENTITY ocirc "&#244;" >
+ <!ENTITY otilde "&#245;" >
+ <!ENTITY ouml "&#246;" >
+ <!ENTITY divide "&#247;" >
+ <!ENTITY div "&#247;" >
+ <!ENTITY oslash "&#248;" >
+ <!ENTITY ugrave "&#249;" >
+ <!ENTITY uacute "&#250;" >
+ <!ENTITY ucirc "&#251;" >
+ <!ENTITY uuml "&#252;" >
+ <!ENTITY yacute "&#253;" >
+ <!ENTITY thorn "&#254;" >
+ <!ENTITY yuml "&#255;" >
+ <!ENTITY Amacr "&#256;" >
+ <!ENTITY amacr "&#257;" >
+ <!ENTITY Abreve "&#258;" >
+ <!ENTITY abreve "&#259;" >
+ <!ENTITY Aogon "&#260;" >
+ <!ENTITY aogon "&#261;" >
+ <!ENTITY Cacute "&#262;" >
+ <!ENTITY cacute "&#263;" >
+ <!ENTITY Ccirc "&#264;" >
+ <!ENTITY ccirc "&#265;" >
+ <!ENTITY Cdot "&#266;" >
+ <!ENTITY cdot "&#267;" >
+ <!ENTITY Ccaron "&#268;" >
+ <!ENTITY ccaron "&#269;" >
+ <!ENTITY Dcaron "&#270;" >
+ <!ENTITY dcaron "&#271;" >
+ <!ENTITY Dstrok "&#272;" >
+ <!ENTITY dstrok "&#273;" >
+ <!ENTITY Emacr "&#274;" >
+ <!ENTITY emacr "&#275;" >
+ <!ENTITY Edot "&#278;" >
+ <!ENTITY edot "&#279;" >
+ <!ENTITY Eogon "&#280;" >
+ <!ENTITY eogon "&#281;" >
+ <!ENTITY Ecaron "&#282;" >
+ <!ENTITY ecaron "&#283;" >
+ <!ENTITY Gcirc "&#284;" >
+ <!ENTITY gcirc "&#285;" >
+ <!ENTITY Gbreve "&#286;" >
+ <!ENTITY gbreve "&#287;" >
+ <!ENTITY Gdot "&#288;" >
+ <!ENTITY gdot "&#289;" >
+ <!ENTITY Gcedil "&#290;" >
+ <!ENTITY Hcirc "&#292;" >
+ <!ENTITY hcirc "&#293;" >
+ <!ENTITY Hstrok "&#294;" >
+ <!ENTITY hstrok "&#295;" >
+ <!ENTITY Itilde "&#296;" >
+ <!ENTITY itilde "&#297;" >
+ <!ENTITY Imacr "&#298;" >
+ <!ENTITY imacr "&#299;" >
+ <!ENTITY Iogon "&#302;" >
+ <!ENTITY iogon "&#303;" >
+ <!ENTITY Idot "&#304;" >
+ <!ENTITY imath "&#305;" >
+ <!ENTITY inodot "&#305;" >
+ <!ENTITY IJlig "&#306;" >
+ <!ENTITY ijlig "&#307;" >
+ <!ENTITY Jcirc "&#308;" >
+ <!ENTITY jcirc "&#309;" >
+ <!ENTITY Kcedil "&#310;" >
+ <!ENTITY kcedil "&#311;" >
+ <!ENTITY kgreen "&#312;" >
+ <!ENTITY Lacute "&#313;" >
+ <!ENTITY lacute "&#314;" >
+ <!ENTITY Lcedil "&#315;" >
+ <!ENTITY lcedil "&#316;" >
+ <!ENTITY Lcaron "&#317;" >
+ <!ENTITY lcaron "&#318;" >
+ <!ENTITY Lmidot "&#319;" >
+ <!ENTITY lmidot "&#320;" >
+ <!ENTITY Lstrok "&#321;" >
+ <!ENTITY lstrok "&#322;" >
+ <!ENTITY Nacute "&#323;" >
+ <!ENTITY nacute "&#324;" >
+ <!ENTITY Ncedil "&#325;" >
+ <!ENTITY ncedil "&#326;" >
+ <!ENTITY Ncaron "&#327;" >
+ <!ENTITY ncaron "&#328;" >
+ <!ENTITY napos "&#329;" >
+ <!ENTITY ENG "&#330;" >
+ <!ENTITY eng "&#331;" >
+ <!ENTITY Omacr "&#332;" >
+ <!ENTITY omacr "&#333;" >
+ <!ENTITY Odblac "&#336;" >
+ <!ENTITY odblac "&#337;" >
+ <!ENTITY OElig "&#338;" >
+ <!ENTITY oelig "&#339;" >
+ <!ENTITY Racute "&#340;" >
+ <!ENTITY racute "&#341;" >
+ <!ENTITY Rcedil "&#342;" >
+ <!ENTITY rcedil "&#343;" >
+ <!ENTITY Rcaron "&#344;" >
+ <!ENTITY rcaron "&#345;" >
+ <!ENTITY Sacute "&#346;" >
+ <!ENTITY sacute "&#347;" >
+ <!ENTITY Scirc "&#348;" >
+ <!ENTITY scirc "&#349;" >
+ <!ENTITY Scedil "&#350;" >
+ <!ENTITY scedil "&#351;" >
+ <!ENTITY Scaron "&#352;" >
+ <!ENTITY scaron "&#353;" >
+ <!ENTITY Tcedil "&#354;" >
+ <!ENTITY tcedil "&#355;" >
+ <!ENTITY Tcaron "&#356;" >
+ <!ENTITY tcaron "&#357;" >
+ <!ENTITY Tstrok "&#358;" >
+ <!ENTITY tstrok "&#359;" >
+ <!ENTITY Utilde "&#360;" >
+ <!ENTITY utilde "&#361;" >
+ <!ENTITY Umacr "&#362;" >
+ <!ENTITY umacr "&#363;" >
+ <!ENTITY Ubreve "&#364;" >
+ <!ENTITY ubreve "&#365;" >
+ <!ENTITY Uring "&#366;" >
+ <!ENTITY uring "&#367;" >
+ <!ENTITY Udblac "&#368;" >
+ <!ENTITY udblac "&#369;" >
+ <!ENTITY Uogon "&#370;" >
+ <!ENTITY uogon "&#371;" >
+ <!ENTITY Wcirc "&#372;" >
+ <!ENTITY wcirc "&#373;" >
+ <!ENTITY Ycirc "&#374;" >
+ <!ENTITY ycirc "&#375;" >
+ <!ENTITY Yuml "&#376;" >
+ <!ENTITY Zacute "&#377;" >
+ <!ENTITY zacute "&#378;" >
+ <!ENTITY Zdot "&#379;" >
+ <!ENTITY zdot "&#380;" >
+ <!ENTITY Zcaron "&#381;" >
+ <!ENTITY zcaron "&#382;" >
+ <!ENTITY fnof "&#402;" >
+ <!ENTITY imped "&#437;" >
+ <!ENTITY gacute "&#501;" >
+ <!ENTITY jmath "&#567;" >
+ <!ENTITY circ "&#710;" >
+ <!ENTITY caron "&#711;" >
+ <!ENTITY Hacek "&#711;" >
+ <!ENTITY breve "&#728;" >
+ <!ENTITY Breve "&#728;" >
+ <!ENTITY dot "&#729;" >
+ <!ENTITY DiacriticalDot "&#729;" >
+ <!ENTITY ring "&#730;" >
+ <!ENTITY ogon "&#731;" >
+ <!ENTITY tilde "&#732;" >
+ <!ENTITY DiacriticalTilde "&#732;" >
+ <!ENTITY dblac "&#733;" >
+ <!ENTITY DiacriticalDoubleAcute "&#733;" >
+ <!ENTITY DownBreve "&#785;" >
+ <!ENTITY UnderBar "&#818;" >
+ <!ENTITY Alpha "&#913;" >
+ <!ENTITY Beta "&#914;" >
+ <!ENTITY Gamma "&#915;" >
+ <!ENTITY Delta "&#916;" >
+ <!ENTITY Epsilon "&#917;" >
+ <!ENTITY Zeta "&#918;" >
+ <!ENTITY Eta "&#919;" >
+ <!ENTITY Theta "&#920;" >
+ <!ENTITY Iota "&#921;" >
+ <!ENTITY Kappa "&#922;" >
+ <!ENTITY Lambda "&#923;" >
+ <!ENTITY Mu "&#924;" >
+ <!ENTITY Nu "&#925;" >
+ <!ENTITY Xi "&#926;" >
+ <!ENTITY Omicron "&#927;" >
+ <!ENTITY Pi "&#928;" >
+ <!ENTITY Rho "&#929;" >
+ <!ENTITY Sigma "&#931;" >
+ <!ENTITY Tau "&#932;" >
+ <!ENTITY Upsilon "&#933;" >
+ <!ENTITY Phi "&#934;" >
+ <!ENTITY Chi "&#935;" >
+ <!ENTITY Psi "&#936;" >
+ <!ENTITY Omega "&#937;" >
+ <!ENTITY alpha "&#945;" >
+ <!ENTITY beta "&#946;" >
+ <!ENTITY gamma "&#947;" >
+ <!ENTITY delta "&#948;" >
+ <!ENTITY epsiv "&#949;" >
+ <!ENTITY varepsilon "&#949;" >
+ <!ENTITY epsilon "&#949;" >
+ <!ENTITY zeta "&#950;" >
+ <!ENTITY eta "&#951;" >
+ <!ENTITY theta "&#952;" >
+ <!ENTITY iota "&#953;" >
+ <!ENTITY kappa "&#954;" >
+ <!ENTITY lambda "&#955;" >
+ <!ENTITY mu "&#956;" >
+ <!ENTITY nu "&#957;" >
+ <!ENTITY xi "&#958;" >
+ <!ENTITY omicron "&#959;" >
+ <!ENTITY pi "&#960;" >
+ <!ENTITY rho "&#961;" >
+ <!ENTITY sigmav "&#962;" >
+ <!ENTITY varsigma "&#962;" >
+ <!ENTITY sigmaf "&#962;" >
+ <!ENTITY sigma "&#963;" >
+ <!ENTITY tau "&#964;" >
+ <!ENTITY upsi "&#965;" >
+ <!ENTITY upsilon "&#965;" >
+ <!ENTITY phi "&#966;" >
+ <!ENTITY phiv "&#966;" >
+ <!ENTITY varphi "&#966;" >
+ <!ENTITY chi "&#967;" >
+ <!ENTITY psi "&#968;" >
+ <!ENTITY omega "&#969;" >
+ <!ENTITY thetav "&#977;" >
+ <!ENTITY vartheta "&#977;" >
+ <!ENTITY thetasym "&#977;" >
+ <!ENTITY Upsi "&#978;" >
+ <!ENTITY upsih "&#978;" >
+ <!ENTITY straightphi "&#981;" >
+ <!ENTITY piv "&#982;" >
+ <!ENTITY varpi "&#982;" >
+ <!ENTITY Gammad "&#988;" >
+ <!ENTITY gammad "&#989;" >
+ <!ENTITY digamma "&#989;" >
+ <!ENTITY kappav "&#1008;" >
+ <!ENTITY varkappa "&#1008;" >
+ <!ENTITY rhov "&#1009;" >
+ <!ENTITY varrho "&#1009;" >
+ <!ENTITY epsi "&#1013;" >
+ <!ENTITY straightepsilon "&#1013;" >
+ <!ENTITY bepsi "&#1014;" >
+ <!ENTITY backepsilon "&#1014;" >
+ <!ENTITY IOcy "&#1025;" >
+ <!ENTITY DJcy "&#1026;" >
+ <!ENTITY GJcy "&#1027;" >
+ <!ENTITY Jukcy "&#1028;" >
+ <!ENTITY DScy "&#1029;" >
+ <!ENTITY Iukcy "&#1030;" >
+ <!ENTITY YIcy "&#1031;" >
+ <!ENTITY Jsercy "&#1032;" >
+ <!ENTITY LJcy "&#1033;" >
+ <!ENTITY NJcy "&#1034;" >
+ <!ENTITY TSHcy "&#1035;" >
+ <!ENTITY KJcy "&#1036;" >
+ <!ENTITY Ubrcy "&#1038;" >
+ <!ENTITY DZcy "&#1039;" >
+ <!ENTITY Acy "&#1040;" >
+ <!ENTITY Bcy "&#1041;" >
+ <!ENTITY Vcy "&#1042;" >
+ <!ENTITY Gcy "&#1043;" >
+ <!ENTITY Dcy "&#1044;" >
+ <!ENTITY IEcy "&#1045;" >
+ <!ENTITY ZHcy "&#1046;" >
+ <!ENTITY Zcy "&#1047;" >
+ <!ENTITY Icy "&#1048;" >
+ <!ENTITY Jcy "&#1049;" >
+ <!ENTITY Kcy "&#1050;" >
+ <!ENTITY Lcy "&#1051;" >
+ <!ENTITY Mcy "&#1052;" >
+ <!ENTITY Ncy "&#1053;" >
+ <!ENTITY Ocy "&#1054;" >
+ <!ENTITY Pcy "&#1055;" >
+ <!ENTITY Rcy "&#1056;" >
+ <!ENTITY Scy "&#1057;" >
+ <!ENTITY Tcy "&#1058;" >
+ <!ENTITY Ucy "&#1059;" >
+ <!ENTITY Fcy "&#1060;" >
+ <!ENTITY KHcy "&#1061;" >
+ <!ENTITY TScy "&#1062;" >
+ <!ENTITY CHcy "&#1063;" >
+ <!ENTITY SHcy "&#1064;" >
+ <!ENTITY SHCHcy "&#1065;" >
+ <!ENTITY HARDcy "&#1066;" >
+ <!ENTITY Ycy "&#1067;" >
+ <!ENTITY SOFTcy "&#1068;" >
+ <!ENTITY Ecy "&#1069;" >
+ <!ENTITY YUcy "&#1070;" >
+ <!ENTITY YAcy "&#1071;" >
+ <!ENTITY acy "&#1072;" >
+ <!ENTITY bcy "&#1073;" >
+ <!ENTITY vcy "&#1074;" >
+ <!ENTITY gcy "&#1075;" >
+ <!ENTITY dcy "&#1076;" >
+ <!ENTITY iecy "&#1077;" >
+ <!ENTITY zhcy "&#1078;" >
+ <!ENTITY zcy "&#1079;" >
+ <!ENTITY icy "&#1080;" >
+ <!ENTITY jcy "&#1081;" >
+ <!ENTITY kcy "&#1082;" >
+ <!ENTITY lcy "&#1083;" >
+ <!ENTITY mcy "&#1084;" >
+ <!ENTITY ncy "&#1085;" >
+ <!ENTITY ocy "&#1086;" >
+ <!ENTITY pcy "&#1087;" >
+ <!ENTITY rcy "&#1088;" >
+ <!ENTITY scy "&#1089;" >
+ <!ENTITY tcy "&#1090;" >
+ <!ENTITY ucy "&#1091;" >
+ <!ENTITY fcy "&#1092;" >
+ <!ENTITY khcy "&#1093;" >
+ <!ENTITY tscy "&#1094;" >
+ <!ENTITY chcy "&#1095;" >
+ <!ENTITY shcy "&#1096;" >
+ <!ENTITY shchcy "&#1097;" >
+ <!ENTITY hardcy "&#1098;" >
+ <!ENTITY ycy "&#1099;" >
+ <!ENTITY softcy "&#1100;" >
+ <!ENTITY ecy "&#1101;" >
+ <!ENTITY yucy "&#1102;" >
+ <!ENTITY yacy "&#1103;" >
+ <!ENTITY iocy "&#1105;" >
+ <!ENTITY djcy "&#1106;" >
+ <!ENTITY gjcy "&#1107;" >
+ <!ENTITY jukcy "&#1108;" >
+ <!ENTITY dscy "&#1109;" >
+ <!ENTITY iukcy "&#1110;" >
+ <!ENTITY yicy "&#1111;" >
+ <!ENTITY jsercy "&#1112;" >
+ <!ENTITY ljcy "&#1113;" >
+ <!ENTITY njcy "&#1114;" >
+ <!ENTITY tshcy "&#1115;" >
+ <!ENTITY kjcy "&#1116;" >
+ <!ENTITY ubrcy "&#1118;" >
+ <!ENTITY dzcy "&#1119;" >
+ <!ENTITY ensp "&#8194;" >
+ <!ENTITY emsp "&#8195;" >
+ <!ENTITY emsp13 "&#8196;" >
+ <!ENTITY emsp14 "&#8197;" >
+ <!ENTITY numsp "&#8199;" >
+ <!ENTITY puncsp "&#8200;" >
+ <!ENTITY thinsp "&#8201;" >
+ <!ENTITY ThinSpace "&#8201;" >
+ <!ENTITY hairsp "&#8202;" >
+ <!ENTITY VeryThinSpace "&#8202;" >
+ <!ENTITY ZeroWidthSpace "&#8203;" >
+ <!ENTITY NegativeVeryThinSpace "&#8203;" >
+ <!ENTITY NegativeThinSpace "&#8203;" >
+ <!ENTITY NegativeMediumSpace "&#8203;" >
+ <!ENTITY NegativeThickSpace "&#8203;" >
+ <!ENTITY zwnj "&#8204;" >
+ <!ENTITY zwj "&#8205;" >
+ <!ENTITY lrm "&#8206;" >
+ <!ENTITY rlm "&#8207;" >
+ <!ENTITY hyphen "&#8208;" >
+ <!ENTITY dash "&#8208;" >
+ <!ENTITY ndash "&#8211;" >
+ <!ENTITY mdash "&#8212;" >
+ <!ENTITY horbar "&#8213;" >
+ <!ENTITY Verbar "&#8214;" >
+ <!ENTITY Vert "&#8214;" >
+ <!ENTITY lsquo "&#8216;" >
+ <!ENTITY OpenCurlyQuote "&#8216;" >
+ <!ENTITY rsquo "&#8217;" >
+ <!ENTITY rsquor "&#8217;" >
+ <!ENTITY CloseCurlyQuote "&#8217;" >
+ <!ENTITY lsquor "&#8218;" >
+ <!ENTITY sbquo "&#8218;" >
+ <!ENTITY ldquo "&#8220;" >
+ <!ENTITY OpenCurlyDoubleQuote "&#8220;" >
+ <!ENTITY rdquo "&#8221;" >
+ <!ENTITY rdquor "&#8221;" >
+ <!ENTITY CloseCurlyDoubleQuote "&#8221;" >
+ <!ENTITY ldquor "&#8222;" >
+ <!ENTITY bdquo "&#8222;" >
+ <!ENTITY dagger "&#8224;" >
+ <!ENTITY Dagger "&#8225;" >
+ <!ENTITY ddagger "&#8225;" >
+ <!ENTITY bull "&#8226;" >
+ <!ENTITY bullet "&#8226;" >
+ <!ENTITY nldr "&#8229;" >
+ <!ENTITY hellip "&#8230;" >
+ <!ENTITY mldr "&#8230;" >
+ <!ENTITY permil "&#8240;" >
+ <!ENTITY pertenk "&#8241;" >
+ <!ENTITY prime "&#8242;" >
+ <!ENTITY Prime "&#8243;" >
+ <!ENTITY tprime "&#8244;" >
+ <!ENTITY bprime "&#8245;" >
+ <!ENTITY backprime "&#8245;" >
+ <!ENTITY lsaquo "&#8249;" >
+ <!ENTITY rsaquo "&#8250;" >
+ <!ENTITY oline "&#8254;" >
+ <!ENTITY caret "&#8257;" >
+ <!ENTITY hybull "&#8259;" >
+ <!ENTITY frasl "&#8260;" >
+ <!ENTITY bsemi "&#8271;" >
+ <!ENTITY qprime "&#8279;" >
+ <!ENTITY MediumSpace "&#8287;" >
+ <!ENTITY NoBreak "&#8288;" >
+ <!ENTITY ApplyFunction "&#8289;" >
+ <!ENTITY af "&#8289;" >
+ <!ENTITY InvisibleTimes "&#8290;" >
+ <!ENTITY it "&#8290;" >
+ <!ENTITY InvisibleComma "&#8291;" >
+ <!ENTITY ic "&#8291;" >
+ <!ENTITY euro "&#8364;" >
+ <!ENTITY tdot "&#8411;" >
+ <!ENTITY TripleDot "&#8411;" >
+ <!ENTITY DotDot "&#8412;" >
+ <!ENTITY Copf "&#8450;" >
+ <!ENTITY complexes "&#8450;" >
+ <!ENTITY incare "&#8453;" >
+ <!ENTITY gscr "&#8458;" >
+ <!ENTITY hamilt "&#8459;" >
+ <!ENTITY HilbertSpace "&#8459;" >
+ <!ENTITY Hscr "&#8459;" >
+ <!ENTITY Hfr "&#8460;" >
+ <!ENTITY Poincareplane "&#8460;" >
+ <!ENTITY quaternions "&#8461;" >
+ <!ENTITY Hopf "&#8461;" >
+ <!ENTITY planckh "&#8462;" >
+ <!ENTITY planck "&#8463;" >
+ <!ENTITY hbar "&#8463;" >
+ <!ENTITY plankv "&#8463;" >
+ <!ENTITY hslash "&#8463;" >
+ <!ENTITY Iscr "&#8464;" >
+ <!ENTITY imagline "&#8464;" >
+ <!ENTITY image "&#8465;" >
+ <!ENTITY Im "&#8465;" >
+ <!ENTITY imagpart "&#8465;" >
+ <!ENTITY Ifr "&#8465;" >
+ <!ENTITY Lscr "&#8466;" >
+ <!ENTITY lagran "&#8466;" >
+ <!ENTITY Laplacetrf "&#8466;" >
+ <!ENTITY ell "&#8467;" >
+ <!ENTITY Nopf "&#8469;" >
+ <!ENTITY naturals "&#8469;" >
+ <!ENTITY numero "&#8470;" >
+ <!ENTITY copysr "&#8471;" >
+ <!ENTITY weierp "&#8472;" >
+ <!ENTITY wp "&#8472;" >
+ <!ENTITY Popf "&#8473;" >
+ <!ENTITY primes "&#8473;" >
+ <!ENTITY rationals "&#8474;" >
+ <!ENTITY Qopf "&#8474;" >
+ <!ENTITY Rscr "&#8475;" >
+ <!ENTITY realine "&#8475;" >
+ <!ENTITY real "&#8476;" >
+ <!ENTITY Re "&#8476;" >
+ <!ENTITY realpart "&#8476;" >
+ <!ENTITY Rfr "&#8476;" >
+ <!ENTITY reals "&#8477;" >
+ <!ENTITY Ropf "&#8477;" >
+ <!ENTITY rx "&#8478;" >
+ <!ENTITY trade "&#8482;" >
+ <!ENTITY TRADE "&#8482;" >
+ <!ENTITY integers "&#8484;" >
+ <!ENTITY Zopf "&#8484;" >
+ <!ENTITY ohm "&#8486;" >
+ <!ENTITY mho "&#8487;" >
+ <!ENTITY Zfr "&#8488;" >
+ <!ENTITY zeetrf "&#8488;" >
+ <!ENTITY iiota "&#8489;" >
+ <!ENTITY angst "&#8491;" >
+ <!ENTITY bernou "&#8492;" >
+ <!ENTITY Bernoullis "&#8492;" >
+ <!ENTITY Bscr "&#8492;" >
+ <!ENTITY Cfr "&#8493;" >
+ <!ENTITY Cayleys "&#8493;" >
+ <!ENTITY escr "&#8495;" >
+ <!ENTITY Escr "&#8496;" >
+ <!ENTITY expectation "&#8496;" >
+ <!ENTITY Fscr "&#8497;" >
+ <!ENTITY Fouriertrf "&#8497;" >
+ <!ENTITY phmmat "&#8499;" >
+ <!ENTITY Mellintrf "&#8499;" >
+ <!ENTITY Mscr "&#8499;" >
+ <!ENTITY order "&#8500;" >
+ <!ENTITY orderof "&#8500;" >
+ <!ENTITY oscr "&#8500;" >
+ <!ENTITY alefsym "&#8501;" >
+ <!ENTITY aleph "&#8501;" >
+ <!ENTITY beth "&#8502;" >
+ <!ENTITY gimel "&#8503;" >
+ <!ENTITY daleth "&#8504;" >
+ <!ENTITY CapitalDifferentialD "&#8517;" >
+ <!ENTITY DD "&#8517;" >
+ <!ENTITY DifferentialD "&#8518;" >
+ <!ENTITY dd "&#8518;" >
+ <!ENTITY ExponentialE "&#8519;" >
+ <!ENTITY exponentiale "&#8519;" >
+ <!ENTITY ee "&#8519;" >
+ <!ENTITY ImaginaryI "&#8520;" >
+ <!ENTITY ii "&#8520;" >
+ <!ENTITY frac13 "&#8531;" >
+ <!ENTITY frac23 "&#8532;" >
+ <!ENTITY frac15 "&#8533;" >
+ <!ENTITY frac25 "&#8534;" >
+ <!ENTITY frac35 "&#8535;" >
+ <!ENTITY frac45 "&#8536;" >
+ <!ENTITY frac16 "&#8537;" >
+ <!ENTITY frac56 "&#8538;" >
+ <!ENTITY frac18 "&#8539;" >
+ <!ENTITY frac38 "&#8540;" >
+ <!ENTITY frac58 "&#8541;" >
+ <!ENTITY frac78 "&#8542;" >
+ <!ENTITY larr "&#8592;" >
+ <!ENTITY leftarrow "&#8592;" >
+ <!ENTITY LeftArrow "&#8592;" >
+ <!ENTITY slarr "&#8592;" >
+ <!ENTITY ShortLeftArrow "&#8592;" >
+ <!ENTITY uarr "&#8593;" >
+ <!ENTITY uparrow "&#8593;" >
+ <!ENTITY UpArrow "&#8593;" >
+ <!ENTITY ShortUpArrow "&#8593;" >
+ <!ENTITY rarr "&#8594;" >
+ <!ENTITY rightarrow "&#8594;" >
+ <!ENTITY RightArrow "&#8594;" >
+ <!ENTITY srarr "&#8594;" >
+ <!ENTITY ShortRightArrow "&#8594;" >
+ <!ENTITY darr "&#8595;" >
+ <!ENTITY downarrow "&#8595;" >
+ <!ENTITY DownArrow "&#8595;" >
+ <!ENTITY ShortDownArrow "&#8595;" >
+ <!ENTITY harr "&#8596;" >
+ <!ENTITY leftrightarrow "&#8596;" >
+ <!ENTITY LeftRightArrow "&#8596;" >
+ <!ENTITY varr "&#8597;" >
+ <!ENTITY updownarrow "&#8597;" >
+ <!ENTITY UpDownArrow "&#8597;" >
+ <!ENTITY nwarr "&#8598;" >
+ <!ENTITY UpperLeftArrow "&#8598;" >
+ <!ENTITY nwarrow "&#8598;" >
+ <!ENTITY nearr "&#8599;" >
+ <!ENTITY UpperRightArrow "&#8599;" >
+ <!ENTITY nearrow "&#8599;" >
+ <!ENTITY searr "&#8600;" >
+ <!ENTITY searrow "&#8600;" >
+ <!ENTITY LowerRightArrow "&#8600;" >
+ <!ENTITY swarr "&#8601;" >
+ <!ENTITY swarrow "&#8601;" >
+ <!ENTITY LowerLeftArrow "&#8601;" >
+ <!ENTITY nlarr "&#8602;" >
+ <!ENTITY nleftarrow "&#8602;" >
+ <!ENTITY nrarr "&#8603;" >
+ <!ENTITY nrightarrow "&#8603;" >
+ <!ENTITY rarrw "&#8605;" >
+ <!ENTITY rightsquigarrow "&#8605;" >
+ <!ENTITY Larr "&#8606;" >
+ <!ENTITY twoheadleftarrow "&#8606;" >
+ <!ENTITY Uarr "&#8607;" >
+ <!ENTITY Rarr "&#8608;" >
+ <!ENTITY twoheadrightarrow "&#8608;" >
+ <!ENTITY Darr "&#8609;" >
+ <!ENTITY larrtl "&#8610;" >
+ <!ENTITY leftarrowtail "&#8610;" >
+ <!ENTITY rarrtl "&#8611;" >
+ <!ENTITY rightarrowtail "&#8611;" >
+ <!ENTITY LeftTeeArrow "&#8612;" >
+ <!ENTITY mapstoleft "&#8612;" >
+ <!ENTITY UpTeeArrow "&#8613;" >
+ <!ENTITY mapstoup "&#8613;" >
+ <!ENTITY map "&#8614;" >
+ <!ENTITY RightTeeArrow "&#8614;" >
+ <!ENTITY mapsto "&#8614;" >
+ <!ENTITY DownTeeArrow "&#8615;" >
+ <!ENTITY mapstodown "&#8615;" >
+ <!ENTITY larrhk "&#8617;" >
+ <!ENTITY hookleftarrow "&#8617;" >
+ <!ENTITY rarrhk "&#8618;" >
+ <!ENTITY hookrightarrow "&#8618;" >
+ <!ENTITY larrlp "&#8619;" >
+ <!ENTITY looparrowleft "&#8619;" >
+ <!ENTITY rarrlp "&#8620;" >
+ <!ENTITY looparrowright "&#8620;" >
+ <!ENTITY harrw "&#8621;" >
+ <!ENTITY leftrightsquigarrow "&#8621;" >
+ <!ENTITY nharr "&#8622;" >
+ <!ENTITY nleftrightarrow "&#8622;" >
+ <!ENTITY lsh "&#8624;" >
+ <!ENTITY Lsh "&#8624;" >
+ <!ENTITY rsh "&#8625;" >
+ <!ENTITY Rsh "&#8625;" >
+ <!ENTITY ldsh "&#8626;" >
+ <!ENTITY rdsh "&#8627;" >
+ <!ENTITY crarr "&#8629;" >
+ <!ENTITY cularr "&#8630;" >
+ <!ENTITY curvearrowleft "&#8630;" >
+ <!ENTITY curarr "&#8631;" >
+ <!ENTITY curvearrowright "&#8631;" >
+ <!ENTITY olarr "&#8634;" >
+ <!ENTITY circlearrowleft "&#8634;" >
+ <!ENTITY orarr "&#8635;" >
+ <!ENTITY circlearrowright "&#8635;" >
+ <!ENTITY lharu "&#8636;" >
+ <!ENTITY LeftVector "&#8636;" >
+ <!ENTITY leftharpoonup "&#8636;" >
+ <!ENTITY lhard "&#8637;" >
+ <!ENTITY leftharpoondown "&#8637;" >
+ <!ENTITY DownLeftVector "&#8637;" >
+ <!ENTITY uharr "&#8638;" >
+ <!ENTITY upharpoonright "&#8638;" >
+ <!ENTITY RightUpVector "&#8638;" >
+ <!ENTITY uharl "&#8639;" >
+ <!ENTITY upharpoonleft "&#8639;" >
+ <!ENTITY LeftUpVector "&#8639;" >
+ <!ENTITY rharu "&#8640;" >
+ <!ENTITY RightVector "&#8640;" >
+ <!ENTITY rightharpoonup "&#8640;" >
+ <!ENTITY rhard "&#8641;" >
+ <!ENTITY rightharpoondown "&#8641;" >
+ <!ENTITY DownRightVector "&#8641;" >
+ <!ENTITY dharr "&#8642;" >
+ <!ENTITY RightDownVector "&#8642;" >
+ <!ENTITY downharpoonright "&#8642;" >
+ <!ENTITY dharl "&#8643;" >
+ <!ENTITY LeftDownVector "&#8643;" >
+ <!ENTITY downharpoonleft "&#8643;" >
+ <!ENTITY rlarr "&#8644;" >
+ <!ENTITY rightleftarrows "&#8644;" >
+ <!ENTITY RightArrowLeftArrow "&#8644;" >
+ <!ENTITY udarr "&#8645;" >
+ <!ENTITY UpArrowDownArrow "&#8645;" >
+ <!ENTITY lrarr "&#8646;" >
+ <!ENTITY leftrightarrows "&#8646;" >
+ <!ENTITY LeftArrowRightArrow "&#8646;" >
+ <!ENTITY llarr "&#8647;" >
+ <!ENTITY leftleftarrows "&#8647;" >
+ <!ENTITY uuarr "&#8648;" >
+ <!ENTITY upuparrows "&#8648;" >
+ <!ENTITY rrarr "&#8649;" >
+ <!ENTITY rightrightarrows "&#8649;" >
+ <!ENTITY ddarr "&#8650;" >
+ <!ENTITY downdownarrows "&#8650;" >
+ <!ENTITY lrhar "&#8651;" >
+ <!ENTITY ReverseEquilibrium "&#8651;" >
+ <!ENTITY leftrightharpoons "&#8651;" >
+ <!ENTITY rlhar "&#8652;" >
+ <!ENTITY rightleftharpoons "&#8652;" >
+ <!ENTITY Equilibrium "&#8652;" >
+ <!ENTITY nlArr "&#8653;" >
+ <!ENTITY nLeftarrow "&#8653;" >
+ <!ENTITY nhArr "&#8654;" >
+ <!ENTITY nLeftrightarrow "&#8654;" >
+ <!ENTITY nrArr "&#8655;" >
+ <!ENTITY nRightarrow "&#8655;" >
+ <!ENTITY lArr "&#8656;" >
+ <!ENTITY Leftarrow "&#8656;" >
+ <!ENTITY DoubleLeftArrow "&#8656;" >
+ <!ENTITY uArr "&#8657;" >
+ <!ENTITY Uparrow "&#8657;" >
+ <!ENTITY DoubleUpArrow "&#8657;" >
+ <!ENTITY rArr "&#8658;" >
+ <!ENTITY Rightarrow "&#8658;" >
+ <!ENTITY Implies "&#8658;" >
+ <!ENTITY DoubleRightArrow "&#8658;" >
+ <!ENTITY dArr "&#8659;" >
+ <!ENTITY Downarrow "&#8659;" >
+ <!ENTITY DoubleDownArrow "&#8659;" >
+ <!ENTITY hArr "&#8660;" >
+ <!ENTITY Leftrightarrow "&#8660;" >
+ <!ENTITY DoubleLeftRightArrow "&#8660;" >
+ <!ENTITY iff "&#8660;" >
+ <!ENTITY vArr "&#8661;" >
+ <!ENTITY Updownarrow "&#8661;" >
+ <!ENTITY DoubleUpDownArrow "&#8661;" >
+ <!ENTITY nwArr "&#8662;" >
+ <!ENTITY neArr "&#8663;" >
+ <!ENTITY seArr "&#8664;" >
+ <!ENTITY swArr "&#8665;" >
+ <!ENTITY lAarr "&#8666;" >
+ <!ENTITY Lleftarrow "&#8666;" >
+ <!ENTITY rAarr "&#8667;" >
+ <!ENTITY Rrightarrow "&#8667;" >
+ <!ENTITY zigrarr "&#8669;" >
+ <!ENTITY larrb "&#8676;" >
+ <!ENTITY LeftArrowBar "&#8676;" >
+ <!ENTITY rarrb "&#8677;" >
+ <!ENTITY RightArrowBar "&#8677;" >
+ <!ENTITY duarr "&#8693;" >
+ <!ENTITY DownArrowUpArrow "&#8693;" >
+ <!ENTITY loarr "&#8701;" >
+ <!ENTITY roarr "&#8702;" >
+ <!ENTITY hoarr "&#8703;" >
+ <!ENTITY forall "&#8704;" >
+ <!ENTITY ForAll "&#8704;" >
+ <!ENTITY comp "&#8705;" >
+ <!ENTITY complement "&#8705;" >
+ <!ENTITY part "&#8706;" >
+ <!ENTITY PartialD "&#8706;" >
+ <!ENTITY exist "&#8707;" >
+ <!ENTITY Exists "&#8707;" >
+ <!ENTITY nexist "&#8708;" >
+ <!ENTITY NotExists "&#8708;" >
+ <!ENTITY nexists "&#8708;" >
+ <!ENTITY empty "&#8709;" >
+ <!ENTITY emptyset "&#8709;" >
+ <!ENTITY emptyv "&#8709;" >
+ <!ENTITY varnothing "&#8709;" >
+ <!ENTITY nabla "&#8711;" >
+ <!ENTITY Del "&#8711;" >
+ <!ENTITY isin "&#8712;" >
+ <!ENTITY isinv "&#8712;" >
+ <!ENTITY Element "&#8712;" >
+ <!ENTITY in "&#8712;" >
+ <!ENTITY notin "&#8713;" >
+ <!ENTITY NotElement "&#8713;" >
+ <!ENTITY notinva "&#8713;" >
+ <!ENTITY niv "&#8715;" >
+ <!ENTITY ReverseElement "&#8715;" >
+ <!ENTITY ni "&#8715;" >
+ <!ENTITY SuchThat "&#8715;" >
+ <!ENTITY notni "&#8716;" >
+ <!ENTITY notniva "&#8716;" >
+ <!ENTITY NotReverseElement "&#8716;" >
+ <!ENTITY prod "&#8719;" >
+ <!ENTITY Product "&#8719;" >
+ <!ENTITY coprod "&#8720;" >
+ <!ENTITY Coproduct "&#8720;" >
+ <!ENTITY sum "&#8721;" >
+ <!ENTITY Sum "&#8721;" >
+ <!ENTITY minus "&#8722;" >
+ <!ENTITY mnplus "&#8723;" >
+ <!ENTITY mp "&#8723;" >
+ <!ENTITY MinusPlus "&#8723;" >
+ <!ENTITY plusdo "&#8724;" >
+ <!ENTITY dotplus "&#8724;" >
+ <!ENTITY setmn "&#8726;" >
+ <!ENTITY setminus "&#8726;" >
+ <!ENTITY Backslash "&#8726;" >
+ <!ENTITY ssetmn "&#8726;" >
+ <!ENTITY smallsetminus "&#8726;" >
+ <!ENTITY lowast "&#8727;" >
+ <!ENTITY compfn "&#8728;" >
+ <!ENTITY SmallCircle "&#8728;" >
+ <!ENTITY radic "&#8730;" >
+ <!ENTITY Sqrt "&#8730;" >
+ <!ENTITY prop "&#8733;" >
+ <!ENTITY propto "&#8733;" >
+ <!ENTITY Proportional "&#8733;" >
+ <!ENTITY vprop "&#8733;" >
+ <!ENTITY varpropto "&#8733;" >
+ <!ENTITY infin "&#8734;" >
+ <!ENTITY angrt "&#8735;" >
+ <!ENTITY ang "&#8736;" >
+ <!ENTITY angle "&#8736;" >
+ <!ENTITY angmsd "&#8737;" >
+ <!ENTITY measuredangle "&#8737;" >
+ <!ENTITY angsph "&#8738;" >
+ <!ENTITY mid "&#8739;" >
+ <!ENTITY VerticalBar "&#8739;" >
+ <!ENTITY smid "&#8739;" >
+ <!ENTITY shortmid "&#8739;" >
+ <!ENTITY nmid "&#8740;" >
+ <!ENTITY NotVerticalBar "&#8740;" >
+ <!ENTITY nsmid "&#8740;" >
+ <!ENTITY nshortmid "&#8740;" >
+ <!ENTITY par "&#8741;" >
+ <!ENTITY parallel "&#8741;" >
+ <!ENTITY DoubleVerticalBar "&#8741;" >
+ <!ENTITY spar "&#8741;" >
+ <!ENTITY shortparallel "&#8741;" >
+ <!ENTITY npar "&#8742;" >
+ <!ENTITY nparallel "&#8742;" >
+ <!ENTITY NotDoubleVerticalBar "&#8742;" >
+ <!ENTITY nspar "&#8742;" >
+ <!ENTITY nshortparallel "&#8742;" >
+ <!ENTITY and "&#8743;" >
+ <!ENTITY wedge "&#8743;" >
+ <!ENTITY or "&#8744;" >
+ <!ENTITY vee "&#8744;" >
+ <!ENTITY cap "&#8745;" >
+ <!ENTITY cup "&#8746;" >
+ <!ENTITY int "&#8747;" >
+ <!ENTITY Integral "&#8747;" >
+ <!ENTITY Int "&#8748;" >
+ <!ENTITY tint "&#8749;" >
+ <!ENTITY iiint "&#8749;" >
+ <!ENTITY conint "&#8750;" >
+ <!ENTITY oint "&#8750;" >
+ <!ENTITY ContourIntegral "&#8750;" >
+ <!ENTITY Conint "&#8751;" >
+ <!ENTITY DoubleContourIntegral "&#8751;" >
+ <!ENTITY Cconint "&#8752;" >
+ <!ENTITY cwint "&#8753;" >
+ <!ENTITY cwconint "&#8754;" >
+ <!ENTITY ClockwiseContourIntegral "&#8754;" >
+ <!ENTITY awconint "&#8755;" >
+ <!ENTITY CounterClockwiseContourIntegral "&#8755;" >
+ <!ENTITY there4 "&#8756;" >
+ <!ENTITY therefore "&#8756;" >
+ <!ENTITY Therefore "&#8756;" >
+ <!ENTITY becaus "&#8757;" >
+ <!ENTITY because "&#8757;" >
+ <!ENTITY Because "&#8757;" >
+ <!ENTITY ratio "&#8758;" >
+ <!ENTITY Colon "&#8759;" >
+ <!ENTITY Proportion "&#8759;" >
+ <!ENTITY minusd "&#8760;" >
+ <!ENTITY dotminus "&#8760;" >
+ <!ENTITY mDDot "&#8762;" >
+ <!ENTITY homtht "&#8763;" >
+ <!ENTITY sim "&#8764;" >
+ <!ENTITY Tilde "&#8764;" >
+ <!ENTITY thksim "&#8764;" >
+ <!ENTITY thicksim "&#8764;" >
+ <!ENTITY bsim "&#8765;" >
+ <!ENTITY backsim "&#8765;" >
+ <!ENTITY ac "&#8766;" >
+ <!ENTITY mstpos "&#8766;" >
+ <!ENTITY acd "&#8767;" >
+ <!ENTITY wreath "&#8768;" >
+ <!ENTITY VerticalTilde "&#8768;" >
+ <!ENTITY wr "&#8768;" >
+ <!ENTITY nsim "&#8769;" >
+ <!ENTITY NotTilde "&#8769;" >
+ <!ENTITY esim "&#8770;" >
+ <!ENTITY EqualTilde "&#8770;" >
+ <!ENTITY eqsim "&#8770;" >
+ <!ENTITY sime "&#8771;" >
+ <!ENTITY TildeEqual "&#8771;" >
+ <!ENTITY simeq "&#8771;" >
+ <!ENTITY nsime "&#8772;" >
+ <!ENTITY nsimeq "&#8772;" >
+ <!ENTITY NotTildeEqual "&#8772;" >
+ <!ENTITY cong "&#8773;" >
+ <!ENTITY TildeFullEqual "&#8773;" >
+ <!ENTITY simne "&#8774;" >
+ <!ENTITY ncong "&#8775;" >
+ <!ENTITY NotTildeFullEqual "&#8775;" >
+ <!ENTITY asymp "&#8776;" >
+ <!ENTITY ap "&#8776;" >
+ <!ENTITY TildeTilde "&#8776;" >
+ <!ENTITY approx "&#8776;" >
+ <!ENTITY thkap "&#8776;" >
+ <!ENTITY thickapprox "&#8776;" >
+ <!ENTITY nap "&#8777;" >
+ <!ENTITY NotTildeTilde "&#8777;" >
+ <!ENTITY napprox "&#8777;" >
+ <!ENTITY ape "&#8778;" >
+ <!ENTITY approxeq "&#8778;" >
+ <!ENTITY apid "&#8779;" >
+ <!ENTITY bcong "&#8780;" >
+ <!ENTITY backcong "&#8780;" >
+ <!ENTITY asympeq "&#8781;" >
+ <!ENTITY CupCap "&#8781;" >
+ <!ENTITY bump "&#8782;" >
+ <!ENTITY HumpDownHump "&#8782;" >
+ <!ENTITY Bumpeq "&#8782;" >
+ <!ENTITY bumpe "&#8783;" >
+ <!ENTITY HumpEqual "&#8783;" >
+ <!ENTITY bumpeq "&#8783;" >
+ <!ENTITY esdot "&#8784;" >
+ <!ENTITY DotEqual "&#8784;" >
+ <!ENTITY doteq "&#8784;" >
+ <!ENTITY eDot "&#8785;" >
+ <!ENTITY doteqdot "&#8785;" >
+ <!ENTITY efDot "&#8786;" >
+ <!ENTITY fallingdotseq "&#8786;" >
+ <!ENTITY erDot "&#8787;" >
+ <!ENTITY risingdotseq "&#8787;" >
+ <!ENTITY colone "&#8788;" >
+ <!ENTITY coloneq "&#8788;" >
+ <!ENTITY Assign "&#8788;" >
+ <!ENTITY ecolon "&#8789;" >
+ <!ENTITY eqcolon "&#8789;" >
+ <!ENTITY ecir "&#8790;" >
+ <!ENTITY eqcirc "&#8790;" >
+ <!ENTITY cire "&#8791;" >
+ <!ENTITY circeq "&#8791;" >
+ <!ENTITY wedgeq "&#8793;" >
+ <!ENTITY veeeq "&#8794;" >
+ <!ENTITY trie "&#8796;" >
+ <!ENTITY triangleq "&#8796;" >
+ <!ENTITY equest "&#8799;" >
+ <!ENTITY questeq "&#8799;" >
+ <!ENTITY ne "&#8800;" >
+ <!ENTITY NotEqual "&#8800;" >
+ <!ENTITY equiv "&#8801;" >
+ <!ENTITY Congruent "&#8801;" >
+ <!ENTITY nequiv "&#8802;" >
+ <!ENTITY NotCongruent "&#8802;" >
+ <!ENTITY le "&#8804;" >
+ <!ENTITY leq "&#8804;" >
+ <!ENTITY ge "&#8805;" >
+ <!ENTITY GreaterEqual "&#8805;" >
+ <!ENTITY geq "&#8805;" >
+ <!ENTITY lE "&#8806;" >
+ <!ENTITY LessFullEqual "&#8806;" >
+ <!ENTITY leqq "&#8806;" >
+ <!ENTITY gE "&#8807;" >
+ <!ENTITY GreaterFullEqual "&#8807;" >
+ <!ENTITY geqq "&#8807;" >
+ <!ENTITY lnE "&#8808;" >
+ <!ENTITY lneqq "&#8808;" >
+ <!ENTITY gnE "&#8809;" >
+ <!ENTITY gneqq "&#8809;" >
+ <!ENTITY Lt "&#8810;" >
+ <!ENTITY NestedLessLess "&#8810;" >
+ <!ENTITY ll "&#8810;" >
+ <!ENTITY Gt "&#8811;" >
+ <!ENTITY NestedGreaterGreater "&#8811;" >
+ <!ENTITY gg "&#8811;" >
+ <!ENTITY twixt "&#8812;" >
+ <!ENTITY between "&#8812;" >
+ <!ENTITY NotCupCap "&#8813;" >
+ <!ENTITY nlt "&#8814;" >
+ <!ENTITY NotLess "&#8814;" >
+ <!ENTITY nless "&#8814;" >
+ <!ENTITY ngt "&#8815;" >
+ <!ENTITY NotGreater "&#8815;" >
+ <!ENTITY ngtr "&#8815;" >
+ <!ENTITY nle "&#8816;" >
+ <!ENTITY NotLessEqual "&#8816;" >
+ <!ENTITY nleq "&#8816;" >
+ <!ENTITY nge "&#8817;" >
+ <!ENTITY NotGreaterEqual "&#8817;" >
+ <!ENTITY ngeq "&#8817;" >
+ <!ENTITY lsim "&#8818;" >
+ <!ENTITY LessTilde "&#8818;" >
+ <!ENTITY lesssim "&#8818;" >
+ <!ENTITY gsim "&#8819;" >
+ <!ENTITY gtrsim "&#8819;" >
+ <!ENTITY GreaterTilde "&#8819;" >
+ <!ENTITY nlsim "&#8820;" >
+ <!ENTITY NotLessTilde "&#8820;" >
+ <!ENTITY ngsim "&#8821;" >
+ <!ENTITY NotGreaterTilde "&#8821;" >
+ <!ENTITY lg "&#8822;" >
+ <!ENTITY lessgtr "&#8822;" >
+ <!ENTITY LessGreater "&#8822;" >
+ <!ENTITY gl "&#8823;" >
+ <!ENTITY gtrless "&#8823;" >
+ <!ENTITY GreaterLess "&#8823;" >
+ <!ENTITY ntlg "&#8824;" >
+ <!ENTITY NotLessGreater "&#8824;" >
+ <!ENTITY ntgl "&#8825;" >
+ <!ENTITY NotGreaterLess "&#8825;" >
+ <!ENTITY pr "&#8826;" >
+ <!ENTITY Precedes "&#8826;" >
+ <!ENTITY prec "&#8826;" >
+ <!ENTITY sc "&#8827;" >
+ <!ENTITY Succeeds "&#8827;" >
+ <!ENTITY succ "&#8827;" >
+ <!ENTITY prcue "&#8828;" >
+ <!ENTITY PrecedesSlantEqual "&#8828;" >
+ <!ENTITY preccurlyeq "&#8828;" >
+ <!ENTITY sccue "&#8829;" >
+ <!ENTITY SucceedsSlantEqual "&#8829;" >
+ <!ENTITY succcurlyeq "&#8829;" >
+ <!ENTITY prsim "&#8830;" >
+ <!ENTITY precsim "&#8830;" >
+ <!ENTITY PrecedesTilde "&#8830;" >
+ <!ENTITY scsim "&#8831;" >
+ <!ENTITY succsim "&#8831;" >
+ <!ENTITY SucceedsTilde "&#8831;" >
+ <!ENTITY npr "&#8832;" >
+ <!ENTITY nprec "&#8832;" >
+ <!ENTITY NotPrecedes "&#8832;" >
+ <!ENTITY nsc "&#8833;" >
+ <!ENTITY nsucc "&#8833;" >
+ <!ENTITY NotSucceeds "&#8833;" >
+ <!ENTITY sub "&#8834;" >
+ <!ENTITY subset "&#8834;" >
+ <!ENTITY sup "&#8835;" >
+ <!ENTITY supset "&#8835;" >
+ <!ENTITY Superset "&#8835;" >
+ <!ENTITY nsub "&#8836;" >
+ <!ENTITY nsup "&#8837;" >
+ <!ENTITY sube "&#8838;" >
+ <!ENTITY SubsetEqual "&#8838;" >
+ <!ENTITY subseteq "&#8838;" >
+ <!ENTITY supe "&#8839;" >
+ <!ENTITY supseteq "&#8839;" >
+ <!ENTITY SupersetEqual "&#8839;" >
+ <!ENTITY nsube "&#8840;" >
+ <!ENTITY nsubseteq "&#8840;" >
+ <!ENTITY NotSubsetEqual "&#8840;" >
+ <!ENTITY nsupe "&#8841;" >
+ <!ENTITY nsupseteq "&#8841;" >
+ <!ENTITY NotSupersetEqual "&#8841;" >
+ <!ENTITY subne "&#8842;" >
+ <!ENTITY subsetneq "&#8842;" >
+ <!ENTITY supne "&#8843;" >
+ <!ENTITY supsetneq "&#8843;" >
+ <!ENTITY cupdot "&#8845;" >
+ <!ENTITY uplus "&#8846;" >
+ <!ENTITY UnionPlus "&#8846;" >
+ <!ENTITY sqsub "&#8847;" >
+ <!ENTITY SquareSubset "&#8847;" >
+ <!ENTITY sqsubset "&#8847;" >
+ <!ENTITY sqsup "&#8848;" >
+ <!ENTITY SquareSuperset "&#8848;" >
+ <!ENTITY sqsupset "&#8848;" >
+ <!ENTITY sqsube "&#8849;" >
+ <!ENTITY SquareSubsetEqual "&#8849;" >
+ <!ENTITY sqsubseteq "&#8849;" >
+ <!ENTITY sqsupe "&#8850;" >
+ <!ENTITY SquareSupersetEqual "&#8850;" >
+ <!ENTITY sqsupseteq "&#8850;" >
+ <!ENTITY sqcap "&#8851;" >
+ <!ENTITY SquareIntersection "&#8851;" >
+ <!ENTITY sqcup "&#8852;" >
+ <!ENTITY SquareUnion "&#8852;" >
+ <!ENTITY oplus "&#8853;" >
+ <!ENTITY CirclePlus "&#8853;" >
+ <!ENTITY ominus "&#8854;" >
+ <!ENTITY CircleMinus "&#8854;" >
+ <!ENTITY otimes "&#8855;" >
+ <!ENTITY CircleTimes "&#8855;" >
+ <!ENTITY osol "&#8856;" >
+ <!ENTITY odot "&#8857;" >
+ <!ENTITY CircleDot "&#8857;" >
+ <!ENTITY ocir "&#8858;" >
+ <!ENTITY circledcirc "&#8858;" >
+ <!ENTITY oast "&#8859;" >
+ <!ENTITY circledast "&#8859;" >
+ <!ENTITY odash "&#8861;" >
+ <!ENTITY circleddash "&#8861;" >
+ <!ENTITY plusb "&#8862;" >
+ <!ENTITY boxplus "&#8862;" >
+ <!ENTITY minusb "&#8863;" >
+ <!ENTITY boxminus "&#8863;" >
+ <!ENTITY timesb "&#8864;" >
+ <!ENTITY boxtimes "&#8864;" >
+ <!ENTITY sdotb "&#8865;" >
+ <!ENTITY dotsquare "&#8865;" >
+ <!ENTITY vdash "&#8866;" >
+ <!ENTITY RightTee "&#8866;" >
+ <!ENTITY dashv "&#8867;" >
+ <!ENTITY LeftTee "&#8867;" >
+ <!ENTITY top "&#8868;" >
+ <!ENTITY DownTee "&#8868;" >
+ <!ENTITY bottom "&#8869;" >
+ <!ENTITY bot "&#8869;" >
+ <!ENTITY perp "&#8869;" >
+ <!ENTITY UpTee "&#8869;" >
+ <!ENTITY models "&#8871;" >
+ <!ENTITY vDash "&#8872;" >
+ <!ENTITY DoubleRightTee "&#8872;" >
+ <!ENTITY Vdash "&#8873;" >
+ <!ENTITY Vvdash "&#8874;" >
+ <!ENTITY VDash "&#8875;" >
+ <!ENTITY nvdash "&#8876;" >
+ <!ENTITY nvDash "&#8877;" >
+ <!ENTITY nVdash "&#8878;" >
+ <!ENTITY nVDash "&#8879;" >
+ <!ENTITY prurel "&#8880;" >
+ <!ENTITY vltri "&#8882;" >
+ <!ENTITY vartriangleleft "&#8882;" >
+ <!ENTITY LeftTriangle "&#8882;" >
+ <!ENTITY vrtri "&#8883;" >
+ <!ENTITY vartriangleright "&#8883;" >
+ <!ENTITY RightTriangle "&#8883;" >
+ <!ENTITY ltrie "&#8884;" >
+ <!ENTITY trianglelefteq "&#8884;" >
+ <!ENTITY LeftTriangleEqual "&#8884;" >
+ <!ENTITY rtrie "&#8885;" >
+ <!ENTITY trianglerighteq "&#8885;" >
+ <!ENTITY RightTriangleEqual "&#8885;" >
+ <!ENTITY origof "&#8886;" >
+ <!ENTITY imof "&#8887;" >
+ <!ENTITY mumap "&#8888;" >
+ <!ENTITY multimap "&#8888;" >
+ <!ENTITY hercon "&#8889;" >
+ <!ENTITY intcal "&#8890;" >
+ <!ENTITY intercal "&#8890;" >
+ <!ENTITY veebar "&#8891;" >
+ <!ENTITY barvee "&#8893;" >
+ <!ENTITY angrtvb "&#8894;" >
+ <!ENTITY lrtri "&#8895;" >
+ <!ENTITY xwedge "&#8896;" >
+ <!ENTITY Wedge "&#8896;" >
+ <!ENTITY bigwedge "&#8896;" >
+ <!ENTITY xvee "&#8897;" >
+ <!ENTITY Vee "&#8897;" >
+ <!ENTITY bigvee "&#8897;" >
+ <!ENTITY xcap "&#8898;" >
+ <!ENTITY Intersection "&#8898;" >
+ <!ENTITY bigcap "&#8898;" >
+ <!ENTITY xcup "&#8899;" >
+ <!ENTITY Union "&#8899;" >
+ <!ENTITY bigcup "&#8899;" >
+ <!ENTITY diam "&#8900;" >
+ <!ENTITY diamond "&#8900;" >
+ <!ENTITY Diamond "&#8900;" >
+ <!ENTITY sdot "&#8901;" >
+ <!ENTITY sstarf "&#8902;" >
+ <!ENTITY Star "&#8902;" >
+ <!ENTITY divonx "&#8903;" >
+ <!ENTITY divideontimes "&#8903;" >
+ <!ENTITY bowtie "&#8904;" >
+ <!ENTITY ltimes "&#8905;" >
+ <!ENTITY rtimes "&#8906;" >
+ <!ENTITY lthree "&#8907;" >
+ <!ENTITY leftthreetimes "&#8907;" >
+ <!ENTITY rthree "&#8908;" >
+ <!ENTITY rightthreetimes "&#8908;" >
+ <!ENTITY bsime "&#8909;" >
+ <!ENTITY backsimeq "&#8909;" >
+ <!ENTITY cuvee "&#8910;" >
+ <!ENTITY curlyvee "&#8910;" >
+ <!ENTITY cuwed "&#8911;" >
+ <!ENTITY curlywedge "&#8911;" >
+ <!ENTITY Sub "&#8912;" >
+ <!ENTITY Subset "&#8912;" >
+ <!ENTITY Sup "&#8913;" >
+ <!ENTITY Supset "&#8913;" >
+ <!ENTITY Cap "&#8914;" >
+ <!ENTITY Cup "&#8915;" >
+ <!ENTITY fork "&#8916;" >
+ <!ENTITY pitchfork "&#8916;" >
+ <!ENTITY epar "&#8917;" >
+ <!ENTITY ltdot "&#8918;" >
+ <!ENTITY lessdot "&#8918;" >
+ <!ENTITY gtdot "&#8919;" >
+ <!ENTITY gtrdot "&#8919;" >
+ <!ENTITY Ll "&#8920;" >
+ <!ENTITY Gg "&#8921;" >
+ <!ENTITY ggg "&#8921;" >
+ <!ENTITY leg "&#8922;" >
+ <!ENTITY LessEqualGreater "&#8922;" >
+ <!ENTITY lesseqgtr "&#8922;" >
+ <!ENTITY gel "&#8923;" >
+ <!ENTITY gtreqless "&#8923;" >
+ <!ENTITY GreaterEqualLess "&#8923;" >
+ <!ENTITY cuepr "&#8926;" >
+ <!ENTITY curlyeqprec "&#8926;" >
+ <!ENTITY cuesc "&#8927;" >
+ <!ENTITY curlyeqsucc "&#8927;" >
+ <!ENTITY nprcue "&#8928;" >
+ <!ENTITY NotPrecedesSlantEqual "&#8928;" >
+ <!ENTITY nsccue "&#8929;" >
+ <!ENTITY NotSucceedsSlantEqual "&#8929;" >
+ <!ENTITY nsqsube "&#8930;" >
+ <!ENTITY NotSquareSubsetEqual "&#8930;" >
+ <!ENTITY nsqsupe "&#8931;" >
+ <!ENTITY NotSquareSupersetEqual "&#8931;" >
+ <!ENTITY lnsim "&#8934;" >
+ <!ENTITY gnsim "&#8935;" >
+ <!ENTITY prnsim "&#8936;" >
+ <!ENTITY precnsim "&#8936;" >
+ <!ENTITY scnsim "&#8937;" >
+ <!ENTITY succnsim "&#8937;" >
+ <!ENTITY nltri "&#8938;" >
+ <!ENTITY ntriangleleft "&#8938;" >
+ <!ENTITY NotLeftTriangle "&#8938;" >
+ <!ENTITY nrtri "&#8939;" >
+ <!ENTITY ntriangleright "&#8939;" >
+ <!ENTITY NotRightTriangle "&#8939;" >
+ <!ENTITY nltrie "&#8940;" >
+ <!ENTITY ntrianglelefteq "&#8940;" >
+ <!ENTITY NotLeftTriangleEqual "&#8940;" >
+ <!ENTITY nrtrie "&#8941;" >
+ <!ENTITY ntrianglerighteq "&#8941;" >
+ <!ENTITY NotRightTriangleEqual "&#8941;" >
+ <!ENTITY vellip "&#8942;" >
+ <!ENTITY ctdot "&#8943;" >
+ <!ENTITY utdot "&#8944;" >
+ <!ENTITY dtdot "&#8945;" >
+ <!ENTITY disin "&#8946;" >
+ <!ENTITY isinsv "&#8947;" >
+ <!ENTITY isins "&#8948;" >
+ <!ENTITY isindot "&#8949;" >
+ <!ENTITY notinvc "&#8950;" >
+ <!ENTITY notinvb "&#8951;" >
+ <!ENTITY isinE "&#8953;" >
+ <!ENTITY nisd "&#8954;" >
+ <!ENTITY xnis "&#8955;" >
+ <!ENTITY nis "&#8956;" >
+ <!ENTITY notnivc "&#8957;" >
+ <!ENTITY notnivb "&#8958;" >
+ <!ENTITY barwed "&#8965;" >
+ <!ENTITY barwedge "&#8965;" >
+ <!ENTITY Barwed "&#8966;" >
+ <!ENTITY doublebarwedge "&#8966;" >
+ <!ENTITY lceil "&#8968;" >
+ <!ENTITY LeftCeiling "&#8968;" >
+ <!ENTITY rceil "&#8969;" >
+ <!ENTITY RightCeiling "&#8969;" >
+ <!ENTITY lfloor "&#8970;" >
+ <!ENTITY LeftFloor "&#8970;" >
+ <!ENTITY rfloor "&#8971;" >
+ <!ENTITY RightFloor "&#8971;" >
+ <!ENTITY drcrop "&#8972;" >
+ <!ENTITY dlcrop "&#8973;" >
+ <!ENTITY urcrop "&#8974;" >
+ <!ENTITY ulcrop "&#8975;" >
+ <!ENTITY bnot "&#8976;" >
+ <!ENTITY profline "&#8978;" >
+ <!ENTITY profsurf "&#8979;" >
+ <!ENTITY telrec "&#8981;" >
+ <!ENTITY target "&#8982;" >
+ <!ENTITY ulcorn "&#8988;" >
+ <!ENTITY ulcorner "&#8988;" >
+ <!ENTITY urcorn "&#8989;" >
+ <!ENTITY urcorner "&#8989;" >
+ <!ENTITY dlcorn "&#8990;" >
+ <!ENTITY llcorner "&#8990;" >
+ <!ENTITY drcorn "&#8991;" >
+ <!ENTITY lrcorner "&#8991;" >
+ <!ENTITY frown "&#8994;" >
+ <!ENTITY sfrown "&#8994;" >
+ <!ENTITY smile "&#8995;" >
+ <!ENTITY ssmile "&#8995;" >
+ <!ENTITY cylcty "&#9005;" >
+ <!ENTITY profalar "&#9006;" >
+ <!ENTITY topbot "&#9014;" >
+ <!ENTITY ovbar "&#9021;" >
+ <!ENTITY solbar "&#9023;" >
+ <!ENTITY angzarr "&#9084;" >
+ <!ENTITY lmoust "&#9136;" >
+ <!ENTITY lmoustache "&#9136;" >
+ <!ENTITY rmoust "&#9137;" >
+ <!ENTITY rmoustache "&#9137;" >
+ <!ENTITY tbrk "&#9140;" >
+ <!ENTITY OverBracket "&#9140;" >
+ <!ENTITY bbrk "&#9141;" >
+ <!ENTITY UnderBracket "&#9141;" >
+ <!ENTITY bbrktbrk "&#9142;" >
+ <!ENTITY OverParenthesis "&#9180;" >
+ <!ENTITY UnderParenthesis "&#9181;" >
+ <!ENTITY OverBrace "&#9182;" >
+ <!ENTITY UnderBrace "&#9183;" >
+ <!ENTITY trpezium "&#9186;" >
+ <!ENTITY elinters "&#9191;" >
+ <!ENTITY blank "&#9251;" >
+ <!ENTITY oS "&#9416;" >
+ <!ENTITY circledS "&#9416;" >
+ <!ENTITY boxh "&#9472;" >
+ <!ENTITY HorizontalLine "&#9472;" >
+ <!ENTITY boxv "&#9474;" >
+ <!ENTITY boxdr "&#9484;" >
+ <!ENTITY boxdl "&#9488;" >
+ <!ENTITY boxur "&#9492;" >
+ <!ENTITY boxul "&#9496;" >
+ <!ENTITY boxvr "&#9500;" >
+ <!ENTITY boxvl "&#9508;" >
+ <!ENTITY boxhd "&#9516;" >
+ <!ENTITY boxhu "&#9524;" >
+ <!ENTITY boxvh "&#9532;" >
+ <!ENTITY boxH "&#9552;" >
+ <!ENTITY boxV "&#9553;" >
+ <!ENTITY boxdR "&#9554;" >
+ <!ENTITY boxDr "&#9555;" >
+ <!ENTITY boxDR "&#9556;" >
+ <!ENTITY boxdL "&#9557;" >
+ <!ENTITY boxDl "&#9558;" >
+ <!ENTITY boxDL "&#9559;" >
+ <!ENTITY boxuR "&#9560;" >
+ <!ENTITY boxUr "&#9561;" >
+ <!ENTITY boxUR "&#9562;" >
+ <!ENTITY boxuL "&#9563;" >
+ <!ENTITY boxUl "&#9564;" >
+ <!ENTITY boxUL "&#9565;" >
+ <!ENTITY boxvR "&#9566;" >
+ <!ENTITY boxVr "&#9567;" >
+ <!ENTITY boxVR "&#9568;" >
+ <!ENTITY boxvL "&#9569;" >
+ <!ENTITY boxVl "&#9570;" >
+ <!ENTITY boxVL "&#9571;" >
+ <!ENTITY boxHd "&#9572;" >
+ <!ENTITY boxhD "&#9573;" >
+ <!ENTITY boxHD "&#9574;" >
+ <!ENTITY boxHu "&#9575;" >
+ <!ENTITY boxhU "&#9576;" >
+ <!ENTITY boxHU "&#9577;" >
+ <!ENTITY boxvH "&#9578;" >
+ <!ENTITY boxVh "&#9579;" >
+ <!ENTITY boxVH "&#9580;" >
+ <!ENTITY uhblk "&#9600;" >
+ <!ENTITY lhblk "&#9604;" >
+ <!ENTITY block "&#9608;" >
+ <!ENTITY blk14 "&#9617;" >
+ <!ENTITY blk12 "&#9618;" >
+ <!ENTITY blk34 "&#9619;" >
+ <!ENTITY squ "&#9633;" >
+ <!ENTITY square "&#9633;" >
+ <!ENTITY Square "&#9633;" >
+ <!ENTITY squf "&#9642;" >
+ <!ENTITY squarf "&#9642;" >
+ <!ENTITY blacksquare "&#9642;" >
+ <!ENTITY FilledVerySmallSquare "&#9642;" >
+ <!ENTITY EmptyVerySmallSquare "&#9643;" >
+ <!ENTITY rect "&#9645;" >
+ <!ENTITY marker "&#9646;" >
+ <!ENTITY fltns "&#9649;" >
+ <!ENTITY xutri "&#9651;" >
+ <!ENTITY bigtriangleup "&#9651;" >
+ <!ENTITY utrif "&#9652;" >
+ <!ENTITY blacktriangle "&#9652;" >
+ <!ENTITY utri "&#9653;" >
+ <!ENTITY triangle "&#9653;" >
+ <!ENTITY rtrif "&#9656;" >
+ <!ENTITY blacktriangleright "&#9656;" >
+ <!ENTITY rtri "&#9657;" >
+ <!ENTITY triangleright "&#9657;" >
+ <!ENTITY xdtri "&#9661;" >
+ <!ENTITY bigtriangledown "&#9661;" >
+ <!ENTITY dtrif "&#9662;" >
+ <!ENTITY blacktriangledown "&#9662;" >
+ <!ENTITY dtri "&#9663;" >
+ <!ENTITY triangledown "&#9663;" >
+ <!ENTITY ltrif "&#9666;" >
+ <!ENTITY blacktriangleleft "&#9666;" >
+ <!ENTITY ltri "&#9667;" >
+ <!ENTITY triangleleft "&#9667;" >
+ <!ENTITY loz "&#9674;" >
+ <!ENTITY lozenge "&#9674;" >
+ <!ENTITY cir "&#9675;" >
+ <!ENTITY tridot "&#9708;" >
+ <!ENTITY xcirc "&#9711;" >
+ <!ENTITY bigcirc "&#9711;" >
+ <!ENTITY ultri "&#9720;" >
+ <!ENTITY urtri "&#9721;" >
+ <!ENTITY lltri "&#9722;" >
+ <!ENTITY EmptySmallSquare "&#9723;" >
+ <!ENTITY FilledSmallSquare "&#9724;" >
+ <!ENTITY starf "&#9733;" >
+ <!ENTITY bigstar "&#9733;" >
+ <!ENTITY star "&#9734;" >
+ <!ENTITY phone "&#9742;" >
+ <!ENTITY female "&#9792;" >
+ <!ENTITY male "&#9794;" >
+ <!ENTITY spades "&#9824;" >
+ <!ENTITY spadesuit "&#9824;" >
+ <!ENTITY clubs "&#9827;" >
+ <!ENTITY clubsuit "&#9827;" >
+ <!ENTITY hearts "&#9829;" >
+ <!ENTITY heartsuit "&#9829;" >
+ <!ENTITY diams "&#9830;" >
+ <!ENTITY diamondsuit "&#9830;" >
+ <!ENTITY sung "&#9834;" >
+ <!ENTITY flat "&#9837;" >
+ <!ENTITY natur "&#9838;" >
+ <!ENTITY natural "&#9838;" >
+ <!ENTITY sharp "&#9839;" >
+ <!ENTITY check "&#10003;" >
+ <!ENTITY checkmark "&#10003;" >
+ <!ENTITY cross "&#10007;" >
+ <!ENTITY malt "&#10016;" >
+ <!ENTITY maltese "&#10016;" >
+ <!ENTITY sext "&#10038;" >
+ <!ENTITY VerticalSeparator "&#10072;" >
+ <!ENTITY lbbrk "&#10098;" >
+ <!ENTITY rbbrk "&#10099;" >
+ <!ENTITY lobrk "&#10214;" >
+ <!ENTITY LeftDoubleBracket "&#10214;" >
+ <!ENTITY robrk "&#10215;" >
+ <!ENTITY RightDoubleBracket "&#10215;" >
+ <!ENTITY lang "&#10216;" >
+ <!ENTITY LeftAngleBracket "&#10216;" >
+ <!ENTITY langle "&#10216;" >
+ <!ENTITY rang "&#10217;" >
+ <!ENTITY RightAngleBracket "&#10217;" >
+ <!ENTITY rangle "&#10217;" >
+ <!ENTITY Lang "&#10218;" >
+ <!ENTITY Rang "&#10219;" >
+ <!ENTITY loang "&#10220;" >
+ <!ENTITY roang "&#10221;" >
+ <!ENTITY xlarr "&#10229;" >
+ <!ENTITY longleftarrow "&#10229;" >
+ <!ENTITY LongLeftArrow "&#10229;" >
+ <!ENTITY xrarr "&#10230;" >
+ <!ENTITY longrightarrow "&#10230;" >
+ <!ENTITY LongRightArrow "&#10230;" >
+ <!ENTITY xharr "&#10231;" >
+ <!ENTITY longleftrightarrow "&#10231;" >
+ <!ENTITY LongLeftRightArrow "&#10231;" >
+ <!ENTITY xlArr "&#10232;" >
+ <!ENTITY Longleftarrow "&#10232;" >
+ <!ENTITY DoubleLongLeftArrow "&#10232;" >
+ <!ENTITY xrArr "&#10233;" >
+ <!ENTITY Longrightarrow "&#10233;" >
+ <!ENTITY DoubleLongRightArrow "&#10233;" >
+ <!ENTITY xhArr "&#10234;" >
+ <!ENTITY Longleftrightarrow "&#10234;" >
+ <!ENTITY DoubleLongLeftRightArrow "&#10234;" >
+ <!ENTITY xmap "&#10236;" >
+ <!ENTITY longmapsto "&#10236;" >
+ <!ENTITY dzigrarr "&#10239;" >
+ <!ENTITY nvlArr "&#10498;" >
+ <!ENTITY nvrArr "&#10499;" >
+ <!ENTITY nvHarr "&#10500;" >
+ <!ENTITY Map "&#10501;" >
+ <!ENTITY lbarr "&#10508;" >
+ <!ENTITY rbarr "&#10509;" >
+ <!ENTITY bkarow "&#10509;" >
+ <!ENTITY lBarr "&#10510;" >
+ <!ENTITY rBarr "&#10511;" >
+ <!ENTITY dbkarow "&#10511;" >
+ <!ENTITY RBarr "&#10512;" >
+ <!ENTITY drbkarow "&#10512;" >
+ <!ENTITY DDotrahd "&#10513;" >
+ <!ENTITY UpArrowBar "&#10514;" >
+ <!ENTITY DownArrowBar "&#10515;" >
+ <!ENTITY Rarrtl "&#10518;" >
+ <!ENTITY latail "&#10521;" >
+ <!ENTITY ratail "&#10522;" >
+ <!ENTITY lAtail "&#10523;" >
+ <!ENTITY rAtail "&#10524;" >
+ <!ENTITY larrfs "&#10525;" >
+ <!ENTITY rarrfs "&#10526;" >
+ <!ENTITY larrbfs "&#10527;" >
+ <!ENTITY rarrbfs "&#10528;" >
+ <!ENTITY nwarhk "&#10531;" >
+ <!ENTITY nearhk "&#10532;" >
+ <!ENTITY searhk "&#10533;" >
+ <!ENTITY hksearow "&#10533;" >
+ <!ENTITY swarhk "&#10534;" >
+ <!ENTITY hkswarow "&#10534;" >
+ <!ENTITY nwnear "&#10535;" >
+ <!ENTITY nesear "&#10536;" >
+ <!ENTITY toea "&#10536;" >
+ <!ENTITY seswar "&#10537;" >
+ <!ENTITY tosa "&#10537;" >
+ <!ENTITY swnwar "&#10538;" >
+ <!ENTITY rarrc "&#10547;" >
+ <!ENTITY cudarrr "&#10549;" >
+ <!ENTITY ldca "&#10550;" >
+ <!ENTITY rdca "&#10551;" >
+ <!ENTITY cudarrl "&#10552;" >
+ <!ENTITY larrpl "&#10553;" >
+ <!ENTITY curarrm "&#10556;" >
+ <!ENTITY cularrp "&#10557;" >
+ <!ENTITY rarrpl "&#10565;" >
+ <!ENTITY harrcir "&#10568;" >
+ <!ENTITY Uarrocir "&#10569;" >
+ <!ENTITY lurdshar "&#10570;" >
+ <!ENTITY ldrushar "&#10571;" >
+ <!ENTITY LeftRightVector "&#10574;" >
+ <!ENTITY RightUpDownVector "&#10575;" >
+ <!ENTITY DownLeftRightVector "&#10576;" >
+ <!ENTITY LeftUpDownVector "&#10577;" >
+ <!ENTITY LeftVectorBar "&#10578;" >
+ <!ENTITY RightVectorBar "&#10579;" >
+ <!ENTITY RightUpVectorBar "&#10580;" >
+ <!ENTITY RightDownVectorBar "&#10581;" >
+ <!ENTITY DownLeftVectorBar "&#10582;" >
+ <!ENTITY DownRightVectorBar "&#10583;" >
+ <!ENTITY LeftUpVectorBar "&#10584;" >
+ <!ENTITY LeftDownVectorBar "&#10585;" >
+ <!ENTITY LeftTeeVector "&#10586;" >
+ <!ENTITY RightTeeVector "&#10587;" >
+ <!ENTITY RightUpTeeVector "&#10588;" >
+ <!ENTITY RightDownTeeVector "&#10589;" >
+ <!ENTITY DownLeftTeeVector "&#10590;" >
+ <!ENTITY DownRightTeeVector "&#10591;" >
+ <!ENTITY LeftUpTeeVector "&#10592;" >
+ <!ENTITY LeftDownTeeVector "&#10593;" >
+ <!ENTITY lHar "&#10594;" >
+ <!ENTITY uHar "&#10595;" >
+ <!ENTITY rHar "&#10596;" >
+ <!ENTITY dHar "&#10597;" >
+ <!ENTITY luruhar "&#10598;" >
+ <!ENTITY ldrdhar "&#10599;" >
+ <!ENTITY ruluhar "&#10600;" >
+ <!ENTITY rdldhar "&#10601;" >
+ <!ENTITY lharul "&#10602;" >
+ <!ENTITY llhard "&#10603;" >
+ <!ENTITY rharul "&#10604;" >
+ <!ENTITY lrhard "&#10605;" >
+ <!ENTITY udhar "&#10606;" >
+ <!ENTITY UpEquilibrium "&#10606;" >
+ <!ENTITY duhar "&#10607;" >
+ <!ENTITY ReverseUpEquilibrium "&#10607;" >
+ <!ENTITY RoundImplies "&#10608;" >
+ <!ENTITY erarr "&#10609;" >
+ <!ENTITY simrarr "&#10610;" >
+ <!ENTITY larrsim "&#10611;" >
+ <!ENTITY rarrsim "&#10612;" >
+ <!ENTITY rarrap "&#10613;" >
+ <!ENTITY ltlarr "&#10614;" >
+ <!ENTITY gtrarr "&#10616;" >
+ <!ENTITY subrarr "&#10617;" >
+ <!ENTITY suplarr "&#10619;" >
+ <!ENTITY lfisht "&#10620;" >
+ <!ENTITY rfisht "&#10621;" >
+ <!ENTITY ufisht "&#10622;" >
+ <!ENTITY dfisht "&#10623;" >
+ <!ENTITY lopar "&#10629;" >
+ <!ENTITY ropar "&#10630;" >
+ <!ENTITY lbrke "&#10635;" >
+ <!ENTITY rbrke "&#10636;" >
+ <!ENTITY lbrkslu "&#10637;" >
+ <!ENTITY rbrksld "&#10638;" >
+ <!ENTITY lbrksld "&#10639;" >
+ <!ENTITY rbrkslu "&#10640;" >
+ <!ENTITY langd "&#10641;" >
+ <!ENTITY rangd "&#10642;" >
+ <!ENTITY lparlt "&#10643;" >
+ <!ENTITY rpargt "&#10644;" >
+ <!ENTITY gtlPar "&#10645;" >
+ <!ENTITY ltrPar "&#10646;" >
+ <!ENTITY vzigzag "&#10650;" >
+ <!ENTITY vangrt "&#10652;" >
+ <!ENTITY angrtvbd "&#10653;" >
+ <!ENTITY ange "&#10660;" >
+ <!ENTITY range "&#10661;" >
+ <!ENTITY dwangle "&#10662;" >
+ <!ENTITY uwangle "&#10663;" >
+ <!ENTITY angmsdaa "&#10664;" >
+ <!ENTITY angmsdab "&#10665;" >
+ <!ENTITY angmsdac "&#10666;" >
+ <!ENTITY angmsdad "&#10667;" >
+ <!ENTITY angmsdae "&#10668;" >
+ <!ENTITY angmsdaf "&#10669;" >
+ <!ENTITY angmsdag "&#10670;" >
+ <!ENTITY angmsdah "&#10671;" >
+ <!ENTITY bemptyv "&#10672;" >
+ <!ENTITY demptyv "&#10673;" >
+ <!ENTITY cemptyv "&#10674;" >
+ <!ENTITY raemptyv "&#10675;" >
+ <!ENTITY laemptyv "&#10676;" >
+ <!ENTITY ohbar "&#10677;" >
+ <!ENTITY omid "&#10678;" >
+ <!ENTITY opar "&#10679;" >
+ <!ENTITY operp "&#10681;" >
+ <!ENTITY olcross "&#10683;" >
+ <!ENTITY odsold "&#10684;" >
+ <!ENTITY olcir "&#10686;" >
+ <!ENTITY ofcir "&#10687;" >
+ <!ENTITY olt "&#10688;" >
+ <!ENTITY ogt "&#10689;" >
+ <!ENTITY cirscir "&#10690;" >
+ <!ENTITY cirE "&#10691;" >
+ <!ENTITY solb "&#10692;" >
+ <!ENTITY bsolb "&#10693;" >
+ <!ENTITY boxbox "&#10697;" >
+ <!ENTITY trisb "&#10701;" >
+ <!ENTITY rtriltri "&#10702;" >
+ <!ENTITY LeftTriangleBar "&#10703;" >
+ <!ENTITY RightTriangleBar "&#10704;" >
+ <!ENTITY race "&#10714;" >
+ <!ENTITY iinfin "&#10716;" >
+ <!ENTITY infintie "&#10717;" >
+ <!ENTITY nvinfin "&#10718;" >
+ <!ENTITY eparsl "&#10723;" >
+ <!ENTITY smeparsl "&#10724;" >
+ <!ENTITY eqvparsl "&#10725;" >
+ <!ENTITY lozf "&#10731;" >
+ <!ENTITY blacklozenge "&#10731;" >
+ <!ENTITY RuleDelayed "&#10740;" >
+ <!ENTITY dsol "&#10742;" >
+ <!ENTITY xodot "&#10752;" >
+ <!ENTITY bigodot "&#10752;" >
+ <!ENTITY xoplus "&#10753;" >
+ <!ENTITY bigoplus "&#10753;" >
+ <!ENTITY xotime "&#10754;" >
+ <!ENTITY bigotimes "&#10754;" >
+ <!ENTITY xuplus "&#10756;" >
+ <!ENTITY biguplus "&#10756;" >
+ <!ENTITY xsqcup "&#10758;" >
+ <!ENTITY bigsqcup "&#10758;" >
+ <!ENTITY qint "&#10764;" >
+ <!ENTITY iiiint "&#10764;" >
+ <!ENTITY fpartint "&#10765;" >
+ <!ENTITY cirfnint "&#10768;" >
+ <!ENTITY awint "&#10769;" >
+ <!ENTITY rppolint "&#10770;" >
+ <!ENTITY scpolint "&#10771;" >
+ <!ENTITY npolint "&#10772;" >
+ <!ENTITY pointint "&#10773;" >
+ <!ENTITY quatint "&#10774;" >
+ <!ENTITY intlarhk "&#10775;" >
+ <!ENTITY pluscir "&#10786;" >
+ <!ENTITY plusacir "&#10787;" >
+ <!ENTITY simplus "&#10788;" >
+ <!ENTITY plusdu "&#10789;" >
+ <!ENTITY plussim "&#10790;" >
+ <!ENTITY plustwo "&#10791;" >
+ <!ENTITY mcomma "&#10793;" >
+ <!ENTITY minusdu "&#10794;" >
+ <!ENTITY loplus "&#10797;" >
+ <!ENTITY roplus "&#10798;" >
+ <!ENTITY Cross "&#10799;" >
+ <!ENTITY timesd "&#10800;" >
+ <!ENTITY timesbar "&#10801;" >
+ <!ENTITY smashp "&#10803;" >
+ <!ENTITY lotimes "&#10804;" >
+ <!ENTITY rotimes "&#10805;" >
+ <!ENTITY otimesas "&#10806;" >
+ <!ENTITY Otimes "&#10807;" >
+ <!ENTITY odiv "&#10808;" >
+ <!ENTITY triplus "&#10809;" >
+ <!ENTITY triminus "&#10810;" >
+ <!ENTITY tritime "&#10811;" >
+ <!ENTITY iprod "&#10812;" >
+ <!ENTITY intprod "&#10812;" >
+ <!ENTITY amalg "&#10815;" >
+ <!ENTITY capdot "&#10816;" >
+ <!ENTITY ncup "&#10818;" >
+ <!ENTITY ncap "&#10819;" >
+ <!ENTITY capand "&#10820;" >
+ <!ENTITY cupor "&#10821;" >
+ <!ENTITY cupcap "&#10822;" >
+ <!ENTITY capcup "&#10823;" >
+ <!ENTITY cupbrcap "&#10824;" >
+ <!ENTITY capbrcup "&#10825;" >
+ <!ENTITY cupcup "&#10826;" >
+ <!ENTITY capcap "&#10827;" >
+ <!ENTITY ccups "&#10828;" >
+ <!ENTITY ccaps "&#10829;" >
+ <!ENTITY ccupssm "&#10832;" >
+ <!ENTITY And "&#10835;" >
+ <!ENTITY Or "&#10836;" >
+ <!ENTITY andand "&#10837;" >
+ <!ENTITY oror "&#10838;" >
+ <!ENTITY orslope "&#10839;" >
+ <!ENTITY andslope "&#10840;" >
+ <!ENTITY andv "&#10842;" >
+ <!ENTITY orv "&#10843;" >
+ <!ENTITY andd "&#10844;" >
+ <!ENTITY ord "&#10845;" >
+ <!ENTITY wedbar "&#10847;" >
+ <!ENTITY sdote "&#10854;" >
+ <!ENTITY simdot "&#10858;" >
+ <!ENTITY congdot "&#10861;" >
+ <!ENTITY easter "&#10862;" >
+ <!ENTITY apacir "&#10863;" >
+ <!ENTITY apE "&#10864;" >
+ <!ENTITY eplus "&#10865;" >
+ <!ENTITY pluse "&#10866;" >
+ <!ENTITY Esim "&#10867;" >
+ <!ENTITY Colone "&#10868;" >
+ <!ENTITY Equal "&#10869;" >
+ <!ENTITY eDDot "&#10871;" >
+ <!ENTITY ddotseq "&#10871;" >
+ <!ENTITY equivDD "&#10872;" >
+ <!ENTITY ltcir "&#10873;" >
+ <!ENTITY gtcir "&#10874;" >
+ <!ENTITY ltquest "&#10875;" >
+ <!ENTITY gtquest "&#10876;" >
+ <!ENTITY les "&#10877;" >
+ <!ENTITY LessSlantEqual "&#10877;" >
+ <!ENTITY leqslant "&#10877;" >
+ <!ENTITY ges "&#10878;" >
+ <!ENTITY GreaterSlantEqual "&#10878;" >
+ <!ENTITY geqslant "&#10878;" >
+ <!ENTITY lesdot "&#10879;" >
+ <!ENTITY gesdot "&#10880;" >
+ <!ENTITY lesdoto "&#10881;" >
+ <!ENTITY gesdoto "&#10882;" >
+ <!ENTITY lesdotor "&#10883;" >
+ <!ENTITY gesdotol "&#10884;" >
+ <!ENTITY lap "&#10885;" >
+ <!ENTITY lessapprox "&#10885;" >
+ <!ENTITY gap "&#10886;" >
+ <!ENTITY gtrapprox "&#10886;" >
+ <!ENTITY lne "&#10887;" >
+ <!ENTITY lneq "&#10887;" >
+ <!ENTITY gne "&#10888;" >
+ <!ENTITY gneq "&#10888;" >
+ <!ENTITY lnap "&#10889;" >
+ <!ENTITY lnapprox "&#10889;" >
+ <!ENTITY gnap "&#10890;" >
+ <!ENTITY gnapprox "&#10890;" >
+ <!ENTITY lEg "&#10891;" >
+ <!ENTITY lesseqqgtr "&#10891;" >
+ <!ENTITY gEl "&#10892;" >
+ <!ENTITY gtreqqless "&#10892;" >
+ <!ENTITY lsime "&#10893;" >
+ <!ENTITY gsime "&#10894;" >
+ <!ENTITY lsimg "&#10895;" >
+ <!ENTITY gsiml "&#10896;" >
+ <!ENTITY lgE "&#10897;" >
+ <!ENTITY glE "&#10898;" >
+ <!ENTITY lesges "&#10899;" >
+ <!ENTITY gesles "&#10900;" >
+ <!ENTITY els "&#10901;" >
+ <!ENTITY eqslantless "&#10901;" >
+ <!ENTITY egs "&#10902;" >
+ <!ENTITY eqslantgtr "&#10902;" >
+ <!ENTITY elsdot "&#10903;" >
+ <!ENTITY egsdot "&#10904;" >
+ <!ENTITY el "&#10905;" >
+ <!ENTITY eg "&#10906;" >
+ <!ENTITY siml "&#10909;" >
+ <!ENTITY simg "&#10910;" >
+ <!ENTITY simlE "&#10911;" >
+ <!ENTITY simgE "&#10912;" >
+ <!ENTITY LessLess "&#10913;" >
+ <!ENTITY GreaterGreater "&#10914;" >
+ <!ENTITY glj "&#10916;" >
+ <!ENTITY gla "&#10917;" >
+ <!ENTITY ltcc "&#10918;" >
+ <!ENTITY gtcc "&#10919;" >
+ <!ENTITY lescc "&#10920;" >
+ <!ENTITY gescc "&#10921;" >
+ <!ENTITY smt "&#10922;" >
+ <!ENTITY lat "&#10923;" >
+ <!ENTITY smte "&#10924;" >
+ <!ENTITY late "&#10925;" >
+ <!ENTITY bumpE "&#10926;" >
+ <!ENTITY pre "&#10927;" >
+ <!ENTITY preceq "&#10927;" >
+ <!ENTITY PrecedesEqual "&#10927;" >
+ <!ENTITY sce "&#10928;" >
+ <!ENTITY succeq "&#10928;" >
+ <!ENTITY SucceedsEqual "&#10928;" >
+ <!ENTITY prE "&#10931;" >
+ <!ENTITY scE "&#10932;" >
+ <!ENTITY prnE "&#10933;" >
+ <!ENTITY precneqq "&#10933;" >
+ <!ENTITY scnE "&#10934;" >
+ <!ENTITY succneqq "&#10934;" >
+ <!ENTITY prap "&#10935;" >
+ <!ENTITY precapprox "&#10935;" >
+ <!ENTITY scap "&#10936;" >
+ <!ENTITY succapprox "&#10936;" >
+ <!ENTITY prnap "&#10937;" >
+ <!ENTITY precnapprox "&#10937;" >
+ <!ENTITY scnap "&#10938;" >
+ <!ENTITY succnapprox "&#10938;" >
+ <!ENTITY Pr "&#10939;" >
+ <!ENTITY Sc "&#10940;" >
+ <!ENTITY subdot "&#10941;" >
+ <!ENTITY supdot "&#10942;" >
+ <!ENTITY subplus "&#10943;" >
+ <!ENTITY supplus "&#10944;" >
+ <!ENTITY submult "&#10945;" >
+ <!ENTITY supmult "&#10946;" >
+ <!ENTITY subedot "&#10947;" >
+ <!ENTITY supedot "&#10948;" >
+ <!ENTITY subE "&#10949;" >
+ <!ENTITY subseteqq "&#10949;" >
+ <!ENTITY supE "&#10950;" >
+ <!ENTITY supseteqq "&#10950;" >
+ <!ENTITY subsim "&#10951;" >
+ <!ENTITY supsim "&#10952;" >
+ <!ENTITY subnE "&#10955;" >
+ <!ENTITY subsetneqq "&#10955;" >
+ <!ENTITY supnE "&#10956;" >
+ <!ENTITY supsetneqq "&#10956;" >
+ <!ENTITY csub "&#10959;" >
+ <!ENTITY csup "&#10960;" >
+ <!ENTITY csube "&#10961;" >
+ <!ENTITY csupe "&#10962;" >
+ <!ENTITY subsup "&#10963;" >
+ <!ENTITY supsub "&#10964;" >
+ <!ENTITY subsub "&#10965;" >
+ <!ENTITY supsup "&#10966;" >
+ <!ENTITY suphsub "&#10967;" >
+ <!ENTITY supdsub "&#10968;" >
+ <!ENTITY forkv "&#10969;" >
+ <!ENTITY topfork "&#10970;" >
+ <!ENTITY mlcp "&#10971;" >
+ <!ENTITY Dashv "&#10980;" >
+ <!ENTITY DoubleLeftTee "&#10980;" >
+ <!ENTITY Vdashl "&#10982;" >
+ <!ENTITY Barv "&#10983;" >
+ <!ENTITY vBar "&#10984;" >
+ <!ENTITY vBarv "&#10985;" >
+ <!ENTITY Vbar "&#10987;" >
+ <!ENTITY Not "&#10988;" >
+ <!ENTITY bNot "&#10989;" >
+ <!ENTITY rnmid "&#10990;" >
+ <!ENTITY cirmid "&#10991;" >
+ <!ENTITY midcir "&#10992;" >
+ <!ENTITY topcir "&#10993;" >
+ <!ENTITY nhpar "&#10994;" >
+ <!ENTITY parsim "&#10995;" >
+ <!ENTITY parsl "&#11005;" >
+ <!ENTITY fflig "&#64256;" >
+ <!ENTITY filig "&#64257;" >
+ <!ENTITY fllig "&#64258;" >
+ <!ENTITY ffilig "&#64259;" >
+ <!ENTITY ffllig "&#64260;" >
+ <!ENTITY Ascr "&#119964;" >
+ <!ENTITY Cscr "&#119966;" >
+ <!ENTITY Dscr "&#119967;" >
+ <!ENTITY Gscr "&#119970;" >
+ <!ENTITY Jscr "&#119973;" >
+ <!ENTITY Kscr "&#119974;" >
+ <!ENTITY Nscr "&#119977;" >
+ <!ENTITY Oscr "&#119978;" >
+ <!ENTITY Pscr "&#119979;" >
+ <!ENTITY Qscr "&#119980;" >
+ <!ENTITY Sscr "&#119982;" >
+ <!ENTITY Tscr "&#119983;" >
+ <!ENTITY Uscr "&#119984;" >
+ <!ENTITY Vscr "&#119985;" >
+ <!ENTITY Wscr "&#119986;" >
+ <!ENTITY Xscr "&#119987;" >
+ <!ENTITY Yscr "&#119988;" >
+ <!ENTITY Zscr "&#119989;" >
+ <!ENTITY ascr "&#119990;" >
+ <!ENTITY bscr "&#119991;" >
+ <!ENTITY cscr "&#119992;" >
+ <!ENTITY dscr "&#119993;" >
+ <!ENTITY fscr "&#119995;" >
+ <!ENTITY hscr "&#119997;" >
+ <!ENTITY iscr "&#119998;" >
+ <!ENTITY jscr "&#119999;" >
+ <!ENTITY kscr "&#120000;" >
+ <!ENTITY lscr "&#120001;" >
+ <!ENTITY mscr "&#120002;" >
+ <!ENTITY nscr "&#120003;" >
+ <!ENTITY pscr "&#120005;" >
+ <!ENTITY qscr "&#120006;" >
+ <!ENTITY rscr "&#120007;" >
+ <!ENTITY sscr "&#120008;" >
+ <!ENTITY tscr "&#120009;" >
+ <!ENTITY uscr "&#120010;" >
+ <!ENTITY vscr "&#120011;" >
+ <!ENTITY wscr "&#120012;" >
+ <!ENTITY xscr "&#120013;" >
+ <!ENTITY yscr "&#120014;" >
+ <!ENTITY zscr "&#120015;" >
+ <!ENTITY Afr "&#120068;" >
+ <!ENTITY Bfr "&#120069;" >
+ <!ENTITY Dfr "&#120071;" >
+ <!ENTITY Efr "&#120072;" >
+ <!ENTITY Ffr "&#120073;" >
+ <!ENTITY Gfr "&#120074;" >
+ <!ENTITY Jfr "&#120077;" >
+ <!ENTITY Kfr "&#120078;" >
+ <!ENTITY Lfr "&#120079;" >
+ <!ENTITY Mfr "&#120080;" >
+ <!ENTITY Nfr "&#120081;" >
+ <!ENTITY Ofr "&#120082;" >
+ <!ENTITY Pfr "&#120083;" >
+ <!ENTITY Qfr "&#120084;" >
+ <!ENTITY Sfr "&#120086;" >
+ <!ENTITY Tfr "&#120087;" >
+ <!ENTITY Ufr "&#120088;" >
+ <!ENTITY Vfr "&#120089;" >
+ <!ENTITY Wfr "&#120090;" >
+ <!ENTITY Xfr "&#120091;" >
+ <!ENTITY Yfr "&#120092;" >
+ <!ENTITY afr "&#120094;" >
+ <!ENTITY bfr "&#120095;" >
+ <!ENTITY cfr "&#120096;" >
+ <!ENTITY dfr "&#120097;" >
+ <!ENTITY efr "&#120098;" >
+ <!ENTITY ffr "&#120099;" >
+ <!ENTITY gfr "&#120100;" >
+ <!ENTITY hfr "&#120101;" >
+ <!ENTITY ifr "&#120102;" >
+ <!ENTITY jfr "&#120103;" >
+ <!ENTITY kfr "&#120104;" >
+ <!ENTITY lfr "&#120105;" >
+ <!ENTITY mfr "&#120106;" >
+ <!ENTITY nfr "&#120107;" >
+ <!ENTITY ofr "&#120108;" >
+ <!ENTITY pfr "&#120109;" >
+ <!ENTITY qfr "&#120110;" >
+ <!ENTITY rfr "&#120111;" >
+ <!ENTITY sfr "&#120112;" >
+ <!ENTITY tfr "&#120113;" >
+ <!ENTITY ufr "&#120114;" >
+ <!ENTITY vfr "&#120115;" >
+ <!ENTITY wfr "&#120116;" >
+ <!ENTITY xfr "&#120117;" >
+ <!ENTITY yfr "&#120118;" >
+ <!ENTITY zfr "&#120119;" >
+ <!ENTITY Aopf "&#120120;" >
+ <!ENTITY Bopf "&#120121;" >
+ <!ENTITY Dopf "&#120123;" >
+ <!ENTITY Eopf "&#120124;" >
+ <!ENTITY Fopf "&#120125;" >
+ <!ENTITY Gopf "&#120126;" >
+ <!ENTITY Iopf "&#120128;" >
+ <!ENTITY Jopf "&#120129;" >
+ <!ENTITY Kopf "&#120130;" >
+ <!ENTITY Lopf "&#120131;" >
+ <!ENTITY Mopf "&#120132;" >
+ <!ENTITY Oopf "&#120134;" >
+ <!ENTITY Sopf "&#120138;" >
+ <!ENTITY Topf "&#120139;" >
+ <!ENTITY Uopf "&#120140;" >
+ <!ENTITY Vopf "&#120141;" >
+ <!ENTITY Wopf "&#120142;" >
+ <!ENTITY Xopf "&#120143;" >
+ <!ENTITY Yopf "&#120144;" >
+ <!ENTITY aopf "&#120146;" >
+ <!ENTITY bopf "&#120147;" >
+ <!ENTITY copf "&#120148;" >
+ <!ENTITY dopf "&#120149;" >
+ <!ENTITY eopf "&#120150;" >
+ <!ENTITY fopf "&#120151;" >
+ <!ENTITY gopf "&#120152;" >
+ <!ENTITY hopf "&#120153;" >
+ <!ENTITY iopf "&#120154;" >
+ <!ENTITY jopf "&#120155;" >
+ <!ENTITY kopf "&#120156;" >
+ <!ENTITY lopf "&#120157;" >
+ <!ENTITY mopf "&#120158;" >
+ <!ENTITY nopf "&#120159;" >
+ <!ENTITY oopf "&#120160;" >
+ <!ENTITY popf "&#120161;" >
+ <!ENTITY qopf "&#120162;" >
+ <!ENTITY ropf "&#120163;" >
+ <!ENTITY sopf "&#120164;" >
+ <!ENTITY topf "&#120165;" >
+ <!ENTITY uopf "&#120166;" >
+ <!ENTITY vopf "&#120167;" >
+ <!ENTITY wopf "&#120168;" >
+ <!ENTITY xopf "&#120169;" >
+ <!ENTITY yopf "&#120170;" >
+ <!ENTITY zopf "&#120171;" >
diff --git a/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java b/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java
index 69a63badd150..6164e7aac101 100644
--- a/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java
+++ b/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java
@@ -721,7 +721,14 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV
@Override
public boolean suitableForFile(@NotNull final PsiFile file) {
- return file instanceof XmlFile;
+ if (file instanceof XmlFile) return true;
+
+ for (PsiFile psiFile : file.getViewProvider().getAllFiles()) {
+ if (psiFile instanceof XmlFile) {
+ return true;
+ }
+ }
+ return false;
}
@Override
diff --git a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckDtdReferencesInspection.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckDtdReferencesInspection.java
index e266aefaf7fd..9768dd6e0f66 100644
--- a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckDtdReferencesInspection.java
+++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckDtdReferencesInspection.java
@@ -23,17 +23,14 @@ import com.intellij.codeInspection.XmlInspectionGroupNames;
import com.intellij.codeInspection.XmlSuppressableInspectionTool;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.psi.PsiElementVisitor;
-import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.XmlElementVisitor;
-import com.intellij.psi.xml.*;
-import com.intellij.util.containers.HashMap;
+import com.intellij.psi.xml.XmlElement;
+import com.intellij.psi.xml.XmlElementContentSpec;
+import com.intellij.psi.xml.XmlEntityRef;
import com.intellij.xml.XmlBundle;
-import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
-import java.util.Map;
-
/**
* @author Maxim Mossienko
*/
@@ -47,49 +44,14 @@ public class CheckDtdReferencesInspection extends XmlSuppressableInspectionTool
@NotNull
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
return new XmlElementVisitor() {
-
- private final Map<PsiFile, Boolean> myDoctypeMap = new HashMap<PsiFile, Boolean>();
-
@Override
public void visitXmlElement(final XmlElement element) {
- if (isHtml5Doctype(element)) {
- return;
- }
-
if (element instanceof XmlElementContentSpec ||
element instanceof XmlEntityRef
) {
doCheckRefs(element, holder);
}
}
-
- private boolean isHtml5Doctype(XmlElement element) {
- if (HtmlUtil.isHtml5Context(element)) {
- return true;
- }
-
- PsiFile file = element.getContainingFile();
- if (file instanceof XmlFile) {
- if (!myDoctypeMap.containsKey(file)) {
- myDoctypeMap.put(file, computeHtml5Doctype((XmlFile)file));
- }
- return myDoctypeMap.get(file);
- }
- return false;
- }
-
- private boolean computeHtml5Doctype(XmlFile file) {
- XmlDoctype doctype = null;
- //Search for doctypes from providers
- for (HtmlDoctypeProvider provider : HtmlDoctypeProvider.EP_NAME.getExtensions()) {
- doctype = provider.getDoctype(file);
- if (doctype != null) {
- break;
- }
- }
-
- return doctype != null && HtmlUtil.isHtml5Doctype(doctype);
- }
};
}
@@ -123,11 +85,4 @@ public class CheckDtdReferencesInspection extends XmlSuppressableInspectionTool
public String getDisplayName() {
return XmlBundle.message("xml.inspections.check.dtd.references");
}
-
- @Override
- @NotNull
- @NonNls
- public String getShortName() {
- return "CheckDtdRefs";
- }
}
diff --git a/xml/xml-psi-impl/resources/standardSchemas/plugin.dtd b/xml/xml-psi-impl/resources/standardSchemas/plugin.dtd
index c1cb3349ecbf..bb094298f648 100644
--- a/xml/xml-psi-impl/resources/standardSchemas/plugin.dtd
+++ b/xml/xml-psi-impl/resources/standardSchemas/plugin.dtd
@@ -149,6 +149,8 @@
relative-to-action CDATA #IMPLIED>
<!ELEMENT separator EMPTY>
+<!ELEMENT abbreviation EMPTY>
+
<!-- helpset is a name of file from PLUGIN/help/ folder
Example: <helpset file="myhelp.jar" path="/Help.hs"/>
-->
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlElementDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlElementDescriptorImpl.java
index 12b2468f6abd..2dd7767f435f 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlElementDescriptorImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlElementDescriptorImpl.java
@@ -95,8 +95,8 @@ public class HtmlElementDescriptorImpl extends BaseXmlElementDescriptorImpl {
}
public XmlAttributeDescriptor getAttributeDescriptor(String attributeName, final XmlTag context) {
- if (!myCaseSensitive) attributeName = attributeName.toLowerCase();
- XmlAttributeDescriptor descriptor = super.getAttributeDescriptor(attributeName, context);
+ String caseSensitiveAttributeName = !myCaseSensitive ? attributeName.toLowerCase() : attributeName;
+ XmlAttributeDescriptor descriptor = super.getAttributeDescriptor(caseSensitiveAttributeName, context);
if (descriptor == null) descriptor = RelaxedHtmlFromSchemaElementDescriptor.getAttributeDescriptorFromFacelets(attributeName, context);
if (descriptor == null) {
@@ -106,7 +106,7 @@ public class HtmlElementDescriptorImpl extends BaseXmlElementDescriptorImpl {
XmlNSDescriptor nsdescriptor = context.getNSDescriptor(XmlUtil.XML_NAMESPACE_URI, true);
if (nsdescriptor instanceof XmlNSDescriptorImpl) {
descriptor = ((XmlNSDescriptorImpl)nsdescriptor).getAttribute(
- XmlUtil.findLocalNameByQualifiedName(attributeName), XmlUtil.XML_NAMESPACE_URI, context);
+ XmlUtil.findLocalNameByQualifiedName(caseSensitiveAttributeName), XmlUtil.XML_NAMESPACE_URI, context);
}
}
}
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlEntityRefImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlEntityRefImpl.java
index 310f5a219adc..e666cdcea090 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlEntityRefImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlEntityRefImpl.java
@@ -26,8 +26,10 @@ import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.*;
import com.intellij.util.ArrayUtil;
+import com.intellij.xml.Html5SchemaProvider;
import com.intellij.xml.XmlElementDescriptor;
import com.intellij.xml.impl.schema.AnyXmlElementDescriptor;
+import com.intellij.xml.util.HtmlUtil;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -104,7 +106,7 @@ public class XmlEntityRefImpl extends XmlElementImpl implements XmlEntityRef {
public boolean execute(@NotNull PsiElement element) {
if (element instanceof XmlDoctype) {
XmlDoctype xmlDoctype = (XmlDoctype)element;
- final String dtdUri = XmlUtil.getDtdUri(xmlDoctype);
+ final String dtdUri = getDtdForEntity(xmlDoctype);
if (dtdUri != null) {
XmlFile file = XmlUtil.getContainingFile(element);
if (file == null) return true;
@@ -155,7 +157,8 @@ public class XmlEntityRefImpl extends XmlElementImpl implements XmlEntityRef {
final XmlElementDescriptor descriptor = rootTag.getDescriptor();
if (descriptor != null && !(descriptor instanceof AnyXmlElementDescriptor)) {
- PsiElement element = descriptor.getDeclaration();
+ PsiElement element = !HtmlUtil.isHtml5Context(rootTag) ? descriptor.getDeclaration() :
+ XmlUtil.findXmlFile((XmlFile)targetElement, Html5SchemaProvider.getCharsDtdLocation());
final PsiFile containingFile = element != null ? element.getContainingFile():null;
final XmlFile descriptorFile = containingFile instanceof XmlFile ? (XmlFile)containingFile:null;
@@ -179,6 +182,10 @@ public class XmlEntityRefImpl extends XmlElementImpl implements XmlEntityRef {
}
}
+ private static String getDtdForEntity(XmlDoctype xmlDoctype) {
+ return HtmlUtil.isHtml5Doctype(xmlDoctype) ? Html5SchemaProvider.getCharsDtdLocation() : XmlUtil.getDtdUri(xmlDoctype);
+ }
+
public XmlTag getParentTag() {
final XmlElement parent = (XmlElement)getParent();
if(parent instanceof XmlTag) return (XmlTag)parent;
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/Html5SchemaProvider.java b/xml/xml-psi-impl/src/com/intellij/xml/Html5SchemaProvider.java
index bfb1ef6c4e1b..b9072c34a0f9 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/Html5SchemaProvider.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/Html5SchemaProvider.java
@@ -19,6 +19,7 @@ public abstract class Html5SchemaProvider {
private static String HTML5_SCHEMA_LOCATION;
private static String XHTML5_SCHEMA_LOCATION;
+ private static String CHARS_DTD_LOCATION;
private static boolean ourInitialized;
@@ -32,6 +33,12 @@ public abstract class Html5SchemaProvider {
return XHTML5_SCHEMA_LOCATION;
}
+ public static String getCharsDtdLocation() {
+ ensureInitialized();
+ return CHARS_DTD_LOCATION;
+ }
+
+
private synchronized static void ensureInitialized() {
if (ourInitialized) return;
ourInitialized = true;
@@ -39,6 +46,7 @@ public abstract class Html5SchemaProvider {
final Html5SchemaProvider[] providers = EP_NAME.getExtensions();
final URL htmlSchemaLocationURL;
final URL xhtmlSchemaLocationURL;
+ final URL dtdCharsLocationURL;
if (providers.length > 1) {
LOG.error("More than one HTML5 schema providers found: " + getClassesListString(providers));
@@ -47,11 +55,13 @@ public abstract class Html5SchemaProvider {
if (providers.length > 0) {
htmlSchemaLocationURL = providers[0].getHtmlSchemaLocation();
xhtmlSchemaLocationURL = providers[0].getXhtmlSchemaLocation();
+ dtdCharsLocationURL = providers[0].getCharsLocation();
}
else {
LOG.info("RelaxNG based schema for HTML5 is not supported. Old XSD schema will be used");
htmlSchemaLocationURL = Html5SchemaProvider.class.getResource(ExternalResourceManagerEx.STANDARD_SCHEMAS + "html5/xhtml5.xsd");
xhtmlSchemaLocationURL = htmlSchemaLocationURL;
+ dtdCharsLocationURL = htmlSchemaLocationURL;
}
HTML5_SCHEMA_LOCATION = VfsUtilCore.urlToPath(VfsUtilCore.fixURLforIDEA(
@@ -61,6 +71,10 @@ public abstract class Html5SchemaProvider {
XHTML5_SCHEMA_LOCATION = VfsUtilCore.urlToPath(VfsUtilCore.fixURLforIDEA(
URLUtil.unescapePercentSequences(xhtmlSchemaLocationURL.toExternalForm())));
LOG.info("XHTML5_SCHEMA_LOCATION = " + getXhtml5SchemaLocation());
+
+ CHARS_DTD_LOCATION = VfsUtilCore.urlToPath(VfsUtilCore.fixURLforIDEA(
+ URLUtil.unescapePercentSequences(dtdCharsLocationURL.toExternalForm())));
+ LOG.info("CHARS_DTD_LOCATION = " + getCharsDtdLocation());
}
@NotNull
@@ -69,6 +83,9 @@ public abstract class Html5SchemaProvider {
@NotNull
public abstract URL getXhtmlSchemaLocation();
+ @NotNull
+ public abstract URL getCharsLocation();
+
static {
}