package hinoeditorpane ;
import java.awt.Color ;
import java.util.HashMap ;
import javax.swing.JEditorPane ;
import javax.swing.SwingUtilities ;
import javax.swing.event.DocumentEvent ;
import javax.swing.event.DocumentListener ;
import javax.swing.text.DefaultStyledDocument ;
import javax.swing.text.SimpleAttributeSet ;
import javax.swing.text.StyleConstants ;
HashMap
< String ,SimpleAttributeSet
> attr
= new HashMap
< String ,SimpleAttributeSet
> ( ) ; public HinoEditorPane( ) {
setDocument( doc) ;
doc.addDocumentListener ( this ) ;
attr
= new HashMap
< String ,SimpleAttributeSet
> ( ) ; attr.put ( "token" ,token) ;
attr.put ( "suuzi" ,suuzi) ;
attr.put ( "comment" ,comment) ;
attr.put ( "identifer" ,identifer) ;
}
attr.put ( type,at) ;
}
return attr.get ( type) ;
}
@Override
//HinoSyntax.doSyntax(this);
@Override
public void run( ) {
doSyntax( ) ;
}
} ) ;
}
@Override
//HinoSyntax.doSyntax(this);
}
@Override
}
void doSyntax( ) {
int n= 0 ;
while ( n< getText( ) .length ( ) ) {
n= token( n) ;
n++;
}
}
int token( int n) {
String str
= getText
( ) .
substring ( n
) ; if ( str.startsWith ( "もし" ) ) {
doc.setCharacterAttributes ( n, "もし" .length ( ) , attr.get ( "token" ) , true ) ;
}
return n;
}
}
cGFja2FnZSBoaW5vZWRpdG9ycGFuZTsKCmltcG9ydCBqYXZhLmF3dC5Db2xvcjsKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwoKaW1wb3J0IGphdmF4LnN3aW5nLkpFZGl0b3JQYW5lOwppbXBvcnQgamF2YXguc3dpbmcuU3dpbmdVdGlsaXRpZXM7CmltcG9ydCBqYXZheC5zd2luZy5ldmVudC5Eb2N1bWVudEV2ZW50OwppbXBvcnQgamF2YXguc3dpbmcuZXZlbnQuRG9jdW1lbnRMaXN0ZW5lcjsKaW1wb3J0IGphdmF4LnN3aW5nLnRleHQuRGVmYXVsdFN0eWxlZERvY3VtZW50OwppbXBvcnQgamF2YXguc3dpbmcudGV4dC5TaW1wbGVBdHRyaWJ1dGVTZXQ7CmltcG9ydCBqYXZheC5zd2luZy50ZXh0LlN0eWxlQ29uc3RhbnRzOwoKcHVibGljIGNsYXNzIEhpbm9FZGl0b3JQYW5lIGV4dGVuZHMgSkVkaXRvclBhbmUgaW1wbGVtZW50cyBEb2N1bWVudExpc3RlbmVyewoJSGFzaE1hcDxTdHJpbmcsU2ltcGxlQXR0cmlidXRlU2V0PiBhdHRyPW5ldyBIYXNoTWFwPFN0cmluZyxTaW1wbGVBdHRyaWJ1dGVTZXQ+KCk7CglEZWZhdWx0U3R5bGVkRG9jdW1lbnQgZG9jPW5ldyBEZWZhdWx0U3R5bGVkRG9jdW1lbnQoKTsKCXB1YmxpYyBIaW5vRWRpdG9yUGFuZSgpIHsKCQlzZXREb2N1bWVudChkb2MpOwoJCWRvYy5hZGREb2N1bWVudExpc3RlbmVyKHRoaXMpOwoJCWF0dHI9bmV3IEhhc2hNYXA8U3RyaW5nLFNpbXBsZUF0dHJpYnV0ZVNldD4oKTsKCQlTaW1wbGVBdHRyaWJ1dGVTZXQgdG9rZW4gPSBuZXcgU2ltcGxlQXR0cmlidXRlU2V0KCk7CgkJdG9rZW4uYWRkQXR0cmlidXRlKFN0eWxlQ29uc3RhbnRzLkJvbGQsIHRydWUpOwoJCXRva2VuLmFkZEF0dHJpYnV0ZShTdHlsZUNvbnN0YW50cy5Gb3JlZ3JvdW5kLCBuZXcgQ29sb3IoMCwwLCAyNTUpKTsKCQlhdHRyLnB1dCgidG9rZW4iLHRva2VuKTsKCQlTaW1wbGVBdHRyaWJ1dGVTZXQgc3V1emkgPSBuZXcgU2ltcGxlQXR0cmlidXRlU2V0KCk7CgkJc3V1emkuYWRkQXR0cmlidXRlKFN0eWxlQ29uc3RhbnRzLkZvcmVncm91bmQsIG5ldyBDb2xvcigxMjcsMTI3LDI1NSkpOwoJCWF0dHIucHV0KCJzdXV6aSIsc3V1emkpOwoJCVNpbXBsZUF0dHJpYnV0ZVNldCBjb21tZW50ID0gbmV3IFNpbXBsZUF0dHJpYnV0ZVNldCgpOwoJCWNvbW1lbnQuYWRkQXR0cmlidXRlKFN0eWxlQ29uc3RhbnRzLkZvcmVncm91bmQsIG5ldyBDb2xvcigwLDI1NSwgMCkpOwoJCWF0dHIucHV0KCJjb21tZW50Iixjb21tZW50KTsKCQlTaW1wbGVBdHRyaWJ1dGVTZXQgaWRlbnRpZmVyID0gbmV3IFNpbXBsZUF0dHJpYnV0ZVNldCgpOwoJCWlkZW50aWZlci5hZGRBdHRyaWJ1dGUoU3R5bGVDb25zdGFudHMuRm9yZWdyb3VuZCwgbmV3IENvbG9yKDAsMCwgMCkpOwoJCWF0dHIucHV0KCJpZGVudGlmZXIiLGlkZW50aWZlcik7Cgl9CgoJcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyB0eXBlLFNpbXBsZUF0dHJpYnV0ZVNldCBhdCl7CgkJYXR0ci5wdXQodHlwZSxhdCk7Cgl9CgoJcHVibGljIFNpbXBsZUF0dHJpYnV0ZVNldCBnZXRBdHRyaWJ1dGUoU3RyaW5nIHR5cGUpewoJCXJldHVybiBhdHRyLmdldCh0eXBlKTsKCX0KCglAT3ZlcnJpZGUKCXB1YmxpYyB2b2lkIGluc2VydFVwZGF0ZShEb2N1bWVudEV2ZW50IGUpIHsKCQlTeXN0ZW0ub3V0LnByaW50bG4oImluc2VydCIpOwoJCS8vSGlub1N5bnRheC5kb1N5bnRheCh0aGlzKTsKCQlTd2luZ1V0aWxpdGllcy5pbnZva2VMYXRlcihuZXcgUnVubmFibGUoKSB7CgkJCUBPdmVycmlkZQoJCQlwdWJsaWMgdm9pZCBydW4oKSB7CgkJCQlkb1N5bnRheCgpOwoJCQl9CgkJfSk7Cgl9CgoJQE92ZXJyaWRlCglwdWJsaWMgdm9pZCByZW1vdmVVcGRhdGUoRG9jdW1lbnRFdmVudCBlKSB7CgkJU3lzdGVtLm91dC5wcmludGxuKCJyZW1vdmUiKTsKCQkvL0hpbm9TeW50YXguZG9TeW50YXgodGhpcyk7Cgl9CgoJQE92ZXJyaWRlCglwdWJsaWMgdm9pZCBjaGFuZ2VkVXBkYXRlKERvY3VtZW50RXZlbnQgZSkgewoJCVN5c3RlbS5vdXQucHJpbnRsbigiY2hhbmdlIik7Cgl9CgoJdm9pZCBkb1N5bnRheCgpewoJCWludCBuPTA7CgkJd2hpbGUobjxnZXRUZXh0KCkubGVuZ3RoKCkpewoJCQluPXRva2VuKG4pOwoJCQluKys7CgkJfQoJfQoKCWludCB0b2tlbihpbnQgbil7CgkJU3RyaW5nIHN0cj1nZXRUZXh0KCkuc3Vic3RyaW5nKG4pOwoJCWlmKHN0ci5zdGFydHNXaXRoKCLjgoLjgZciKSl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGl0Iik7CgkJCWRvYy5zZXRDaGFyYWN0ZXJBdHRyaWJ1dGVzKG4sICLjgoLjgZciLmxlbmd0aCgpLCBhdHRyLmdldCgidG9rZW4iKSwgdHJ1ZSk7CgkJfQoJCXJldHVybiBuOwoJfQp9Cg==