Pergunta

Eu tenho uma classe Document que é responsável por manter o documento que venham a ser compactado e, em seguida, impresso na página. Nesse documento contém DOCTYPE do documento. O problema que estou enfrentando é como implementar corretamente exibindo o Doctype.

Por exemplo: eu poderia criar uma matriz de Doctypes populares que são os mais utilizados, e, em seguida, se você digitar 'rigorosa', seria automaticamente pegar HTML 4.01 Strict. Se não houver um DocType conhecido, poderia supor que você está entrando em um DocType costume, e apenas mostrar o que você digitou. Este parece ser um sujeito a erros e clumbsy.

    $document->setDoctype("strict");

    ..... in a class far, far, away........
    function setDocType($type)
    {
        if(in_array($type, $this->doctypes))
         {
             $this->doctype = $this->doctypes[$type];
         }
         else
         {
             $this->doctype = $type;
         }
    }

Outra maneira de fazer isso seria a de simplesmente tem que entrar em todo o DocType cada vez.

$document->setDoctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">');

Como você lidar com este problema?

Foi útil?

Solução

Depende se você quer permitir entrar doctypes personalizados. Se você considerar que situação uma exceção que você provavelmente deve lançar uma exceção quando alguém tenta usar doctype indefinido. Você também pode fornecer um método para definir um tipo de documento personalizado e força usando esse método antes de definir o tipo de documento real.

eu faria algo assim:

class Document {
    private $doctypes = array(
        'html4' => '...',
        'xhtml1strict' => '...'
    );

    private $doctype = null;

    public function addCustomDocType($name, $definition) {
        if (empty($this->doctypes[$name])) {
            $this->doctypes[$name] = $definition;
        } else {
            throw new Exception('Definition already exists');
        }
    }

    public function setDocType($name) {
        if (!empty($this->doctypes[$name])) {
            $this->doctype = $this->doctypes[$name];
        } else {
            throw new Exception('Doctype not found');
        }
    }
}

A segunda solução onde você deve digitar doctype definição é IMO feio e eu gostaria de evitá-lo.

Outras dicas

Eu acho que você deve apenas fazer o checkout da lista doctype W3C. http://www.w3.org/QA/2002/ 04 / válido-DTD-list.html

Os usuários estão autorizados a entrar um tipo de documento personalizado?

Talvez criar uma classe base

Doc

E estendê-lo para cada tipo, ex:

StrictDoc estende Doc etc.

E vai definir o seu próprio tipo de documento para cada um. Se você quiser adicionar aos tipos doc, basta criar outra classe que estende Doc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top